8#include "hardware/pio.h"
15#define joybus_host_wrap_target 0
16#define joybus_host_wrap 14
17#define joybus_host_pio_version 0
19#define joybus_host_TICKS_PER_BIT 24
21#define joybus_host_offset_transmit 0u
23static const uint16_t joybus_host_program_instructions[] = {
44static const struct pio_program joybus_host_program = {
45 .instructions = joybus_host_program_instructions,
48 .pio_version = joybus_host_pio_version,
49#if PICO_PIO_VERSION > 0
50 .used_gpio_ranges = 0x0
54static inline pio_sm_config joybus_host_program_get_default_config(uint offset) {
55 pio_sm_config c = pio_get_default_sm_config();
56 sm_config_set_wrap(&c, offset + joybus_host_wrap_target, offset + joybus_host_wrap);
57 sm_config_set_sideset(&c, 1,
false,
true);
61#include "hardware/clocks.h"
62static inline void joybus_host_program_init(PIO pio, uint sm, uint offset, uint pin, uint bus_freq) {
63 pio_sm_config c = joybus_host_program_get_default_config(offset);
65 sm_config_set_in_pins(&c, pin);
66 sm_config_set_sideset_pins(&c, pin);
68 sm_config_set_out_shift(&c,
false,
true, 8);
69 sm_config_set_in_shift(&c,
false,
true, 8);
71 float div = (float)clock_get_hz(clk_sys) / (joybus_host_TICKS_PER_BIT * bus_freq);
72 sm_config_set_clkdiv(&c, div);
74 pio_sm_init(pio, sm, offset, &c);
75 pio_sm_set_enabled(pio, sm,
true);