📄 syntest.c
字号:
uartsend("\n\r");
}
uartsend("\tECHOCNT=");
ltoa(timelist[timelist_i],data,10);
uartsend(data);
}
nowtest++;
uartsend("\n\r#测试4:勤务帧超时中断测试");
uartsend("\n\r 测试方法:提前3个数据帧将P1取反。\n\r");
uartsend("\n\r '>'表示多种中断发生。\n\r");
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void qwerror(B32 temp3)
{
if(nowstate==193) //下一帧发送勤务帧
{
rIOPDATA=rIOPDATA^0xf2;
}
if(nowstate==0) //勤务帧发送完毕后的下一帧
{
timelist[timelist_i]=temp3;
timelist_i++;
}
if(timelist_i==30)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
for(timelist_i=0;timelist_i<30;timelist_i++)
{
if(timelist_i%10==0)
{
uartsend("\n\r");
}
uartsend("\tINTSTATE=");
ltoa(timelist[timelist_i],data,2);
uartsend(data);
}
nowtest++;
uartsend("\n\r#测试5:ECHO超时测试");
uartsend("\n\r 测试方法:更改本机地址。\n\r");
uartsend("\n\r '&'表示ECHO超时中断发生。\n\r");
SYN_ADDR_ECHOADDR=0x1;
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void echoerror(B32 temp3)
{
B32 *point;
if(nowstate==3) //勤务帧发送完毕后的下一帧
{
timelist_i++;
}
if(timelist_i==30)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
nowtest++;
uartsend("\n\r#测试6:p帧错误中断测试");
uartsend("\n\r 测试方法:置p3帧为错误数据。\n\r");
uartsend("\n\r '='表示接收到p帧校验错误中断发生。\n\r");
point=&SYN_ADDR_TP3; //P3
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=0x03287;
ltoa(0x03287,data,16);
uartsend(" 0x");
uartsend(data);
uartsend("\n\r");
SYN_ADDR_ECHOADDR=0x0;
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void perror(B32 temp3)
{
B32 *point;
if(nowstate==2) //勤务帧发送完毕后的下一帧
{
//timelist[timelist_i]=temp3;
timelist_i++;
}
if(timelist_i==30)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
nowtest++;
uartsend("\n\r#测试7:接收到两个p帧中断测试");
uartsend("\n\r 测试方法:置p2帧为正确数据。将p3帧数据清零\n\r");
uartsend("\n\r '+'表示接收到两个或两个以上的p帧中断发生。\n\r");
point=&SYN_ADDR_TP2; //P2
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=0x13287;
ltoa(0x13287,data,16);
uartsend(" 0x");
uartsend(data);
point=&SYN_ADDR_TP3; //P3
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
uartsend("\n\r");
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void pint(B32 temp3)
{
B32 *point;
if(nowstate==2) //勤务帧发送完毕后的下一帧
{
timelist_i++;
}
if(timelist_i==30)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
nowtest++;
uartsend("\n\r#测试8:在未同步的情况下发送报告帧测试");
uartsend("\n\r 注意:此处无法测试,请调用另一个程序测试,使用示波器观察\n\r");
uartsend("\n\r#测试9:状态字寄存器测试");
uartsend("\n\r");
point=&SYN_ADDR_TP2; //P2
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
uartsend("\n\r");
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void statetest(B32 temp3)
{
B32 *point;
B32 i;
timelist[timelist_i]=nowstate;
timelist_i++;
timelist[timelist_i]=temp3;
timelist_i++;
timelist[timelist_i]=cmp;
timelist_i++;
timelist[timelist_i]=SYN_ADDR_TXDSTATE&0x3ffffff;
timelist_i++;
timelist[timelist_i]=SYN_ADDR_RXDSTATE&0x3ffffff;
timelist_i++;
timelist[timelist_i]=SYN_ADDR_PNUM&0x3;
timelist_i++;
if(timelist_i>1960)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
for(timelist_i=0;timelist_i<1960;timelist_i++)
{
//if(timelist_i%6==0)
//{
uartsend("\n\r");
uartsend("#");
ltoa(timelist_i/6,data,10);
uartsend(data);
//}
uartsend("\tnowstate=");
ltoa(timelist[timelist_i],data,10);
uartsend(data);
timelist_i++;
uartsend("\tINTSTATE=");
ltoa(timelist[timelist_i],data,2);
uartsend(data);
timelist_i++;
uartsend("\tcmp=");
ltoa(timelist[timelist_i],data,16);
uartsend(data);
timelist_i++;
uartsend("\tTXDSTATE=");
ltoa(timelist[timelist_i],data,2);
uartsend(data);
timelist_i++;
uartsend("\tRXDSTATE=");
ltoa(timelist[timelist_i],data,2);
uartsend(data);
timelist_i++;
uartsend("\tPNUM=");
ltoa(timelist[timelist_i],data,10);
uartsend(data);
}
nowtest++;
uartsend("\n\r#测试10:数据传输正确性测试");
uartsend("\n\r 测试方法:检测接收到的数据。\n\r");
uartsend("\n\r下面列出此时接收存储区的内容!");
uartsend("\n\r#注意:1.接收数据真最后的16位数据不同是因为,每次读数据会读取8个bit,最后会读取连续的几个1,也就是信道空闲的状态");
uartsend("\n\r 2.由于勤务帧的63bit序列影响,导致接收到的勤务帧内容看似和发送的不同,实际相同,是左移的结果。");
uartsend("\n\r已经接收数据如下:");
point=&SYN_ADDR_RDATA;
for(timelist_i=0;timelist_i<31;timelist_i++)
{
ltoa((int)point,data,16);
uartsend("\n\r@ 0x");
uartsend(data);
uartsend("\t");
for(i=0;i<8;i++)
{
uartsend("0x");
ltoa(*point,data,16);
uartsend(data);
uartsend(" ");
point++;
}
}
uartsend("\n\r通过观测接收数据来确定接收的正确性。");
timelist_i=0;
//SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void datatest(void)
{
B32 *point;
B32 i,temp;
temp=SYN_ADDR_RXDSTATE&0x3ffffff;
//uartsend("^");
if(temp!=0)
{
timelist[timelist_i]=nowstate;
timelist_i++;
timelist[timelist_i]=temp;
timelist_i++;
//temp=(B32)(log10((double)temp)/log10(2.0));//太耗时,不用
/*if(temp<20)
{
point=&SYN_ADDR_RDATA;
point=point+8*temp;
}
if(temp==20)
{
point=&SYN_ADDR_RQW;
}
if(temp==25)
{
point=&SYN_ADDR_RBG;
}
*/
point=&SYN_ADDR_RDATA;
switch(temp)
{
case 0x1:
{
break;
}
case 0x2:
{
point=point+8*1;
break;
}
case 0x4:
{
point=point+8*2;
break;
}
case 0x8:
{
point=point+8*3;
break;
}
case 0x10:
{
point=point+8*4;
break;
}
case 0x20:
{
point=point+8*5;
break;
}
case 0x40:
{
point=point+8*6;
break;
}
case 0x80:
{
point=point+8*7;
break;
}
case 0x100:
{
point=point+8*8;
break;
}
case 0x200:
{
point=point+8*9;
break;
}
case 0x400:
{
point=point+8*10;
break;
}
case 0x800:
{
point=point+8*11;
break;
}
case 0x1000:
{
point=point+8*12;
break;
}
case 0x2000:
{
point=point+8*13;
break;
}
case 0x4000:
{
point=point+8*14;
break;
}
case 0x8000:
{
point=point+8*15;
break;
}
case 0x10000:
{
point=point+8*16;
break;
}
case 0x20000:
{
point=point+8*17;
break;
}
case 0x40000:
{
point=point+8*18;
break;
}
case 0x80000:
{
point=point+8*19;
break;
}
case 0x100000:
{
point=&SYN_ADDR_RQW;
break;
}
case 0x2000000:
{
point=&SYN_ADDR_RBG;
break;
}
default:
{
//uartsend("~");
}
}
timelist[timelist_i]=(B32)point;
timelist_i++;
for(i=0;i<8;i++)
{
timelist[timelist_i]=*point;
timelist_i++;
point++;
}
}
if(timelist_i>5874)
{
SYN_ADDR_TXDCNTCMP=0x0; //暂停定时中断,输出数据;
for(timelist_i=0;timelist_i<5874;)
{
if(timelist_i%11==0)
{
uartsend("\n\r#nowstate= ");
uartsend("0x");
ltoa(timelist[timelist_i],data,16);
uartsend(data);
timelist_i++;
uartsend("\t#RXDSTATE= ");
uartsend("0x");
ltoa(timelist[timelist_i],data,16);
uartsend(data);
timelist_i++;
uartsend("\t#RECEIVE FROM ");
uartsend("0x");
ltoa(timelist[timelist_i],data,16);
uartsend(data);
uartsend("\t ");
timelist_i++;
}
for(i=0;i<8;i++)
{
uartsend("0x");
ltoa(timelist[timelist_i],data,16);
uartsend(data);
uartsend(" ");
timelist_i++;
}
}
nowtest++;
uartsend("\n\r 测试结束!可以观测波形。");
timelist_i=0;
SYN_ADDR_TXDSTATEWRB=0x100000;
nowstate=0;
nowtosend=16;
timelist_i=0;
cmp=0x0;
SYN_ADDR_TXDCNTCMP=0x34000000;
}
}
void last(void)
{
//times=times+1;
}
/*
uartsend("\n\r现在将数据全部填充为0");
uartsend("\n\r以下为写入存储器的内容:");
point=&SYN_ADDR_TDATA; //DATA
for(i=0;i<20;i++)
{
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=M32;
ltoa(M32,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
}
point=&SYN_ADDR_TQW; //QW
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=M63L;
ltoa(M63L,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=M63H;
ltoa(M63H,data,16);
uartsend(" 0x");
uartsend(data);
for(i=0;i<7;i++)
{
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
}
point=&SYN_ADDR_TBG; //BG
uartsend("\n\r@ 0x");
ltoa((int)point,data,16);
uartsend(data);
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
point++;
*point=0x0;
ltoa(0x0,data,16);
uartsend(" 0x");
uartsend(data);
uartsend("\n\r");
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -