rp2040_sdio.pio.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. // ------------ //
  9. // sdio_cmd_clk //
  10. // ------------ //
  11. #define sdio_cmd_clk_wrap_target 0
  12. #define sdio_cmd_clk_wrap 17
  13. static const uint16_t sdio_cmd_clk_program_instructions[] = {
  14. // .wrap_target
  15. 0xb1e3, // 0: mov osr, null side 1 [1]
  16. 0xa24d, // 1: mov y, !status side 0 [2]
  17. 0x1161, // 2: jmp !y, 1 side 1 [1]
  18. 0x6260, // 3: out null, 32 side 0 [2]
  19. 0x7128, // 4: out x, 8 side 1 [1]
  20. 0xe201, // 5: set pins, 1 side 0 [2]
  21. 0xf181, // 6: set pindirs, 1 side 1 [1]
  22. 0x6201, // 7: out pins, 1 side 0 [2]
  23. 0x1147, // 8: jmp x--, 7 side 1 [1]
  24. 0xe280, // 9: set pindirs, 0 side 0 [2]
  25. 0x7128, // 10: out x, 8 side 1 [1]
  26. 0xa242, // 11: nop side 0 [2]
  27. 0x1131, // 12: jmp !x, 17 side 1 [1]
  28. 0xa242, // 13: nop side 0 [2]
  29. 0x11cd, // 14: jmp pin, 13 side 1 [1]
  30. 0x4201, // 15: in pins, 1 side 0 [2]
  31. 0x114f, // 16: jmp x--, 15 side 1 [1]
  32. 0x8220, // 17: push block side 0 [2]
  33. // .wrap
  34. };
  35. #if !PICO_NO_HARDWARE
  36. static const struct pio_program sdio_cmd_clk_program = {
  37. .instructions = sdio_cmd_clk_program_instructions,
  38. .length = 18,
  39. .origin = -1,
  40. };
  41. static inline pio_sm_config sdio_cmd_clk_program_get_default_config(uint offset) {
  42. pio_sm_config c = pio_get_default_sm_config();
  43. sm_config_set_wrap(&c, offset + sdio_cmd_clk_wrap_target, offset + sdio_cmd_clk_wrap);
  44. sm_config_set_sideset(&c, 1, false, false);
  45. return c;
  46. }
  47. #endif
  48. // ------------ //
  49. // sdio_data_rx //
  50. // ------------ //
  51. #define sdio_data_rx_wrap_target 0
  52. #define sdio_data_rx_wrap 4
  53. static const uint16_t sdio_data_rx_program_instructions[] = {
  54. // .wrap_target
  55. 0xa022, // 0: mov x, y
  56. 0x2020, // 1: wait 0 pin, 0
  57. //0x2492, // 2: wait 1 gpio, 18 [4]
  58. 0x248A, // 2: wait 1 gpio 10
  59. 0x4304, // 3: in pins, 4 [3]
  60. 0x0043, // 4: jmp x--, 3
  61. // .wrap
  62. };
  63. #if !PICO_NO_HARDWARE
  64. static const struct pio_program sdio_data_rx_program = {
  65. .instructions = sdio_data_rx_program_instructions,
  66. .length = 5,
  67. .origin = -1,
  68. };
  69. static inline pio_sm_config sdio_data_rx_program_get_default_config(uint offset) {
  70. pio_sm_config c = pio_get_default_sm_config();
  71. sm_config_set_wrap(&c, offset + sdio_data_rx_wrap_target, offset + sdio_data_rx_wrap);
  72. return c;
  73. }
  74. #endif
  75. // ------------ //
  76. // sdio_data_tx //
  77. // ------------ //
  78. #define sdio_data_tx_wrap_target 5
  79. #define sdio_data_tx_wrap 8
  80. static const uint16_t sdio_data_tx_program_instructions[] = {
  81. // 0x2012, // 0: wait 0 gpio, 18
  82. 0x200A, // 0: wait 0 GPIO 10
  83. // 0x2592, // 1: wait 1 gpio, 18 [5]
  84. 0x258A, // 1: wait 1 gpio 10
  85. 0x6204, // 2: out pins, 4 [2]
  86. 0x0142, // 3: jmp x--, 2 [1]
  87. 0xe280, // 4: set pindirs, 0 [2]
  88. // .wrap_target
  89. 0x4101, // 5: in pins, 1 [1]
  90. 0x0285, // 6: jmp y--, 5 [2]
  91. 0x21a0, // 7: wait 1 pin, 0 [1]
  92. 0x8220, // 8: push block [2]
  93. // .wrap
  94. };
  95. #if !PICO_NO_HARDWARE
  96. static const struct pio_program sdio_data_tx_program = {
  97. .instructions = sdio_data_tx_program_instructions,
  98. .length = 9,
  99. .origin = -1,
  100. };
  101. static inline pio_sm_config sdio_data_tx_program_get_default_config(uint offset) {
  102. pio_sm_config c = pio_get_default_sm_config();
  103. sm_config_set_wrap(&c, offset + sdio_data_tx_wrap_target, offset + sdio_data_tx_wrap);
  104. return c;
  105. }
  106. #endif