/ src / usb_tx.pio.h
usb_tx.pio.h
  1  // -------------------------------------------------- //
  2  // This file is autogenerated by pioasm; do not edit! //
  3  // -------------------------------------------------- //
  4  
  5  #pragma once
  6  
  7  #if !PICO_NO_HARDWARE
  8  #include "hardware/pio.h"
  9  #endif
 10  
 11  #define IRQ_TX_EOP 0
 12  
 13  // ----------- //
 14  // usb_tx_dpdm //
 15  // ----------- //
 16  
 17  #define usb_tx_dpdm_wrap_target 1
 18  #define usb_tx_dpdm_wrap 4
 19  
 20  static const uint16_t __not_in_flash("tx_program") usb_tx_dpdm_program_instructions[] = {
 21      0xc700, //  0: irq    nowait 0        side 0 [7] 
 22              //     .wrap_target
 23      0x6ba2, //  1: out    pc, 2           side 1 [3] 
 24      0xeb80, //  2: set    pindirs, 0      side 1 [3] 
 25      0x73a2, //  3: out    pc, 2           side 2 [3] 
 26      0xe883, //  4: set    pindirs, 3      side 1     
 27              //     .wrap
 28  };
 29  
 30  #if !PICO_NO_HARDWARE
 31  static const struct pio_program __not_in_flash("tx_program") usb_tx_dpdm_program = {
 32      .instructions = usb_tx_dpdm_program_instructions,
 33      .length = 5,
 34      .origin = -1,
 35  };
 36  
 37  static inline pio_sm_config usb_tx_dpdm_program_get_default_config(uint offset) {
 38      pio_sm_config c = pio_get_default_sm_config();
 39      sm_config_set_wrap(&c, offset + usb_tx_dpdm_wrap_target, offset + usb_tx_dpdm_wrap);
 40      sm_config_set_sideset(&c, 2, false, false);
 41      return c;
 42  }
 43  #endif
 44  
 45  // --------------- //
 46  // usb_tx_pre_dpdm //
 47  // --------------- //
 48  
 49  #define usb_tx_pre_dpdm_wrap_target 1
 50  #define usb_tx_pre_dpdm_wrap 4
 51  
 52  static const uint16_t __not_in_flash("tx_program") usb_tx_pre_dpdm_program_instructions[] = {
 53      0xcf00, //  0: irq    nowait 0        side 1 [7] 
 54              //     .wrap_target
 55      0x6ba2, //  1: out    pc, 2           side 1 [3] 
 56      0xeb80, //  2: set    pindirs, 0      side 1 [3] 
 57      0x73a2, //  3: out    pc, 2           side 2 [3] 
 58      0xe883, //  4: set    pindirs, 3      side 1     
 59              //     .wrap
 60  };
 61  
 62  #if !PICO_NO_HARDWARE
 63  static const struct pio_program __not_in_flash("tx_program") usb_tx_pre_dpdm_program = {
 64      .instructions = usb_tx_pre_dpdm_program_instructions,
 65      .length = 5,
 66      .origin = -1,
 67  };
 68  
 69  static inline pio_sm_config usb_tx_pre_dpdm_program_get_default_config(uint offset) {
 70      pio_sm_config c = pio_get_default_sm_config();
 71      sm_config_set_wrap(&c, offset + usb_tx_pre_dpdm_wrap_target, offset + usb_tx_pre_dpdm_wrap);
 72      sm_config_set_sideset(&c, 2, false, false);
 73      return c;
 74  }
 75  #endif
 76  
 77  // ----------- //
 78  // usb_tx_dmdp //
 79  // ----------- //
 80  
 81  #define usb_tx_dmdp_wrap_target 1
 82  #define usb_tx_dmdp_wrap 4
 83  
 84  static const uint16_t __not_in_flash("tx_program") usb_tx_dmdp_program_instructions[] = {
 85      0xc700, //  0: irq    nowait 0        side 0 [7] 
 86              //     .wrap_target
 87      0x73a2, //  1: out    pc, 2           side 2 [3] 
 88      0xf380, //  2: set    pindirs, 0      side 2 [3] 
 89      0x6ba2, //  3: out    pc, 2           side 1 [3] 
 90      0xf083, //  4: set    pindirs, 3      side 2     
 91              //     .wrap
 92  };
 93  
 94  #if !PICO_NO_HARDWARE
 95  static const struct pio_program __not_in_flash("tx_program") usb_tx_dmdp_program = {
 96      .instructions = usb_tx_dmdp_program_instructions,
 97      .length = 5,
 98      .origin = -1,
 99  };
100  
101  static inline pio_sm_config usb_tx_dmdp_program_get_default_config(uint offset) {
102      pio_sm_config c = pio_get_default_sm_config();
103      sm_config_set_wrap(&c, offset + usb_tx_dmdp_wrap_target, offset + usb_tx_dmdp_wrap);
104      sm_config_set_sideset(&c, 2, false, false);
105      return c;
106  }
107  #endif
108  
109  // --------------- //
110  // usb_tx_pre_dmdp //
111  // --------------- //
112  
113  #define usb_tx_pre_dmdp_wrap_target 1
114  #define usb_tx_pre_dmdp_wrap 4
115  
116  static const uint16_t __not_in_flash("tx_program") usb_tx_pre_dmdp_program_instructions[] = {
117      0xd700, //  0: irq    nowait 0        side 2 [7] 
118              //     .wrap_target
119      0x73a2, //  1: out    pc, 2           side 2 [3] 
120      0xf380, //  2: set    pindirs, 0      side 2 [3] 
121      0x6ba2, //  3: out    pc, 2           side 1 [3] 
122      0xf083, //  4: set    pindirs, 3      side 2     
123              //     .wrap
124  };
125  
126  #if !PICO_NO_HARDWARE
127  static const struct pio_program __not_in_flash("tx_program") usb_tx_pre_dmdp_program = {
128      .instructions = usb_tx_pre_dmdp_program_instructions,
129      .length = 5,
130      .origin = -1,
131  };
132  
133  static inline pio_sm_config usb_tx_pre_dmdp_program_get_default_config(uint offset) {
134      pio_sm_config c = pio_get_default_sm_config();
135      sm_config_set_wrap(&c, offset + usb_tx_pre_dmdp_wrap_target, offset + usb_tx_pre_dmdp_wrap);
136      sm_config_set_sideset(&c, 2, false, false);
137      return c;
138  }
139  
140  #include "hardware/clocks.h"
141  #include "sdk_compat.h"
142    static void __no_inline_not_in_flash_func(usb_tx_configure_pins)(PIO pio, uint sm, uint pin_dp, uint pin_dm) {
143      if (pin_dp < pin_dm) {
144        pio_sm_set_out_pins(pio, sm, pin_dp, 2);
145        pio_sm_set_set_pins(pio, sm, pin_dp, 2);
146        pio_sm_set_sideset_pins(pio, sm, pin_dp);
147      } else {
148        pio_sm_set_out_pins(pio, sm, pin_dm, 2);
149        pio_sm_set_set_pins(pio, sm, pin_dm, 2);
150        pio_sm_set_sideset_pins(pio, sm, pin_dm);
151      }
152    }
153    static inline void usb_tx_fs_program_init(PIO pio, uint sm, uint offset,
154                                           uint pin_dp, uint pin_dm) {
155      pio_sm_set_pins_with_mask64(pio, sm, (1ull << pin_dp), ((1ull << pin_dp) | (1ull << pin_dm)));
156      gpio_pull_down(pin_dp);
157      gpio_pull_down(pin_dm);
158      pio_gpio_init(pio, pin_dp);
159      pio_gpio_init(pio, pin_dm);
160      pio_sm_config c = usb_tx_dpdm_program_get_default_config(offset);
161      // shifts to left, autopull, 8bit
162      sm_config_set_out_shift(&c, false, true, 8);
163      sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
164      // run at 48MHz
165      // clk_sys should be multiply of 12MHz
166      float div = (float)clock_get_hz(clk_sys) / (48000000UL);
167      sm_config_set_clkdiv(&c, div);
168      pio_sm_init(pio, sm, offset + 1, &c);
169      usb_tx_configure_pins(pio, sm, pin_dp, pin_dm);
170      pio_sm_set_enabled(pio, sm, true);
171    }
172    static inline void usb_tx_ls_program_init(PIO pio, uint sm, uint offset,
173                                           uint pin_dp, uint pin_dm) {
174      pio_sm_set_pins_with_mask64(pio, sm, (1ull << pin_dm), ((1ull << pin_dp) | (1ull << pin_dm)));
175      gpio_pull_down(pin_dp);
176      gpio_pull_down(pin_dm);
177      pio_gpio_init(pio, pin_dp);
178      pio_gpio_init(pio, pin_dm);
179      pio_sm_config c = usb_tx_dmdp_program_get_default_config(offset);
180      // shifts to left, autopull, 8bit
181      sm_config_set_out_shift(&c, false, true, 8);
182      sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
183      // run at 6MHz
184      // clk_sys should be multiply of 12MHz
185      float div = (float)clock_get_hz(clk_sys) / (6000000UL);
186      sm_config_set_clkdiv(&c, div);
187      pio_sm_init(pio, sm, offset + 1, &c);
188      usb_tx_configure_pins(pio, sm, pin_dp, pin_dm);
189      pio_sm_set_enabled(pio, sm, true);
190    }
191  
192  #endif
193