/* 文件名称:UART.c /* 实现功能:基本的UART发送与接收 /* 作者:无jianqi /* 版本:1.0 #include"2440addr.h" //包含2440相关寄存器的设置 #include"def.h" //四个LED对应GPB5.6.7.8。 #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #define BAUD 115200 //波特率 #define Bit(x) (1《x) //将某位置位 #define Output(x) (1《2*x) //将对应IO置为输出 #define LED_On(x) rGPBDAT=~Bit(x) //点亮相应LED * 名称:Clk_Set * 功能:关于系统时钟的初始化 * 入口参数:无 * 出口参数:无 void Clk_Set(void) { int count; rUPLLCON=(56《12)|(2《4)|2; //UCLK为48MHZ rMPLLCON=(92《12)|(1《4)|1; //FCLK为400MHZ rCLKDIVN=(0《3)|(2《1)|1;//HCLK位100MHZ,PCLK为50MHZ rCAMDIVN=(0《9); //PCLK=HCLK/4 } * 名称:IO_init * 功能:关于LED的端口初始化 * 入口参数:无 * 出口参数:无 void IO_init(void) { rGPBCON=Output(LED1)|Output(LED2)|Output(LED3)|Output(LED4); //LED的IO口置为输出 rGPBDAT=0xffff; //LED全部熄灭 } * 名称:UART0_init * 功能:UART0相关的初始化工作 * 入口参数:无 * 出口参数:无 void UART0_init(void) { rGPHCON=0xa0; //IO口使能UART0功能 rGPHUP=0xff; //上拉禁止 rULCON0=0x03; // 8位数据,无校验,1位停止位 rUCON0=0x05; //pclk时钟,中断请求方式为Tx-电平,Rx-脉冲 rUBRDIV0=26; //设置波特率 rUFCON0=0x00; //不使用FIFO rUMCON0=0x00; //不使用流控 } * 名称:Send_Byte * 功能:发送一个字符 * 入口参数:等待发送的字符 * 出口参数:无 void Send_Byte(char data) { while(!(rUTRSTAT0&0x2)); //等待发送缓冲器空 rUTXH0=data; } * 名称:Send_String * 功能:发送字符串 * 入口参数:等待发送的字符串 * 出口参数:无 void Send_String(char* pt) { while(*pt) { Send_Byte(*pt++); } } * 名称:Uart_Getch * 功能:接收一个字符 * 入口参数:无 * 出口参数:接收的字符 char Uart_Getch(void) { while(!(rUTRSTAT0&0x1)); //等待接收缓冲器有数据 return (rURXH0); //读出数据 } * 名称:Main * 功能:测试UART发送和接收函数 * 入口参数:无 * 出口参数:无 void Main(void) { char temp; IO_init(); UART0_init(); Clk_Set(); Send_String("HelloWorld"); //发送字符串 while(1) { temp=Uart_Getch(); //接收到字符 if(temp==0x01) { LED_On(LED1); } } }