利用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条回答
skyqiu
1楼-- · 2019-07-22 09:07
czdspeed 发表于 2016-7-25 15:37
407只能支持IIS,不支持SAI,我发给你的就是407的代码。

多谢了!
zuoyi
2楼-- · 2019-07-22 13:14
 精彩回答 2  元偷偷看……
czdspeed
3楼-- · 2019-07-22 17:56
zuoyi 发表于 2016-7-26 10:02
不知道楼主使用的什么逻辑分析仪?!

ZEROPLUS  一个台湾公司的好像也不是太贵。你网上找找。
zuoyi
4楼-- · 2019-07-22 23:42
czdspeed 发表于 2016-7-27 09:44
ZEROPLUS  一个台湾公司的好像也不是太贵。你网上找找。

果然孕龙,这个逻辑分析仪不错!
czdspeed
5楼-- · 2019-07-23 05:22
 精彩回答 2  元偷偷看……
czdspeed
6楼-- · 2019-07-23 06:18
skyqiu 发表于 2016-7-24 18:34
楼主,有usb模拟声卡,能录音和放音的例子吗?我的录音后,扬声器放的声音很失真,研究了好久没进展

对了,我这里也有个问题就是用原子的历程放音,不论是音频播放还是声卡的例子。只要把音量加到很大就会失真。我后来推算了一下好像音量在大于16384之上就一定会,就是有效不失真的数据大概只有15位。我用捷布朗的扬声器就没有这个问题。这个看上去是软件造成的问题。不知道你的时候发现没有,就时把电脑的音量和播放软件的音量放到最大。

一周热门 更多>