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);
}