A few fixes for RP2350B I2S

With this, I do get a waveform from the pico-playground sine_wave demo
using
            PICO_AUDIO_I2S_DATA_PIN=40
            PICO_AUDIO_I2S_CLOCK_PIN_BASE=41
pull/91/head
Jeff Epler 2025-03-20 12:21:22 -05:00
rodzic f05d4f7371
commit 0b7be7c7fc
2 zmienionych plików z 8 dodań i 2 usunięć

Wyświetl plik

@ -52,9 +52,15 @@ const audio_format_t *audio_i2s_setup(const audio_format_t *intended_audio_forma
gpio_set_function(config->clock_pin_base, func);
gpio_set_function(config->clock_pin_base + 1, func);
#if PICO_PIO_VERSION > 0
if(config->data_pin >= 32 || config->clock_pin_base + 1 >= 32) {
pio_set_gpio_base(audio_pio, 16);
}
#endif
uint8_t sm = shared_state.pio_sm = config->pio_sm;
pio_sm_claim(audio_pio, sm);
uint offset = pio_add_program(audio_pio, &audio_i2s_program);
audio_i2s_program_init(audio_pio, sm, offset, config->data_pin, config->clock_pin_base);

Wyświetl plik

@ -54,8 +54,8 @@ static inline void audio_i2s_program_init(PIO pio, uint sm, uint offset, uint da
pio_sm_init(pio, sm, offset, &sm_config);
uint pin_mask = (1u << data_pin) | (3u << clock_pin_base);
pio_sm_set_pindirs_with_mask(pio, sm, pin_mask, pin_mask);
uint64_t pin_mask = (1ull << data_pin) | (3ull << clock_pin_base);
pio_sm_set_pindirs_with_mask64(pio, sm, pin_mask, pin_mask);
pio_sm_set_pins(pio, sm, 0); // clear pins
pio_sm_exec(pio, sm, pio_encode_jmp(offset + audio_i2s_offset_entry_point));