正在调试一款iPhone底座音箱,主控用的中颖SH68F552。方案是:iPhone Lightning -> USB -> MCU -> I2S -> 音频Codec(ES9018)。现在遇到的问题是,播放高码率音乐(比如48kHz/24bit)时,偶尔会有爆音,感觉是数据没跟上。
查了手册,SH68F552有PDMA(外设DMA),理论上可以把USB接收的数据直接搬运到I2S的FIFO里,不用CPU干预。但我配置了半天,DMA传输总是断断续续。是不是SRAM不够用?比如USB端点缓冲区占了一部分,I2S的FIFO占了一部分,剩下的SRAM做双缓冲(Double Buffer)够不够?
还有,I2S的时钟(MCLK)是怎么生成的?我是用MCU的定时器分频出来的,但发现频率有点漂移,导致播放速度快了一倍或者慢了一倍。是不是应该用外部晶振(比如24MHz)给I2S模块单独供时钟?中颖的MCU有没有专门的音频时钟发生器?
另外,USB接收中断的优先级怎么设?如果USB中断优先级太低,DMA搬运不及时,I2S就会欠载(Underrun);如果太高,又会影响主循环里的按键扫描和LCD显示。有没有大佬调过这个平衡点?比如USB中断优先级设为1,DMA中断设为0?
|
|