Chinaunix首页 | 论坛 | 博客
  • 博客访问: 888944
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: 嵌入式

2015-03-14 14:10:47

原文地址:S3C2440中UART的原理和应用 作者:frankzfz

   通用异步收发器简称UART(Universal Asynchronous Receiver Transmitter),也就是我们平常所说的串口。它用来传输串行数据,在嵌入式开发中占有很重要的地位。发送数据是,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出,接收数据时,UART检测别一根电线上的信号,将串行收集到的数据放在缓冲区中,CPU即可以读取UART获得这些数据,两个串口最简单的连接是有3根线,一个TxD发送数据,一个是RxD接收数据,Gnd用于给双方提供参考的电平。
    TxD,RxD数据线“位”为最小的单位传输数据。帧由具有完整意义的,不可分割的若干位组成,它包含数据位,开始位,校验位,和停止位。UART一帧中可以有5,6,7或8位的数据位。
    S3C2440中的UART有64字节的发送FIFO,和64字节的接收FIFO。发送数据时,CPU先将数据写入发送FIFO中,然后UART会自动将FIFO中的数据复制到”发送移位器“中,发送移位器将数据一位一位地发送到TxD数据线上,根据一开始设定的格式的不同,会在一个帧上加上相应的停止位,校验位。接收数据时,”接收移位器“将RxD数据线上的数据一位一位接收进来,然后复制到接收FIFO中,CPU即可以从中读取数据。
   UART的发送数据和接收数据一般情况下会有中断方式和查询方式,下面主要介绍几个寄存器:
UCONn寄存器,可以设置UART工作在那一种方式上。
UFCONn寄存器用于设置是否使用FIFO,设置各FIFO的触发阈值,即发送FIFO中有多少个数据时产生中断,接收FIFO中有多少个数据时产生中断,
   在非FIFO模式下,FIFO的深度为1,可以通过UTRSTAT寄存器中的相应位来判断是中断或DMA请求是否发生,
   在FIFO模式下,应该检查寄存器UFSTAT中的TxFIFO Count位和TxFIFO Full 位,如果达到在UFCON中设置的FIFO的触发等级,就会发生中断。
   UTXH寄存器,CPU将数据写入这个寄存器,UART地将它保存到缓冲区中,并自动发送出去。在实际应该中,一般情况下,在发送数据时,一般采用DMA的方式,或者是设置成发送FIFO为空,而接收数据时,可以设置FIFO为比较合适的大小,S3C2440支持接收FIFO的触发等级为1byte 8byte 16byte,32byte.
   而且在接收数据时还有一个超时接收中断。可以用于接收那些由于没到达触发点而无法触发接收中断的字符当FIFO中的数据量没有达到接收FIFO的触发等级且在三个字的时间内没有接收到任何数据时,产生中断,这是一种接收中断,该时间根据字长位设置。



阅读(166) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~