📄 main3.c
字号:
/**********************************************************************
********* 主控程序 **********
**********************************************************************/
#include "VoiceProcess.h"
#include "math.h"
Bool int_flag;
Uint16 RecPoint=0; //录音指针
Uint16 LedF=0;
Uint16 PitchPoint=0;
Uint16 FilterPoint=1;
Uint16 LmsTwo=0;
Uint16 FlagCounter=0;
Uint16 FlagDog=0;
DATA VoiceTwo[2];
int rev_data1[2];
int MikeOut[0x2010];
DATA MikeOutTwo[2];
int PitchDataIn[800]; //将串口1数据保存用
int PitchDataVer[800];
int PitchDataIn2[512];
extern Bool PitchFlag;
extern Uint16 dB;
//extern int VoiceCrossNew;
extern int VoiceCross[];
extern int VoiceCrossVar;
extern void SoundOut(void);
extern void Dog(void);
extern void FftLongInit(void);
interrupt void mcbsprev(); //中断接收函数
/**********************************************************************/
// 主程序
/**********************************************************************/
main()
{
IRQ_globalDisable(); //全局中断禁止
FftLongInit();
bianliang_chushihua(); // 变量清零
sys_init(); //系统初始化函数
/****************************/
int_flag=FALSE;
checkflag=0;
dB=0x8301;
/****************************/
SET_AD73311(); //设置两个AD73311芯片,采样率,增益等
IRQ_globalEnable(); //全局中断使能
LedYellow(LedOff);
while(1) //循环,等待中断,进行数据处理
{
if(int_flag==TRUE) SoundOut(); // 放音
if(checkflag) // 采集完一帧数据后 checkflag=1
{
ComputerPitch(); //计算基音
LedF++;
FlagDog++;
if(FlagDog>=FlagDogNumber)
{
FlagDog=0;
FlagCounter=0;
}
if(PitchFlag==TRUE ) // 基音控制
{
if(FlagCounter==0)
{
FlagDog=0;
}
FlagCounter++;
if(FlagCounter>=PITCHCOUNTER)
{
LedRed(LedOn);
FlagCounter=0;
FlagDog=0;
}
LedF=0;
}
else if((PitchFlag==FALSE)&&(LedF>20))
{
LedRed(LedOff);
LedF=0;
}
checkflag=0;
}//endif
}
}
/////////////////////////////////////////////////////////////////////////
// 语音数据接收中断服务子函数
interrupt void mcbsprev()
{
IRQ_globalDisable(); //全局中断禁止
VoiceTwo[LmsTwo]=MCBSP_read16(hMcbsp2)-1300; //A口作输入
PitchDataIn2[PitchPoint]=MCBSP_read16(hMcbsp1)-1900; //B口作输入
//**************** 带通滤波 ******************************************
if(LmsTwo==1) //如果是偶数个数据
{
MikeOutTwo[0]=VoiceTwo[0];
MikeOutTwo[1]=VoiceTwo[1];
MikeOut[RecPoint-1]=VoiceTwo[0];
MikeOut[RecPoint]=VoiceTwo[1]; // 1秒钟录音
PitchDataIn[PitchPoint-1]=VoiceTwo[0];
PitchDataIn[PitchPoint]=VoiceTwo[1];
}
//奇偶处理
LmsTwo++;
if(LmsTwo>1)
LmsTwo=0;
//基音
PitchPoint++;
if(PitchPoint>255)
{
PitchPoint=0;
checkflag=1;
}
/***********************************************************/
//录音指针处理
RecPoint++;
if(RecPoint>0x1fff)
{
RecPoint=0;
LmsTwo=0;
}
int_flag=TRUE; //中断标志
IRQ_clear(rcvEventId2); //清除中断标志
}
/************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -