8#include "hardware/pio.h"
15#define pdm_microphone_data_wrap_target 0
16#define pdm_microphone_data_wrap 3
17#define pdm_microphone_data_pio_version 0
19static const uint16_t pdm_microphone_data_program_instructions[] = {
29static const struct pio_program pdm_microphone_data_program = {
30 .instructions = pdm_microphone_data_program_instructions,
33 .pio_version = pdm_microphone_data_pio_version,
34#if PICO_PIO_VERSION > 0
35 .used_gpio_ranges = 0x0
39static inline pio_sm_config pdm_microphone_data_program_get_default_config(uint offset) {
40 pio_sm_config c = pio_get_default_sm_config();
41 sm_config_set_wrap(&c, offset + pdm_microphone_data_wrap_target, offset + pdm_microphone_data_wrap);
42 sm_config_set_sideset(&c, 1,
false,
false);
46static inline void pdm_microphone_data_init(PIO pio, uint sm, uint offset,
float clk_div, uint data_pin, uint clk_pin) {
47 pio_sm_set_consecutive_pindirs(pio, sm, data_pin, 1,
false);
48 pio_sm_set_consecutive_pindirs(pio, sm, clk_pin, 1,
true);
49 pio_sm_config c = pdm_microphone_data_program_get_default_config(offset);
50 sm_config_set_sideset_pins(&c, clk_pin);
51 sm_config_set_in_pins(&c, data_pin);
52 pio_gpio_init(pio, clk_pin);
53 pio_gpio_init(pio, data_pin);
54 sm_config_set_in_shift(&c,
false,
false, 8);
55 sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
56 sm_config_set_clkdiv(&c, clk_div);
57 pio_sm_init(pio, sm, offset, &c);