📄 main.c
字号:
//--------------head_file-----------------
#include <stdio.h>
#include "registers.h"
#include "initialize.h"
#include "signal_process.h"
//-----------macro defination-------------
#define N0 15 //码块的长度
#define L 11 //信息块的长度
#define m 4 //每信息符代表的位数
#define NUM_MCU 2000 //从单片机接受的数据的大小
//--------Global variable
int dIn,dOut,dRs;
unsigned int dataIn[NUM_MCU];
unsigned int out4bit[2*NUM_MCU];
unsigned int int_i=0;
unsigned int count_rs=0;
//---------Function prototypes-----------------
void RSbianma();
void mfsk(int input[]);
interrupt void timer0();
//-------------main routine---------------------
void main()
{
unsigned int i=0,j=0;
unsigned int data_temp;
asm(" bset intm "); //禁止所有可屏蔽中断
*CLKMD=0x6193; //时钟信号3倍频
*SYSR=0x0002; //clkout4分频
*IVPD=0x0002; //中断向量指针
*IVPH=0x0002;
init_emif(); //初始化外部存储器
init_mcBSP1(); // 初始化bsp1
open_mcBSP1(); //打开bsp1口
for(;;) //通过bsp1口从MCU读数
{
while(((*SPCR1_1>>1) & 0x01)==0);
dataIn[i]=(*DRR1_1);
i++;
if(i>=NUM_MCU)
break;
}
close_mcBSP1(); //关闭bsp1口
for(i=0;i<NUM_MCU;i++) //把从mcu读的数转化为多进制
{
// dataIn[i]=0x55;
data_temp=dataIn[i];
dataIn[i]=dataIn[i]>>4;
out4bit[j]=(dataIn[i] & 0x08)+(dataIn[i] & 0x04)+(dataIn[i] & 0x02)+(dataIn[i] & 0x01);
j++;
data_temp=data_temp & 0x0F;
out4bit[j]=(data_temp & 0x08)+(data_temp & 0x04) +(data_temp & 0x02)+(data_temp & 0x01);
j++;
}
*ST1_55 &=0xDFFF; //XF选通DA片选
init_mcBSP2(); //初始化bsp2
open_mcBSP2(); //打开bsp2口
asm(" bclr intm "); // 打开可屏蔽中断
asm(" mov #10000b,mmap(@IER0) "); //在中断使能寄存器中使能相应的中断
init_timer0();
while(1)
{
if(count_rs<NUM_MCU)
{RSbianma(); //进行一次编码
open_timer0(); //打开定时器
mfsk(RSout); //调制输出12次
close_timer0();} //关闭定时器
else
{
(*DXR1_2)=400;
}
}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//@@@@@*************编码函数
void RSbianma()
{
int j,data[L]={0};
initial(m);
GenGx(m,N0,L);
for(j=0;j<2;j++)
data[j]=out4bit[2*count_rs+j];
Encode(data,g,m,N0,L);
count_rs++;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void mfsk(int input[]) //调制函数
{
unsigned int i,j;
int data2[12]={0};
for(i=0;i<12;i++)
{
//************send synchronous signal
if(i%12==0)
{
for(j=0;j<4;j++)
{
for(;;)
{(*DXR1_2)=si_inter[int_i];
if(int_i>881)
{int_i=0;break;}}
}
for(;;)
{(*DXR1_2)=si_syn_start[int_i];
if(int_i>219)
{int_i=0;break;} }
//@@@同步信号后接着发间隔信号
for(;;)
{(*DXR1_2)=si_inter[int_i];
if(int_i>881)
{int_i=0;break;}}
}
//@@@**********send signal of 00 01 10 11
data2[i]=input[2*i+1]+input[2*i]*2;
if(data2[i]==0)
{ for(;;)
{(*DXR1_2)=s00[int_i];
if(int_i>440)
{int_i=0;break;}}
}
else if(data2[i]==1)
{for(;;)
{(*DXR1_2)=s01[int_i];
if(int_i>440)
{int_i=0;break;}}
}
else if(data2[i]==2)
{for(;;)
{(*DXR1_2)=s10[int_i];
if(int_i>440)
{int_i=0;break;}}
}
else if(data2[i]==3)
{for(;;)
{(*DXR1_2)=s11[int_i];
if(int_i>440)
{int_i=0;break;}}
}
//@@@@@@@@************send signal of interval
for(;;)
{(*DXR1_2)=si_inter[int_i];
if(int_i>881)
{int_i=0;break;}}
}
return;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//@@@@******中断服务子函数
interrupt void timer0()
{
int_i++;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -