UART裸机驱动设计

最后更新于:2022-04-01 16:11:42

UART裸机驱动设计主要在于配置各寄存器的值; 开发板型号: TX2440; UART 使能: 使能UART0; 传 输 参 数: 8位数据位,1位停止位,无奇偶校验,波特率115200; 时 钟 参 数: UART使用系统的 PCLK. ~~~ /******************************************************************* *版权所有(C)2015,ZJU * *文件名称:uart.c *内容摘要:关于UART的配置 *其它说明:开发板型号:TX2440 * UART0:RXD0 -- GPH3 , TXD0 -- GPH2 *当前版本:V1.0 *作 者:Frank *完成日期:2015.12.14 * *******************************************************************/ #define GPHCON (*(volatile unsigned long *)0x56000070) //Configures the pins of port H #define ULCON0 (*(volatile unsigned long *)0x50000000) //UART channel 0 line control register #define UCON0 (*(volatile unsigned long *)0x50000004) //UART channel 0 control register #define UTRSTAT0 (*(volatile unsigned long *)0x50000010) //UART channel 0 Tx/Rx status register #define UTXH0 (*(volatile unsigned long *)0x50000020) //UART channel 0 transmit buffer register #define URXH0 (*(volatile unsigned long *)0x50000024) //UART channel 0 receive buffer register #define UBRDIV0 (*(volatile unsigned long *)0x50000028) //Baud rate divisior register 0 #define PCLK 50000000 //PCLK=50M (start.S中设置了 FCLK:HCLK:PCLK = 1:4:8, FCLK=400M) #define BAUD 115200 /******************************************************************* *函数名称:Uart_Init() *功能描述:UART初始化函数 *其他说明: *创建日期:2015.12.14 *******************************************************************/ void Uart_Init(void) { /*配置引脚功能*/ GPHCON &= (~(0xf << 4)); GPHCON |= (0xa << 4); //GPH2设为TXD0,GPH3设为RXD0 /*设置数据格式*/ ULCON0 = 0b11; //8位数据位,1位停止位,无奇偶校验 /*设置工作模式*/ UCON0 = 0b0101; //发送和接收均采用轮询方式 /*设置波特率*/ UBRDIV0 = (int)(PCLK/(BAUD*16) - 1); //波特率设置为115200 } /******************************************************************* *函数名称:Puts() *功能描述:字符发送函数 *输入形参:ch *返 回 值:无 *其他说明:ch为需要发送的字符 *创建日期:2015.12.14 *******************************************************************/ void Puts(unsigned char ch) { while (!(UTRSTAT0 & (1 << 2))); UTXH0 = ch; } /******************************************************************* *函数名称:Gets() *功能描述:字符接收函数 *输入形参:无 *返 回 值:ch *其他说明:ch为接收到的字符 *创建日期:2015.12.14 *******************************************************************/ unsigned char Gets(void) { char ch; while (!(UTRSTAT0 & (1 << 0))); ch = URXH0; return ch; } ~~~
';