📄 r232_uart.c
字号:
#include "2410addr.h"
#include "2410lib.h"
#define uchar unsigned char
static struct ctrl_wd {
uchar ctrl;
uchar fra_type;
uchar data_n;
uchar source_addr;
uchar dest_addr;
uchar test_data;
}cw;
static struct infro_wd {
uchar id;
uchar infro[4];
uchar test;
unsigned int result[2];
}iw;
//--------------------------- sendmsg 接收函数 -----------------------
void sendmsg(void)
{
static int i =0;
uchar send[24]= //同步字,控制字,2个信息字
{
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
};
rULCON1 =3; //设置每桢长度
rUCON1 =4; //设置非中断模式
DisableIrq(BIT_UART1);
rUBRDIV1 =0x19; //设置波特率
printf("sendmsg be called *-*-*-*-*-*--\n");
while(1)
{
while(rUTRSTAT1 & 2 == 0);
rUTXH1 =send[i];
printf("send msg %x\n",send[i]);
i++;
if(i>=24)
i=0;
if(getkey()==32)
{
while(1)
{
if(getkey()==32)
break;
}
}
}
}
//--------------------------- receive_uart 接收函数 -----------------------
void receive_uart(void)
{
uchar *p =(uchar*)&cw;
uchar syn_wd[6]={0xD7,0x09,0xD7,0x09,0xD7,0x09};
int infro_id[8][2]={ {2000,2000},{1000,333},{1000,333},{1000,333}, {1000,333},{410,410},{2000,2000},{}};
//由于linux不支持浮点运算,因此给所有数*10,以后再处理它
rULCON1 =0x33; //设置每桢长度,奇偶校验位
rUCON1 =1; //设置非中断模式
rUBRDIV1 =0x19; //设置波特率
rUFCON1 =0xf7; //fifo 模式
while(1)
{
int i=0,j=0;
uchar data=0;
for(i=0;i<6;i++) //同步字
{
while( (rUFSTAT1 & 0x100) == 0 );
data =rURXH1;
printf("%x \n",data);
if( data !=syn_wd[i] )
{
i =0;
}
}
for(i=0;i<6;i++) //控制字
{
while( (rUFSTAT1 & 0x100) == 0 );
p[i] =rURXH1;
printf("contrl word:%x\n",p[i]);
}
p =(uchar*)&iw;
for(i=0;i<cw.data_n;i++) //信息字n个
{
unsigned long data;
printf("\n");
for(j=0;j<6;j++)
{
while( (rUFSTAT1 & 0x100) == 0 );
p[j]=rURXH1;
printf("infro word:%d\n",p[j]);
}
iw.result[0] =((iw.infro[1] <<8) | iw.infro[0]) * infro_id[i][0] / ( 819*10 + i ) ;
printf("\niw.infro[0],[1]: %d %d\n",iw.infro[0],iw.infro[1]);//--------
printf("(iw.infro[1] <<8) | iw.infro[0]:%d\n",(iw.infro[1] <<8) | iw.infro[0]);//--------
printf("infro_id[i][0]:%d\n",infro_id[i][0]);//--------
printf("((iw.infro[1] <<8) | iw.infro[0]) * infro_id[i][0]:%d\n",((iw.infro[1] <<8) | iw.infro[0]) * infro_id[i][0]);//--------
printf("iw.result[0]:%d\n",iw.result[0]);//--------
data = iw.infro[3] <<8;
iw.result[1] =((iw.infro[3] <<8) | iw.infro[2]) * infro_id[i][1] / ( 819*10 + i ) ;
printf("\niw.infro[2],[3]: %d %d\n",iw.infro[2],iw.infro[3]);//--------
printf("(iw.infro[3] <<8) | iw.infro[2]:%d\n",(iw.infro[3] <<8) | iw.infro[2]);//--------
printf("infro_id[i][0]:%d\n",infro_id[i][0]);//--------
printf("((iw.infro[3] <<8) | iw.infro[2]) * infro_id[i][2]:%d\n",((iw.infro[3] <<8) | iw.infro[2]) * infro_id[i][2]);//--------
printf("iw.result[2]:%d\n",iw.result[2]);//--------
printf("last result: %d, %d\n",iw.result[0],iw.result[1]);
// copy_to_user(buf,iw.result,sizeof(int[2]) );
}
Delay(3000);
if(getkey()==27)
while(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -