From 4d85079ff25f61882a01f506bfcdccf2cf5303e4 Mon Sep 17 00:00:00 2001 From: Broderick Thayer Date: Sun, 15 Feb 2026 15:22:24 -0500 Subject: [PATCH 1/2] Refactor AudioInputI2Sslave_F32 to add support for Teensy 4.0 --- input_i2s_f32.cpp | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/input_i2s_f32.cpp b/input_i2s_f32.cpp index 7e2189f..6bd15f6 100644 --- a/input_i2s_f32.cpp +++ b/input_i2s_f32.cpp @@ -273,10 +273,8 @@ void AudioInputI2Sslave_F32::begin(void) { dma.begin(true); // Allocate the DMA channel first - //block_left_1st = NULL; - //block_right_1st = NULL; - AudioOutputI2Sslave_F32::config_i2s(); + #if defined(KINETISK) CORE_PIN13_CONFIG = PORT_PCR_MUX(4); // pin 13, PTC5, I2S0_RXD0 @@ -293,12 +291,34 @@ void AudioInputI2Sslave_F32::begin(void) dma.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; dma.triggerAtHardwareEvent(DMAMUX_SOURCE_I2S0_RX); - update_responsibility = update_setup(); - dma.enable(); I2S0_RCSR |= I2S_RCSR_RE | I2S_RCSR_BCE | I2S_RCSR_FRDE | I2S_RCSR_FR; I2S0_TCSR |= I2S_TCSR_TE | I2S_TCSR_BCE; // TX clock enable, because sync'd to TX - dma.attachInterrupt(isr); + +#elif defined(__IMXRT1062__) + CORE_PIN8_CONFIG = 3; //1:RX_DATA0 + IOMUXC_SAI1_RX_DATA0_SELECT_INPUT = 2; + + dma.TCD->SADDR = (void *)((uint32_t)&I2S1_RDR0 + 0); + dma.TCD->SOFF = 0; + dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(2) | DMA_TCD_ATTR_DSIZE(2); + dma.TCD->NBYTES_MLNO = 4; + dma.TCD->SLAST = 0; + dma.TCD->DADDR = i2s_rx_buffer; + dma.TCD->DOFF = 4; + dma.TCD->CITER_ELINKNO = sizeof(i2s_rx_buffer) / 4; + dma.TCD->DLASTSGA = -sizeof(i2s_rx_buffer); + dma.TCD->BITER_ELINKNO = sizeof(i2s_rx_buffer) / 4; + dma.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR; + dma.triggerAtHardwareEvent(DMAMUX_SOURCE_SAI1_RX); + + // Reset then enable RX (matches PJRC slave begin pattern) + I2S1_RCSR = 0; + I2S1_RCSR = I2S_RCSR_RE | I2S_RCSR_BCE | I2S_RCSR_FRDE | I2S_RCSR_FR; #endif + + update_responsibility = update_setup(); + dma.enable(); + dma.attachInterrupt(isr); } From e8d0472acbeca1f6dfb25bb4ea4a9729a7df83a2 Mon Sep 17 00:00:00 2001 From: Broderick Thayer Date: Sun, 15 Feb 2026 15:23:52 -0500 Subject: [PATCH 2/2] Refactor AudioInputI2Sslave_F32::begin method Commented out unused block variables for clarity. --- input_i2s_f32.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/input_i2s_f32.cpp b/input_i2s_f32.cpp index 6bd15f6..c5a214c 100644 --- a/input_i2s_f32.cpp +++ b/input_i2s_f32.cpp @@ -273,8 +273,10 @@ void AudioInputI2Sslave_F32::begin(void) { dma.begin(true); // Allocate the DMA channel first - AudioOutputI2Sslave_F32::config_i2s(); + //block_left_1st = NULL; + //block_right_1st = NULL; + AudioOutputI2Sslave_F32::config_i2s(); #if defined(KINETISK) CORE_PIN13_CONFIG = PORT_PCR_MUX(4); // pin 13, PTC5, I2S0_RXD0