📄 ddcmain.c.txt
字号:
#include<reg5402.h>
#include<math.h>
interrupt void int0handle();
interrupt void int1handle();
//count,count1中断标志,在主循环中判断这两个标志,若为 1,表示有中断,就开始处理
unsigned char count=0;
unsigned char count1=0;
unsigned int fcnt=0;
ioport unsigned port0;//AD端口
ioport unsigned port1;//DA端口
int rev33buf[256];
int branchcosbuf[256];
int branchsinbuf[256];
main()
{
int fsinval,fcosval;
int i
int freq;
int revcnt;
int frctval;
PMST=0x00a0;//把中断向量表放在 0x0080开始的地址
SWWSR=0;
//freq=1,接收的载波频率为10khz,freq=2,接收的载波频率为20khz,以此类推
freq=10;//载波频率为 100khz
IFR=IFR|0x003;
IMR=IMR|0x0003;
asm("openallint: rsbx INTM");
while(1)
{
if(count=1)//通知主程序,FIFO1半满,DSP应该取256个数据
{
count=0;
//数据读取,数据转化
for(revcnt=O;revcnt<256;revcnt++)
{
frctval=port0-0x200;//输入的值转化为Q9定点小数
rev33buf[revcnt]=frctval<<6;//转化为Q15定点小数,我们的数据精度就只有10位,所以不关心后面的6位数据
}
//混频
for(i=0;i<256;i++)
{
fsinval=sin(2*3.1415926*freq*fcnt/2000)*32768;
fcosval=cos(2*3.1415926*freq*fcnt/2000)*32768;
branchsinbuf[i]=_smpy(fsinval,rev33buf[i]);
branchcosbutTi]=_smpy(fcosval,rev33buf[i]);
fcnt++; //fcnt加到65535后,再加1就会变成 0
}
//CIC滤波
//半带滤波
//FIR滤波
}
}
}
interrupt void int0handle()
{
count=1;
}
interrupt void int1handle()
{
count1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -