TI中文支持网
TI专业的中文技术问题搜集分享网站

OMAPL137采用轮询方式接收输出音频信号,加上一些算法就不能运行了

Hi,您好,

        我用OMAPL137采用轮询方式接收输出音频信号,不加算法的话可以顺利接扬声器播放数据(自己写一个5s的信号循环播出的,采样率48000Hz),但是在程序中加入一些算法就不能拨出了?不知道是为什么啊?部分程序如下

//该部分用来产生左通道白噪声信号并得到麦克风信号
outdata = GaussRan[GaussPtr];                      // 全局变量GaussPtr = 0;
floutdata = outdata * vref;                                  // 将参考信号转换为浮点型
GaussPtr = (GaussPtr+1)% GaussLen;          // 5s数据播放完成后循环
output_sample((outdata << 15)| 0x00000000); // 左通道扬声器输出高斯白噪声信号 LeftSample = input_sample();                            // 左通道麦克风输入采集到的信号
dn = (Int16) (LeftSample >> 15);                       // 左通道得到麦克风信号
fldn = dn * vref;                                                   // 将麦克风信号转换为浮点型

// 右通道的输入输出信号不作处理
output_sample( 0x00000000);                           // 右通道扬声器输出为0
RightSample = input_sample();                         // 右通道麦克风信号
for (i=59; i>0; i–) {
x[i] = x[i-1]; } x[0] = floutdata;

        以上部分不加下边那个for循环还是可以运行的,但是加了for循环就不行了。之前也遇到一种情况,fldn = dn * vref,这个语句之前写成了fldn = dn * vref/Q,不加除法运算可以运行,加了也不能运行了,感觉很奇怪。

输入输出函数如下:

void output_sample(Int32 out_data) { AIC31_data.uint = out_data; while ( ! ( MCASP1_SRCTL5 & 0x10 ) ); MCASP1_XBUF5_32BIT = AIC31_data.uint; } Int32 input_sample(void) { while ( ! ( MCASP1_SRCTL0 & 0x20 ) ); AIC31_data.uint = MCASP1_RBUF0_32BIT; return (AIC31_data.uint); }

Tony Tang:

应该是实时性不够,卡住了。计算一下是不是一次处理的时间大于一个采样点的间隔了。

Yu Wang22:

回复 Tony Tang:

Tony Tang

应该是实际性不够,卡住了。计算一下是不是一次处理的时间大于一个采样点的间隔了。

Yu Wang22:

回复 Tony Tang:

非常感谢您的回复!我也觉得EDMA方式可能更好,不过OMAPL137给的例程里没有EDMA配置的,想问一下有没有这样的例程可以下载?多谢!

Tony Tang:

回复 Yu Wang22:

L138的starterware里有McASP EDMA的例程可以参考,不过对于如果不熟悉EDMA的,这个代码有点复杂。

我个人做了McBSP EDMA的例子,比较简单。

http://www.deyisupport.com/question_answer/dsp_arm/omap_l1x/f/54/t/87941.aspx

Yu Wang22:

回复 Tony Tang:

谢谢!

chunyu Lee:

回复 Tony Tang:

您好,我初学DSP,想问一下EDMA是不是可以在McASP接口来数据时直接把数据搬运到片外存储器,如DDR2或者在EMIF上的SDRAM?

只要先对EMDA寄存器进行初始配置,在McASP数据到来和搬运的整个过程中,都不需要cpu参与吗?

Tony Tang:

回复 chunyu Lee:

chunyu Lee只要先对EMDA寄存器进行初始配置,在McASP数据到来和搬运的整个过程中,都不需要cpu参与吗?

是的。

参考McBSP例程:http://www.deyisupport.com/question_answer/dsp_arm/omap_l1x/f/54/t/87941.aspx

L138. C6748的starterware里有McASP的EDMA例程,都差不多,可以互相借鉴。

赞(0)
未经允许不得转载:TI中文支持网 » OMAPL137采用轮询方式接收输出音频信号,加上一些算法就不能运行了
分享到: 更多 (0)