i2s: support swapped LRCK / BCK pins

pull/91/head
Jeff Epler 2025-03-24 09:49:03 -05:00
rodzic 0b7be7c7fc
commit c73f2f3a2b
3 zmienionych plików z 22 dodań i 1 usunięć

Wyświetl plik

@ -61,7 +61,9 @@ const audio_format_t *audio_i2s_setup(const audio_format_t *intended_audio_forma
pio_sm_claim(audio_pio, sm);
uint offset = pio_add_program(audio_pio, &audio_i2s_program);
const struct pio_program *program =
config->clock_pin_swapped ? &audio_i2s_swapped_program : &audio_i2s_program;
uint offset = pio_add_program(audio_pio, program);
audio_i2s_program_init(audio_pio, sm, offset, config->data_pin, config->clock_pin_base);

Wyświetl plik

@ -42,6 +42,24 @@ bitloop0:
public entry_point:
set x, 14 side 0b11
.program audio_i2s_swapped
.side_set 2
; /--- BCLK
; |/-- LRCLK
bitloop1: ; ||
out pins, 1 side 0b01
jmp x-- bitloop1 side 0b11
out pins, 1 side 0b00
set x, 14 side 0b10
bitloop0:
out pins, 1 side 0b00
jmp x-- bitloop0 side 0b10
out pins, 1 side 0b01
public entry_point:
set x, 14 side 0b11
% c-sdk {
static inline void audio_i2s_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clock_pin_base) {

Wyświetl plik

@ -115,6 +115,7 @@ typedef struct audio_i2s_config {
uint8_t clock_pin_base;
uint8_t dma_channel;
uint8_t pio_sm;
bool clock_pin_swapped;
} audio_i2s_config_t;
/** \brief Set up system to output I2S audio