个人中心 - GD32 MCU 开发者社区

ko1057900143
ko1057900143
2025年5月22日
31 评论
活跃 时间:2025-08-03
7 次浏览
0
0
31
星闪动力
时间:2025-08-03
中断处理完毕后,记得关闭中断,防止它再次触发。
请教使用DMA+I2S配合国产CODEC,TX信号杂乱问题
ko1057900143
时间:2025-05-22
void DMA0_Channel0_IRQHandler(void) { uint8_t index; // CHN5 TX CHN0 RX if (dma_interrupt_flag_get(DMA0, DMA_CH0, DMA_INT_FLAG_FTF)) { dma_interrupt_flag_clear(DMA0, DMA_CH0, DMA_INT_FLAG_FTF); dma_channel_disable(DMA0, DMA_CH0); dma_channel_disable(DMA0, DMA_CH5); // 2. 复制数据到 Modem TX 缓冲区 memcpy((uint16_t*)i2s_mtc_tx_cache, (uint16_t*)i2s_ctm_rx_cache, BUFFER_SIZE); printf("\r\nDMA0_Channel0_IRQHandler222\r\n"); //for(index = 0; index < 64; index ++) // printf("0x%x, 0x%x, ", (i2s_mtc_tx_cache[index] >> 8), i2s_mtc_tx_cache[index] & 0x00ff); // 3. 重新启动 I2S1 TX DMA 和 I2S2 RX DMA //dma_memory_address_config(DMA0, DMA_CH0, DMA_MEMORY_0, (uint32_t)i2s_ctm_rx_cache); dma_memory_address_config(DMA0, DMA_CH5, DMA_MEMORY_0, (uint32_t)i2s_mtc_tx_cache); dma_transfer_number_config(DMA0, DMA_CH5, BUFFER_SIZE); dma_channel_enable(DMA0, DMA_CH5); dma_channel_enable(DMA0, DMA_CH0); } }
请教使用DMA+I2S配合国产CODEC,TX信号杂乱问题
ko1057900143
时间:2025-05-22
void i2s2_control(ControlStatus state) { if(state == ENABLE) { i2s_disable(I2S2_ADD); i2s_disable(SPI2); // DMA通道使能CHN5 TX dma_channel_enable(DMA0, DMA_CH0); dma_channel_enable(DMA0, DMA_CH5); /* enable SPI DMA */ spi_dma_enable(I2S2_ADD, SPI_DMA_RECEIVE); spi_dma_enable(SPI2, SPI_DMA_TRANSMIT); // 使能 i2s_enable(I2S2_ADD); i2s_enable(SPI2); // CHN0 RX nvic_irq_enable(DMA0_Channel0_IRQn, 0, 0); nvic_irq_enable(DMA0_Channel5_IRQn, 0, 0); } else if(state == DISABLE) { // 使能 i2s_disable(I2S2_ADD); i2s_disable(SPI2); // DMA通道使能 dma_channel_disable(DMA0, DMA_CH0); dma_channel_disable(DMA0, DMA_CH5); spi_dma_disable(I2S2_ADD, SPI_DMA_RECEIVE); spi_dma_disable(SPI2, SPI_DMA_TRANSMIT); nvic_irq_disable(DMA0_Channel0_IRQn); } }
请教使用DMA+I2S配合国产CODEC,TX信号杂乱问题
ko1057900143
时间:2025-05-22
void init_i2s2(void) { rcu_periph_clock_enable(RCU_SPI2); // SPI2_MOSI/I2S2_SD tx gpio_af_set(GPIOC, GPIO_AF_5, GPIO_PIN_1); // SPI2_SCK/I2S2_CK gpio_af_set(GPIOB, GPIO_AF_6, GPIO_PIN_3); // I2S2_ADD_SD 全双工脚 rx gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_4); // SPI2_NSS/I2S2_WS gpio_af_set(GPIOA, GPIO_AF_6, GPIO_PIN_4); gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1); gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1); gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3|GPIO_PIN_4); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3|GPIO_PIN_4); gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4); spi_i2s_deinit(SPI2); i2s_init(SPI2, I2S_MODE_SLAVETX, I2S_STD_PHILLIPS, I2S_CKPL_LOW); // 16位,8K采样率,不需要MCLK时钟 i2s_psc_config(SPI2, I2S_AUDIOSAMPLE_8K, I2S_FRAMEFORMAT_DT16B_CH16B, I2S_MCKOUT_DISABLE); // 这里的库函数有问题,RX和TX反转了 i2s_full_duplex_mode_config(I2S2_ADD, I2S_MODE_SLAVETX, I2S_STD_PHILLIPS, I2S_CKPL_LOW, I2S_FRAMEFORMAT_DT16B_CH16B); }

暂无内容

相关内容会显示在这里,期待您的分享与发现。

确定删除吗?
删除后无法恢复,请确认后操作!
编辑