rp2040_sdio.pio.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // -------------------------------------------------- //
  2. // This file is autogenerated by pioasm; do not edit! //
  3. // -------------------------------------------------- //
  4. #pragma once
  5. #if !PICO_NO_HARDWARE
  6. #include "hardware/pio.h"
  7. #endif
  8. #define SDIO_IRQ 7
  9. // ------- //
  10. // cmd_rsp //
  11. // ------- //
  12. #define cmd_rsp_wrap_target 0
  13. #define cmd_rsp_wrap 9
  14. static const uint16_t cmd_rsp_program_instructions[] = {
  15. // .wrap_target
  16. 0x7101, // 0: out pins, 1 side 0 [1]
  17. 0x1940, // 1: jmp x--, 0 side 1 [1]
  18. 0x1160, // 2: jmp !y, 0 side 0 [1]
  19. 0xfb80, // 3: set pindirs, 0 side 1 [3]
  20. 0xb342, // 4: nop side 0 [3]
  21. 0xba42, // 5: nop side 1 [2]
  22. 0x00c4, // 6: jmp pin, 4
  23. 0x4001, // 7: in pins, 1
  24. 0x9260, // 8: push iffull block side 0 [2]
  25. 0x1987, // 9: jmp y--, 7 side 1 [1]
  26. // .wrap
  27. };
  28. #if !PICO_NO_HARDWARE
  29. static const struct pio_program cmd_rsp_program = {
  30. .instructions = cmd_rsp_program_instructions,
  31. .length = 10,
  32. .origin = -1,
  33. };
  34. static inline pio_sm_config cmd_rsp_program_get_default_config(uint offset) {
  35. pio_sm_config c = pio_get_default_sm_config();
  36. sm_config_set_wrap(&c, offset + cmd_rsp_wrap_target, offset + cmd_rsp_wrap);
  37. sm_config_set_sideset(&c, 2, true, false);
  38. return c;
  39. }
  40. static inline pio_sm_config pio_cmd_rsp_program_config(uint offset, uint cmd_pin, uint clk_pin, uint16_t div_int, uint8_t div_frac) {
  41. pio_sm_config c = cmd_rsp_program_get_default_config(offset);
  42. sm_config_set_sideset_pins(&c, clk_pin);
  43. sm_config_set_out_pins(&c, cmd_pin, 1);
  44. sm_config_set_in_pins(&c, cmd_pin);
  45. sm_config_set_set_pins(&c, cmd_pin, 1);
  46. sm_config_set_jmp_pin(&c, cmd_pin);
  47. sm_config_set_in_shift(&c, false, false, 8);
  48. sm_config_set_out_shift(&c, false, true, 8);
  49. sm_config_set_clkdiv_int_frac(&c, div_int, div_frac);
  50. return c;
  51. }
  52. #endif
  53. // --------------- //
  54. // rd_data_w_clock //
  55. // --------------- //
  56. #define rd_data_w_clock_wrap_target 0
  57. #define rd_data_w_clock_wrap 7
  58. static const uint16_t rd_data_w_clock_program_instructions[] = {
  59. // .wrap_target
  60. 0xa022, // 0: mov x, y side 0
  61. 0xa342, // 1: nop side 0 [3]
  62. 0x13c1, // 2: jmp pin, 1 side 1 [3]
  63. 0xa242, // 3: nop side 0 [2]
  64. 0xb142, // 4: nop side 1 [1]
  65. 0x4204, // 5: in pins, 4 side 0 [2]
  66. 0x9060, // 6: push iffull block side 1
  67. 0x1045, // 7: jmp x--, 5 side 1
  68. // .wrap
  69. };
  70. #if !PICO_NO_HARDWARE
  71. static const struct pio_program rd_data_w_clock_program = {
  72. .instructions = rd_data_w_clock_program_instructions,
  73. .length = 8,
  74. .origin = -1,
  75. };
  76. static inline pio_sm_config rd_data_w_clock_program_get_default_config(uint offset) {
  77. pio_sm_config c = pio_get_default_sm_config();
  78. sm_config_set_wrap(&c, offset + rd_data_w_clock_wrap_target, offset + rd_data_w_clock_wrap);
  79. sm_config_set_sideset(&c, 1, false, false);
  80. return c;
  81. }
  82. static inline pio_sm_config pio_rd_data_w_clock_program_config(uint offset, uint d0_pin, uint clk_pin, float clk_div) {
  83. pio_sm_config c = rd_data_w_clock_program_get_default_config(offset);
  84. sm_config_set_sideset_pins(&c, clk_pin);
  85. sm_config_set_in_pins(&c, d0_pin);
  86. sm_config_set_jmp_pin(&c, d0_pin);
  87. sm_config_set_in_shift(&c, false, false, 32);
  88. sm_config_set_out_shift(&c, false, true, 32);
  89. sm_config_set_clkdiv(&c, clk_div);
  90. return c;
  91. }
  92. #endif
  93. // --------------- //
  94. // sdio_tx_w_clock //
  95. // --------------- //
  96. #define sdio_tx_w_clock_wrap_target 7
  97. #define sdio_tx_w_clock_wrap 7
  98. static const uint16_t sdio_tx_w_clock_program_instructions[] = {
  99. 0x7204, // 0: out pins, 4 side 0 [2]
  100. 0x1940, // 1: jmp x--, 0 side 1 [1]
  101. 0xfa80, // 2: set pindirs, 0 side 1 [2]
  102. 0x5c01, // 3: in pins, 1 side 1 [4]
  103. 0x1483, // 4: jmp y--, 3 side 0 [4]
  104. 0x1cc7, // 5: jmp pin, 7 side 1 [4]
  105. 0x1405, // 6: jmp 5 side 0 [4]
  106. // .wrap_target
  107. 0x9040, // 7: push iffull noblock side 0
  108. // .wrap
  109. };
  110. #if !PICO_NO_HARDWARE
  111. static const struct pio_program sdio_tx_w_clock_program = {
  112. .instructions = sdio_tx_w_clock_program_instructions,
  113. .length = 8,
  114. .origin = -1,
  115. };
  116. static inline pio_sm_config sdio_tx_w_clock_program_get_default_config(uint offset) {
  117. pio_sm_config c = pio_get_default_sm_config();
  118. sm_config_set_wrap(&c, offset + sdio_tx_w_clock_wrap_target, offset + sdio_tx_w_clock_wrap);
  119. sm_config_set_sideset(&c, 2, true, false);
  120. return c;
  121. }
  122. static inline pio_sm_config pio_sdio_tx_w_clock_program_config(uint offset, uint data_pin, uint clk_pin, int clk_div) {
  123. pio_sm_config c = sdio_tx_w_clock_program_get_default_config(offset);
  124. sm_config_set_sideset_pins(&c, clk_pin);
  125. sm_config_set_out_pins(&c, data_pin, 4);
  126. sm_config_set_in_pins(&c, data_pin);
  127. sm_config_set_set_pins(&c, data_pin, 4);
  128. sm_config_set_in_shift(&c, false, false, 8);
  129. sm_config_set_out_shift(&c, false, true, 32);
  130. sm_config_set_jmp_pin(&c, data_pin);
  131. sm_config_set_clkdiv_int_frac(&c, clk_div, 0);
  132. return c;
  133. }
  134. #endif