diff --git a/input_i2s_f32.cpp b/input_i2s_f32.cpp index 7e2189f..c5a214c 100644 --- a/input_i2s_f32.cpp +++ b/input_i2s_f32.cpp @@ -293,12 +293,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); }