高级会员

- 积分
- 921
- 金钱
- 921
- 注册时间
- 2016-4-20
- 在线时间
- 169 小时
|
5金钱
我之前在407的基础上做了一个基于IIS和USB的录音和放音的工程,现在因为要扩展到1拖4个数字mic也就是,原来的IIS满足不了要求。所以要用SAI总线。我手头现在有一个429的discovery开发板,用阿波罗的429的历程进行测试。429的声卡和录音历程和407很相似,大部分不要做修改,但还是有几个地方我吃不准。 先说一下基本情况,用到了一条SAI总线。接了4个数字mic,每个mic都是16K 16bit的数据。
开始弄修改之前有3个地方不是太明白,请论坛有经验的朋友指点一下。
第一个是SAI的基本设置,由于是1拖4,所以在历程基础上做了修改
SAI1A_Handler.FrameInit.FrameLength=64 //
SAI1A_Handler.FrameInit.ActiveFrameLength=1; //这里的帧同步信息我看iis情况下是16,查了数据手册“PCM/DSP”模式设置为1
SAI1A_Handler.SlotInit.SlotNumber=4; //对应4个mic的
第二是采样率,我设置成16K之后 SAIA_SampleRate_Set(REC_SAMPLERATE);
帧时钟的脉冲频率(中间第二条红色的线)不是16K,算了一下只有5.11K。改成48K之后才变成附件的样子,单也只有15.64K。
这里我觉得在多个slot情况下,频率设置是否有特殊要求。
第三个就是DMA的问题,之前407开发板是2个IIS通道,现在一帧有4个通道的数据,这里是不是要修改成
SAIA_RX_DMA_Init(sairecbuf1,sairecbuf2,SAI_RX_DMA_BUF_SIZE/2,1);SAI_RX_DMA_BUF_SIZE应该是128,一次传输一帧128个字节。 就存放发送音频数据的playbuf来说,playBuf[0]、playBuf[1]、playBuf[2]、playBuf[3]应该就是存放的一帧中4个mic传过来的数据。
问题比较多,请有经验的朋友指点一下。
|
最佳答案
查看完整内容[请看2#楼]
原子的晶振是25MHz,你的板子是8MHz,25/8=3.125,正好符合你的时钟频率差异。所以你的程序要改一下HSE。
|