利用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传过来的数据。
        问题比较多,请有经验的朋友指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
czdspeed
1楼-- · 2019-07-24 07:03
江成88 发表于 2017-1-3 20:21
你好,我想问一下你的DMA怎么弄的? 数据手册中DMA中没有SAI数据流啊。在SAI章节没细说DMA数据流的问题。我 ...

SAIB_RX_DMA_Init  你搜素一下,这个和407的IIS总线从DMA上传输还是一样的,基本不需要变的。
ryuki001
2楼-- · 2019-07-24 07:29
 精彩回答 2  元偷偷看……
czdspeed
3楼-- · 2019-07-24 07:59
 精彩回答 2  元偷偷看……
ryuki001
4楼-- · 2019-07-24 13:00
謝謝解答
那請問要改成雙聲道的麥克風跟雙聲道的揚聲器要怎麼做?你之前提供的例程中,麥克風只有一個聲道
czdspeed
5楼-- · 2019-07-24 17:24
 精彩回答 2  元偷偷看……

一周热门 更多>