现在的位置: 首页 > 综合 > 正文

UART小记

2018年03月20日 ⁄ 综合 ⁄ 共 1261字 ⁄ 字号 评论关闭


1、UART原理
    UART: Universal Asynchronous Receiver/Transmitter (通用异步收发寄存器),用于传输串行数据。
    发送数据时,CPU将并行数据写入UART,UART按照一定格式在TxD线上串行发出;
    接收数据时,UART检测到RxD线上的信号,将串行收集放到缓冲区中,CPU即可读取UART获得数据。

    UART最精简的连线形式只有3根线,TxD——》发送,RxD——》接收,GND——》参考电平。
    数据传输单位:帧(包含:开始位、数据位、校验位、停止位)
    发送数据前,互相通信的UART直接约定——数据传输速率(1/波特率 )、数据传输格式(…)。

 2、波特率发生器
     ————为发送器和接收器提供串行时钟。
    !!!!!!未完全理解,待填充

3、关于发送和接收操作的寄存器
     ULCONn    :设置传输格式
     UCONn      :用于选择UART时钟源、设置UART中断方式
     UFCONn    :设置是否使用FIFO,触发阀值(发送/接收 产生中断的数据个数……)
     UFSTATn   :用于判断FIFO是否已满、其中的数据个数。

     UTRSTATn :用于表明数据是否已经发送完毕、是否已经接收到数据
     UTXHn        :CPU将数据写入这个寄存器、UART会将其保存到缓冲区中,并自动发送出去
     URXHn        :当UART接收到数据时,CPU读取这个寄存器,可获得数据。
 
4、 code
//======UART发送一个字符,不用FIFO,直接用UART发送

void Uart_SendByte(char data)

{

 if(data=='\n')

 {

  while(!(rUTRSTAT0 & 0x2));

   //取出rUTRSTAT0(UART0发送/接收寄存器)寄存器中的第2位
   //含义为Transmitbuffer是否为空,为1时表示空。
   //在发送缓冲器为空时,再发送
   WrUTXH0('\r');  //将数据写入到UART0发送缓冲器中

 }

 while(!(rUTRSTAT0 &0x2));   //Wait until THR is empty.
 WrUTXH0(data);

}

5、rUTRSTAT0:

串口状态寄存器:UTRSTAT0  其位功能如下

         位[2]:无数据发送时,自动设为1。当我们要使用串口发送数据时,先读此位以判断是否有数据正在占用发送口。 

         位[1]:发送FIFO是否为空,本次未用此位 

         位[0]:接收缓冲区是否有数据,若有,此位设为1。需要用到这位,需要不断查询此位一判断是否有数据已经被接收。 

while(!(rUTRSTAT0 & 0x4)); //判断位[2],等待,直到UART的发送器为空,就是发送完毕.

while(!(rUTRSTAT0 & 0x1)); //判断位[0],接收缓冲器接收到有效数据

【上篇】
【下篇】

抱歉!评论已关闭.