转自:http://blog.csdn.net/shengnan_wu/article/details/8298869

一、概述

 

       S3C2440通用异步接收和发送(UART)提供了三路的不同异步串行I/O端口,每一个端口可以被配置为中断模式或者DMA模式 。也就是说UART可以产生中断或者DMA请求来在CPU和UART之间传输数据。UART可以支持高达115.2K波特率使用系统时钟。如果一个外部设备为UART提供UEXTCLK,那么UART可以运行在更高的速度上。每个UART通道包含了两个64-byte的FIFO队列用于接收器和发送器。

 

       S3C2440A的UART包含了可编程的波特率,红外(IR)接收发送,1个或2个结束位的嵌入,5-bit,6-bit,7-bit或者8-bit的数据宽度和奇偶校验。

 

        每一个UART包含了一个波特率产生器(buad-rategenerator),发送器(transmitter),接收器(receiver)和一个控制单元(controlunit),如下图显示:

 

波特率产生器可以由PCLK,FCLK/n或者UEXTCLK(external input clock)来提供时钟。发送器和接收器包含了64-byte的FIFO队列和数据移位器(data shifters)。数据写入FIFO然后在开始传输之前被拷贝到发送数据移位器。然后数据被移位并一位一位地输出通过发送数据管脚(TxDn)。同理,接收数据被移位通过从接收器数据管脚(RxDn),然后把数据从接收数据移位器里拷贝到FIFO。

 

二、数据发送(data transmission)

 

        用于发送出去的数据帧是可编程的,由一个start位,5到8的数据位,一个可选的奇偶校验位和1到2的结束位组成。发送器也可以产生终止条件,通过迫使串行输出逻辑‘0’状态持续一个帧的传输时间。这个阻塞传输终止信号是在当前传输字被完成传输完成之后生效的。再终止信号传输之后,发送器连续不断地发送数据到Tx FIFO(在Non-FIFI模式下的Tx holding register(发送保持寄存器) )。

 

三、数据接收(data reception)

 

        就像发送数据一样,接收数据帧也是可编程的。由一个start位,5到8的数据位,一个可选的奇偶校验位和1到2个结束位。接收器可以检测接收泛滥错误(overrun error),奇偶校验错误(parity error),帧错误(frame error)和终止条件(break condition),通过设置错误标志。

 

·overrun error指示了数据已经覆写了还没有被读出去的数据。

·parity error指示了接收器检测到一个奇偶错误。

·frame error指示了接收数据没有一个有效的结束位。

·break condition指示了RxDn输入管脚被钳住在逻辑‘0’状态持续了多于一个帧传输时间。

·当接收器在3个word时间里(这个间隔根据字位长的设置)没有接收到数据并且在FIFO模式下的Rx FIFO不为空则产生接收超时条件。

 

四、自动流控制(Auto flow control(AFC))

 

        S3C2440A的UART0和UART1支持自动流控通过使用nRTS和nCTS信号。在这种情况下,可以链接外部的UARTs。假如用户需要连接一个UART到一个modem,则需要取消自动流控位通过配置UMCONn寄存器并且通过软件来控制nRTS的信号。

 

在AFC模式下,nRTS依赖于接收器的条件和nCTS信号控制发送器的运行。UART的发送器只当nCTS信号被激活(AFC模式下,nCTS信号意味另一个UART的FIFO已经准备好接收数据了)才发送数据到另一个UART的FIFO里。在UART接收数据的时候,当接收FIFO有大于32-byte的空闲空间时nRTS必须被激活 ,在接收FIFO的空闲空间小于32-byte(在AFC模式下,nRTS信号意味自己的接收FIFO准备好接收数据)时nRTS必须被取消激活。

        UART2不支持AFC功能。

 

五、没有使用自动流控的例子(需要软件控制nRTS和nCTS)

 

1)使用FIFO的接收操作

 

·选择接收模式(interrupt or DMA mode)

·检查UFSTATn寄存器里的RX FIFO计数值 。假如这个值小于32,用户需要设置UMCONn[0]为‘1’(激活nRTS),如果等于或者大于32,用户需要设置这个值为‘0’(使nRTS无效)

·一直重复步骤2

 

2)使用FIFO的发送操作

 

·选择发送模式(interrupt or DMA mode)

·检查UMSTATn[0]的值。如果该值为‘1’(nCTS被激活),用户可以写数据到Tx FIFO寄存器

 

六、RS-232C接口

 

        如果用户想要连接UART到modem接口,nRTS,nCTS,nDSR,nDTR,DCD和nRI信号需要被用到。在这种情况下,用户可以使用软件控制这些信号通过通用I/O端口来模拟时序 ,因为AFC不支持RS-232C接口。

 

七、interrupt/DMA

 

        每个UART有7个状态(Tx/Rx/Error)信号。所有这些都通过UART状态寄存器(UTRSTATn/UERSTATn).

 

       overrun error,parity error,frame error or break condition都属于接收错误状态。每一个error都引起接收错误中断请求,前提是在控制寄存器UCONn里的receive-error-status-interrupt-enable位被设置为‘1’。当receive-error-status-interrupt-request被检测到,这个信号会导致这个请求可以被识别到通过读取UERSTSTn的值。

 

        当接收器在FIFO模式下 ,把数据从接收数据移位器传递到接收FIFO寄存器并且接收数据数已经达到了Rx FIFO的触发水平时,Rx中断被产生,如果在控制寄存器(UCONn)的接收模式被选择为‘1’(interrupt request orpolling mode)。在Non-FIFO模式下,数据从接收移位器传递数据到接收保持寄存器将导致Rx 中断(under the interrupt request and polling mode)

 

        当发送器把数据从发送FIFO寄存器传递给发送数据移位器并且发送FIFO里的数据数达到Tx FIFO的触发水平,Tx中断被产生(如果在控制寄存器里的发送模式选择为interrupt request orpolling mode)。在Non-FIFO模式下,从发送保持寄存器发送数据到发送移位器将引起Tx中断(under the interrupt request and polling mode)

 

       如果控制寄存器里的接收模式和发送模式选择了DMAn请求模式,那么DMAn请求将替代上面的Rx or Tx中断。

 

八、UART error status FIFO

 

       UART除了有Rx FIFO寄存器外还拥有错误状态FIFO。错误状态FIFO指明了在FIFO寄存器里哪个数据,接收错误了。错误中断只在那个发生错误的数据准备被读出时被下达。通过读取带有错误标志的URXHn和UERSTATn来清除错误状态FIFO。

 

       如下图所示:


注:

·假设UART 的Rx FIFO接收到A,B,C,D和E字符序列并且帧错误发生在接收'B',奇偶校验错误出现在接收'D' 。

  ·事实上,UART接收错误并不会产生任何错误中断,因为产生错误的字符还没有被读出。错误中断只在错误字符被读出时才会产生。

 

 

 

九、波特率的产生

 

        每个UART的波特率产生器都提供了串行时钟给收发器。而用于波特率产生器的源时钟则是采用了S3C2440A的内部系统时钟或者UEXTCLK。也就是说,这个是可选的,通过配置UCONn的时钟选择。通过分离源时钟(PCLK,FCLK/n or UEXTCLK)(通过配置UARTbaud-rate divisor register(UBRDIVn))来产生波特率时钟。公式如下:

          UDRDIVn      =  (int)(UART clock /(buad rate * 16)) - 1

其中UART clock : PCLK,FCLK/n or UEXTCLK,并且UBRDIVn只能是1~(2^16-1),但是在使用比PCLK小的UEXTCLK时是可以设置为0的(bypass mode)。

 

比如,如果波特率选择为115200bps和UART时钟是40MHz,UBRDIVn计算如下:

          UBRDIVn      =      (int)(40000000 / (115200 *16)) - 1

              =   (int)(21.7)-1  =  22 - 1 = 21

 

十、baud-rate error tolerance

 

·UART帧错误必须小于1.87%(3/160)

·tUPCLK = (UBRDIVn + 1)* 16 * 1Frame/PCLK   tUPCLK : 真正的UART时钟

·tUEXACKT = 1 Frame / baud-rate               tUEXACT:理想UART时钟

·UART error = (tUPCLK - tUEXACT) / tUEXACT * 100%

 

 

 

注意:

 

·1Frame = start bit + data bit + parity bit + stop bit

·在特殊条件下,我们能够支持的UART波特率高达921.6K bps 。比如,当PCLK=60MHz,我们能够使用921K bps(只要满足UARTerror 小于 1.69%)

 

十一、回送模式(Loop Mode)

 

       S3C2440的UART提供一个测试模式叫做Loopback mode,来帮助隔离掉通信线路的错误。这个模式下在结构上使RXD和TXD相连。在个模式下,发送数据给接收器通过RXD。这个特性允许处理器来验证内部发送和接收数据的每个SIO通道部分。这个模式可以选择通过设置UART控制寄存器(UCONn)的loopback bit。

 

十二、红外线模式(Infrared(IR)mode)

 

       S3c2440aD UART模块支持红外线发送和接收 , 可以通过设置UART线路控制寄存器(ULCONn)的infrared-mode bit。下图演示了IR模式的执行。

 

注:

       IR发送模式下,发送脉冲来至波特率的3/16,正常的串行发送波特率(当发送数据位为0时);在IR接收模式下,接收器必须检测3/16的脉冲周期来识别处一个0值(参考以下帧时序图)

 

八、mini2440裸机程序之UART(1)简单介绍【转】的更多相关文章

  1. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】

    转自:http://blog.csdn.net/shengnan_wu/article/details/8309417 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.相关原理图 2.相关寄 ...

  2. mini2440 裸机程序下载到 sdram 不能运行。

    今天在 写了个简单的 led 的汇编程序,下载到 mini2440 的 nand flash 里面可以正常运行,但是下载到 sdram 里面不能运行. 后来发现有几个注意点, 要在 sdram 中运行 ...

  3. mini2440 裸机程序,下载到nand 里面,复制到 sdram 中不运行

    按照韦东山的视频中 sdram的裸机代码,写了一份,通过 minitools 下载到 0x30000000,然后烧录到 nand中,接过不能正常运行. 尝试过多种方法后,只有一种解决方法,就是不要用 ...

  4. mini2440裸机试炼之——Uart与pc端实现文件、字符传输

    1.  波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号. 2.  非FIFO模式,即数据传输不利用FIFO缓存,一个字节一个字节地传输. 3.  位能够用来推断发送缓存器中是否为空 ...

  5. 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍

    一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...

  6. ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序

    Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个S ...

  7. tiny4412 裸机程序 八、重定位到DRAM及LCD实验【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37407423 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   一 ...

  8. tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   一 ...

  9. 基于KEIL4开发ARM9(S3C2440)的裸机程序

    本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...

随机推荐

  1. 查询过的问题关于HTML的问题

    一.Bootstrap字体图标(Glyphicons) http://www.runoob.com/bootstrap/bootstrap-glyphicons.html 二.Jquery 实现 “下 ...

  2. Leetcode题库——36.有效的数独

    @author: ZZQ @software: PyCharm @file: leetcode36_isValidSudoku.py @time: 2018/11/19 19:27 要求:判断一个 9 ...

  3. 第二个Sprint冲刺第三天(燃尽图)

  4. jenkins配置过程中踩过的一些坑

    1,编译通过之后,想要将编译好的war包放到远程服务器上,并解压 unzipBus.sh的脚本如下: #!/bin/bash jar -xvf bus.war 编译后报错:jar:Command no ...

  5. 两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码

    最近面试经常被问到动态规划,所以自己做了一个总结,希望能进行深入的理解然后尝试能不能找到通用的解决手段.我觉得动态规划思想好理解,难的是怎么找出全部并且合理的子问题和出口. 我一般把问题分为两类,一类 ...

  6. ElasticSearch 2 (20) - 语言处理系列之如何开始

    ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...

  7. Apache修改了配置文件中的路径后,登录该地址网页出现问题 (其中介绍了selinux的域和安全上下文)

    默认的网站数据存放在: /var/www/html 首页名称: index.html Apache服务程序的主配置文件: /etc/httpd/conf/httpd.conf (若是将  119  行 ...

  8. php内置函数分析之str_pad()

    PHP_FUNCTION(str_pad) { /* Input arguments */ zend_string *input; /* Input string 输入字符串*/ zend_long ...

  9. C、C ++的内存模型

    http://blog.sina.com.cn/s/blog_af9acfc60101bbcy.html

  10. TLabel的FocusControl属性什麽意思

    但我们为Label设置了热键的时刻,我们按这个热键,就会移动核心倒FocusControl指定的控件上!例如,设置Label.Caption:='Test For FocusControl(& ...