利用SAI总线DMA传输多路音频信号的

2019-07-20 11:01发布

        我之前在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);
        帧时钟的脉冲频率(中间第二条红 {MOD}的线)不是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传过来的数据。
        问题比较多,请有经验的朋友指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。