blue_pio_i2s.pio.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. // pio_i2s_out //
  10. // ----------- //
  11. #define pio_i2s_out_wrap_target 0
  12. #define pio_i2s_out_wrap 7
  13. static const uint16_t pio_i2s_out_program_instructions[] = {
  14. // .wrap_target
  15. 0xa822, // 0: mov x, y side 1
  16. 0x6001, // 1: out pins, 1 side 0
  17. 0x0841, // 2: jmp x--, 1 side 1
  18. 0x7001, // 3: out pins, 1 side 2
  19. 0xb822, // 4: mov x, y side 3
  20. 0x7001, // 5: out pins, 1 side 2
  21. 0x1845, // 6: jmp x--, 5 side 3
  22. 0x6001, // 7: out pins, 1 side 0
  23. // .wrap
  24. };
  25. #if !PICO_NO_HARDWARE
  26. static const struct pio_program pio_i2s_out_program = {
  27. .instructions = pio_i2s_out_program_instructions,
  28. .length = 8,
  29. .origin = -1,
  30. };
  31. static inline pio_sm_config pio_i2s_out_program_get_default_config(uint offset) {
  32. pio_sm_config c = pio_get_default_sm_config();
  33. sm_config_set_wrap(&c, offset + pio_i2s_out_wrap_target, offset + pio_i2s_out_wrap);
  34. sm_config_set_sideset(&c, 2, false, false);
  35. return c;
  36. }
  37. static inline void pio_i2s_out_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clock_pin_base, uint bits) {
  38. pio_gpio_init(pio, data_pin);
  39. pio_gpio_init(pio, clock_pin_base);
  40. pio_gpio_init(pio, clock_pin_base + 1);
  41. pio_sm_config sm_config = pio_i2s_out_program_get_default_config(offset);
  42. sm_config_set_out_pins(&sm_config, data_pin, 1);
  43. sm_config_set_sideset_pins(&sm_config, clock_pin_base);
  44. sm_config_set_out_shift(&sm_config, false, true, (bits <= 16) ? 2 * bits : bits);
  45. sm_config_set_fifo_join(&sm_config, PIO_FIFO_JOIN_TX);
  46. pio_sm_init(pio, sm, offset, &sm_config);
  47. uint pin_mask = (1u << data_pin) | (3u << clock_pin_base);
  48. pio_sm_set_pindirs_with_mask(pio, sm, pin_mask, pin_mask);
  49. pio_sm_set_pins(pio, sm, 0); // clear pins
  50. pio_sm_exec(pio, sm, pio_encode_set(pio_y, bits - 2));
  51. }
  52. #endif