⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r232_uart.c

📁 2410bios 实现简单功能 裸板传输 跑马灯 定时器
💻 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 + -