×
单片机 > 单片机程序设计 > 详情

mini2440硬件篇之UART

发布时间:2020-06-16 发布时间:
|

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。UART以全双工方式传输数据,最简单的连线只有2根,TxD用于发送,RxD用于接收,Gnd地。UART使用标准的TTL电平(0~3.3V或0~5V),表示高低电平,为了增加抗干扰能力,增加传输长度,通常将TTL电平转换为RS-232电平。3~12V表示0,-3~-12表示1。

平常数据引脚处于空闲1状态,发送数据时,TxD变低电平,表示一个起始信号。然后后面可以跟5、6、7、8位的数据,LSB低位优先。如果使用校验,数据发完后再发送一个校验位,最后发送1、2位停止位。

 

  1.  芯片手册

  2.  mini2440电路图


 

3. S3C2440寄存器

对于s3c2440来说,它有3个UART,配置过程如下。

对应的GPIO引脚设置成UART引脚。

ULCON LINE寄存器,配置校验、数据位、停止位。

UCON 控制寄存器,可以配置时钟源,中断或查询方式,不使用DMA。

UFCON FOFO寄存器,不使用FIFO。

UMCON MODEM寄存器,不使用流控。

UTRSTAT 状态寄存器,只读,读取UART状态。

UERSTAT 错误寄存器,也是只读。

UFSTAT FIFO的状态寄存器,也是只读。

UMSTAT MODEM状态寄存器,只读。

UTXH 发送缓冲区。

URXH 接收缓冲区。

UBRDIV 波特率设置寄存器

uart.h


  1. /******************************************************************* 

  2.  * Copyright (C),2011-2012, XXX. 

  3.  * FileName: uart.h  

  4.  * Author:HuangYinqing 

  5.  * Version:1.0 

  6.  * Date::2012-04-22 

  7.  * Description:串口0驱动. 

  8.  * Function List: 

  9.  * History: 

  10.  ******************************************************************/  

  11. #ifndef __UART_H__  

  12. #define __UART_H__  

  13.   

  14. #define PCLK    50000000    //50M  

  15. #define UART_CLK PCLK  

  16. #define UART_BAUD_RATE 115200  

  17. #define UART_BRD ((int)(UART_CLK/(UART_BAUD_RATE*16))-1)  

  18.   

  19. #define TXD0READY (1<<2)  

  20. #define RXD0READY (1)  

  21.   

  22. /*函数声明*/  

  23. void Uart0Init(void);  

  24. unsigned char Uart0GetChar(void);  

  25. void Uart0SendString(char *pucStr) ;  

  26. void Uart0SendData(char *pucStr, int ulCount) ;  

  27.   

  28. #endif  


uart.c


  1. /******************************************************************* 

  2.  * Copyright (C),2011-2012, XXX. 

  3.  * FileName: uart.c  

  4.  * Author:HuangYinqing 

  5.  * Version:1.0 

  6.  * Date::2012-04-22 

  7.  * Description:串口0驱动. 

  8.  * Function List: 

  9.  * History: 

  10.  ******************************************************************/  

  11. #include "common.h"  

  12. #include "uart.h"  

  13.   

  14.   

  15. /******************************************************************** 

  16. 函数功能:发送一个字符。 

  17. 入口参数: 

  18.     ucChar:待发送的字符 

  19. 返    回:无。 

  20. 备    注:无。 

  21. ********************************************************************/  

  22. void Uart0PutChar(unsigned char ucChar)  

  23. {  

  24.     while( !( rUTRSTAT0 & TXD0READY ) );//发送一个字节  

  25.     rUTXH0 = ucChar;  

  26. }  

  27.   

  28. /******************************************************************** 

  29. 函数功能:接收一个字符。 

  30. 入口参数:无。 

  31. 返    回:接收的字符。 

  32. 备    注:无。 

  33. ********************************************************************/  

  34. unsigned char Uart0GetChar(void)  

  35. {  

  36.     while( !( rUTRSTAT0 & RXD0READY ) ); //接收一个字节  

  37.     return rURXH0;  

  38. }  

  39.   

  40. /******************************************************************** 

  41. 函数功能:发送字符串。 

  42. 入口参数: 

  43.     pucStr:待发送的字符串指针。 

  44. 返    回:无。 

  45. 备    注:无。 

  46. ********************************************************************/  

  47. void Uart0SendString(char *pucStr)   

  48. {   

  49.     while( (*pucStr) != '\0' )   

  50.     {   

  51.       Uart0PutChar(*pucStr++);  

  52.     }   

  53. }  

  54.   

  55. /******************************************************************** 

  56. 函数功能:发送指定长度数据。 

  57. 入口参数: 

  58.     pucStr:待发送的字符串指针。 

  59.     ulCount:待发送的字节数。 

  60. 返    回:无。 

  61. 备    注:无。 

  62. ********************************************************************/  

  63. void Uart0SendData(char *pucStr, int ulCount)   

  64. {   

  65.     while(ulCount--)   

  66.     {   

  67.       Uart0PutChar(*pucStr++);  

  68.     }  

  69. }  

  70.   

  71. /******************************************************************** 

  72. 函数功能:串口0中断函数。 

  73. 入口参数:无。 

  74. 返    回:无。 

  75. 备    注:无。 

  76. ********************************************************************/  

  77. static void __irq Uart0Handler(void)   

  78. {   

  79.     char ch;  

  80.       

  81.     ClearSubPending(BIT_SUB_RXD0);  

  82.     ClearPending(BIT_UART0);   

  83.       

  84.     while(rUTRSTAT0 & 1)    //==接收缓冲区有数据  

  85.     {  

  86.         ch = rURXH0;  

  87.         rUTXH0 = ch;  

  88.     }  

  89. }   

  90.   

  91. /******************************************************************** 

  92. 函数功能:串口0初始化函数。 

  93. 入口参数:无。 

  94. 返    回:无。 

  95. 备    注:无。 

  96. ********************************************************************/  

  97. void Uart0Init(void)  

  98. {  

  99.     rGPHCON &=  ~(0xf<<4);   

  100.     rGPHCON |= 0xa<<4;    //==GPH2,GPH3用作TXD0,RXD0  

  101.     rGPHUP |= 3<<2;       //==GPH2,GPH3内部上拉  

  102.       

  103.     rULCON0 = (0x03<<0);  //==数据格式:数据位为8位,1位停止,无奇偶校验,不使用红外  

  104.     rUCON0=(1<<0)|(1<<2); //==允许查询或中断方式,不使用DMA通道  

  105.     rUFCON0=0x00;         //==不使用FIFO  

  106.     rUMCON0=0x00;         //==不使用流控  

  107.     rUBRDIV0=UART_BRD;    //==设置波特率为115200kb/s  

  108.       

  109.     pISR_UART0=(unsigned int)Uart0Handler;  //==串口收中断函数  

  110.     rINTMOD &= ~BIT_UART0;                  //==普通中断模式  

  111.     rINTMSK &= ~BIT_UART0;                  //==打开中断屏蔽  

  112.     rINTSUBMSK &= ~BIT_SUB_RXD0;            //==打开接收子中断屏蔽  

  113. }  

  114. //  



关键字:mini2440  硬件篇  UART

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机电子密码锁仿真 可修改密码