📄 interrupts.c
字号:
#include "talkthrough.h"
int InData;
int Ready2FFT=0;
int Data2FFTNum=0;
int OutputMum=0;
int CH_sel;//通道标志
/****************中断设置程序*********************/
void InitInterrupts(void)
{
sysreg_write(sysreg_IMASK, 0x0001);//初始化过程屏蔽所有中断(除COM定时器中断)
enable_interrupts();//使能全局中断
sysreg_write(sysreg_IFC, 0x00FE);//清除无关中断标志
sysreg_write(sysreg_ICNTL, 0x0002);//禁止中断嵌套
interrupt(SIGSPORT0XMIT, Sport0TxIsr);//关联SPORT0发送中断信号和对应的中断服务程序
}
/*****************串口发送中断程序*****************/
void Sport0TxIsr(int sig)
{
if(!iCodecInitFinished)//读取发送完成标志,判断发送是否完成
{
iTxIsrCounter++;//如果没有完成中断次数自加1
if(iTxIsrCounter == SIZE_OF_CODEC_REGS) iCodecInitFinished = 1;
//如果最后的控制字已经发完,置初始化完成标志
else sport_write(SPORT_0, iCodecRegs[iTxIsrCounter]);
//如果初始化未完成,将当前的控制字发出
}
}
/****************串口接收中断程序*****************/
void Sport0RxIsr(int sig)
{
InData=sport_read(SPORT_0); //从串口0接收一个数据
SampleData();//进行数据采集
OutPutMag();//将频谱分析结果送出
}
/*************完成对信号的采样***********************/
void SampleData(void)
{ if(CH_sel)
{
if (Ready2FFT==0)//如果处于采集状态,进行数据采集
{
InReal[Data2FFTNum]=InData; //从串口0接收一个通道数据放入数据缓冲
Data2FFTNum++;//改变数据块指针
if(Data2FFTNum==FFT_TAPS) {Data2FFTNum=0;Ready2FFT=1;}
}
CH_sel=0;
}
else CH_sel=1;
}
/****************频谱输出程序*****************/
void OutPutMag(void)
{
sport_write(SPORT_0,OutBuf[OutputMum]);//输出一个频谱数值
OutputMum++;//改变输出的指针
if (OutputMum==FFT_TAPS/2) OutputMum=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -