UART收发数据的讨论

2009-06-22 23:27 阅读 2,590 次 评论 0 条

UART(Universal Asynchronous Receiver )是通用异步收发接口,在很多芯片中都有应用。一般UART的收与发共用一个数据寄存器(8bit),通过相应的状态寄存器来判断UART的工作情况。

接收可以有两种方式:一种是查询,另一种是中断。通常使用中断方式。

接收查询方式是通过CPU不停读取UART的状态寄存器,当有数据到来时,读取数据,此方法占用太多的CPU时间,很少使用,在CPU只做数据转发时可以考虑使用。

接收中断方式是通过数据到达后产生中断,在中断处理函数中读取数据。每一个数据(8bit)到来产生一次中断。如果在每个数据中断都调用数据处理函数,当波特率较高,数据帧较长,数据处理时间较长时,可能会出现丢数据的情况。如果在一次中断进入后,while(数据寄存器满){读取数据},但波特率不高时,可能出现将一帧数据分多次中断读取,给后来的数据处理带来不便。

Windows中是将串口(UART)当做一个文件,直接对文件进行读写操作。一般是以一个线程去查询读取数据,基本可以保证整帧数据一次全部读出。也可以一次一个字符(8bit)来读。实际上是Windows的底层驱动将UART(串口)数据接收之后放到一个FIFO缓冲区中。显然在单片机或DSP等专用芯片中也应该用一个FIFO来缓存数据,然后在程序中读FIFO来处理数据。

发送也可以分为两种方式:一种是查询,另一种是中断。通常使用查询方式。

发送查询方式是通过CPU查询UART发送寄存器的状态,当为空的时候,发送数据;当不为空时,等待(适合用while循环判断)。

发送中断方式是将需要发送的数据存入一个缓冲区(FIFO),当发送寄存器为空,进入中断时,将数据发送。需要注意时,一旦开启发送中断,当没有数据发送时,就会一直跳入发送中断处理函数,所以在数据发送完之后一定要关闭发送中断使能。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:UART收发数据的讨论 | 起点博客
分类:应用笔记 标签:, ,

发表评论


表情