完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
使用307的I2S3连接CS43L22播放SD卡中的WAV,能正常3秒左右,后面就是杂音了。用调试器跟踪SD读取数据是正确的,现在找不到原因,
static void i2s3_init(void) { GPIO_InitTypeDef GPIO_InitStructure={0}; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3 | GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOC, &GPIO_InitStructure); } void i2s_open(uint16_t *audio_buffer, uint16_t buffer_size, uint32_t sample_rate, uint32_t frame_format) { I2S_InitTypeDef I2S_InitStructure = { 0 }; DMA_InitTypeDef DMA_InitStructure = { 0 }; NVIC_InitTypeDef NVIC_InitStructure={0}; RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA2, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); DMA_DeInit(DMA2_Channel2); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &SPI3->DATAR; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) audio_buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = buffer_size; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA2_Channel2, &DMA_InitStructure); DMA_ITConfig(DMA2_Channel2, DMA_IT_TC | DMA_IT_HT, ENABLE); DMA_ClearFlag(DMA2_FLAG_TC2 | DMA2_FLAG_HT2); I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx; I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips; I2S_InitStructure.I2S_DataFormat = frame_format; I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable; I2S_InitStructure.I2S_AudioFreq = sample_rate; I2S_InitStructure.I2S_CPOL = I2S_CPOL_High; I2S_Init(SPI3, &I2S_InitStructure); /* SPI DMA enable */ SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE); I2S_Cmd(SPI3, ENABLE); DMA_Cmd(DMA2_Channel2, ENABLE); } void DMA2_Channel2_IRQHandler(void) { if (DMA_GetITStatus(DMA2_FLAG_TC2)) { DMA_ClearFlag(DMA2_FLAG_TC2); free_buffer = 1; read_flag = 1; } if (DMA_GetITStatus(DMA2_FLAG_HT2)) { DMA_ClearFlag(DMA2_FLAG_HT2); free_buffer = 0; read_flag = 1; } } |
|
相关推荐
2个回答
|
|
|
您好,若程序中用了中断,麻烦看一下程序中有没有加中断声明,若不加中断声明,只会进一次中断。
|
|
|
|
|
|
您好,
中断声明如下 void DMA2_Channel2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); |
|
|
|
|
只有小组成员才能发言,加入小组>>
383 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
887 浏览 0 评论
1483 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3435 浏览 2 评论
2843 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1833浏览 1评论
1483浏览 1评论
383浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
887浏览 0评论
485浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 16:14 , Processed in 0.730126 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1339