📄 process_data.c
字号:
#include "Talkthrough.h"
//--------------------------------------------------------------------------//
// Function: Process_Data() //
// //
// Description: This function is called from inside the SPORT0 ISR every //
// time a complete audio frame has been received. The new //
// input samples can be found in the variables iChannel0LeftIn,//
// iChannel0RightIn, iChannel1LeftIn and iChannel1RightIn //
// respectively. The processed data should be stored in //
// iChannel0LeftOut, iChannel0RightOut, iChannel1LeftOut, //
// iChannel1RightOut, iChannel2LeftOut and iChannel2RightOut //
// respectively. //
//--------------------------------------------------------------------------//
//定义临时存储变量,记录左右声道的数据输入
static fract16 temp0[2*VEC_SIZE];
static fract16 temp1[2*VEC_SIZE];
void Process_Data(void)
{
int nValue;
int i;
extern int BTCLeftVolume;
extern int BTCRightVolume;
extern fract16 tBuffer0[2*VEC_SIZE];
extern fract16 tBuffer1[2*VEC_SIZE];
fir_init(state, coefs, delay, NUM_TAPS, 1); // initialize filter state
if (dmaFlag == 0) //乒乓操作
{
firStereo(iRxBuffer1, iTxBuffer0, VEC_SIZE, &state); //FIR滤波
for (i=0;i<VEC_SIZE;i++)
{
temp1[2*i] = iTxBuffer1[2*i];
temp1[2*i+1] = iTxBuffer1[2*i+1];
iTxBuffer1[2*i] = (temp1[2*i]-temp1[2*i+1])<<2; //左右相减,将输出写回iTxBuffer1
iTxBuffer1[2*i+1] = (temp1[2*i+1]-temp1[2*i])<<2;
//完成第三种设计方案
iTxBuffer0[2*i] = iTxBuffer0[2*i] + iTxBuffer1[2*i]; //将左右相减的结果与滤波结果相加,结果作为输出
iTxBuffer0[2*i+1] = iTxBuffer0[2*i+1] + iTxBuffer1[2*i+1];
iChannel0LeftOut = iTxBuffer0[2*i];
nValue = (iChannel0LeftOut);
nValue = (nValue >> BTCLeftVolume); //volume
btc_write_value(0, (unsigned int*)&nValue, sizeof(nValue));
iChannel0RightOut =iTxBuffer0[2*i+1];
nValue = (iChannel0RightOut);
nValue = (nValue >> BTCRightVolume);//volume
btc_write_value(1, (unsigned int*)&nValue, sizeof(nValue));
}
dmaFlag = 1;
}
else //乒乓操作
{
firStereo(iRxBuffer0, iTxBuffer1, VEC_SIZE, &state); // FIR滤波
for (i=0;i<VEC_SIZE;i++)
{
temp0[2*i] = iTxBuffer0[2*i];
temp0[2*i+1] = iTxBuffer0[2*i+1];
iTxBuffer0[2*i] = (temp0[2*i]-temp0[2*i+1])<<2; //左右相减,将输出写回iTxBuffer0
iTxBuffer0[2*i+1] = (temp0[2*i+1]-temp0[2*i])<<2;
//完成第三种设计方案
iTxBuffer1[2*i] = iTxBuffer1[2*i] + iTxBuffer0[2*i]; //将左右相减的结果与滤波结果相加,结果作为输出
iTxBuffer1[2*i+1] = iTxBuffer1[2*i+1] + iTxBuffer0[2*i+1];
iChannel0LeftOut =iTxBuffer1[2*i];
nValue = (iChannel0LeftOut);
nValue = (nValue >> BTCLeftVolume); //volume
btc_write_value(0, (unsigned int*)&nValue, sizeof(nValue));
iChannel0RightOut =iTxBuffer1[2*i+1];
nValue = (iChannel0RightOut);
nValue = (nValue >> BTCRightVolume);//volume
btc_write_value(1, (unsigned int*)&nValue, sizeof(nValue));
}
dmaFlag = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -