八、mini2440裸机程序之UART(1)简单介绍【转】
转自: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)简单介绍【转】的更多相关文章
- 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】
转自:http://blog.csdn.net/shengnan_wu/article/details/8309417 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.相关原理图 2.相关寄 ...
- mini2440 裸机程序下载到 sdram 不能运行。
今天在 写了个简单的 led 的汇编程序,下载到 mini2440 的 nand flash 里面可以正常运行,但是下载到 sdram 里面不能运行. 后来发现有几个注意点, 要在 sdram 中运行 ...
- mini2440 裸机程序,下载到nand 里面,复制到 sdram 中不运行
按照韦东山的视频中 sdram的裸机代码,写了一份,通过 minitools 下载到 0x30000000,然后烧录到 nand中,接过不能正常运行. 尝试过多种方法后,只有一种解决方法,就是不要用 ...
- mini2440裸机试炼之——Uart与pc端实现文件、字符传输
1. 波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号. 2. 非FIFO模式,即数据传输不利用FIFO缓存,一个字节一个字节地传输. 3. 位能够用来推断发送缓存器中是否为空 ...
- 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...
- ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序
Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个S ...
- tiny4412 裸机程序 八、重定位到DRAM及LCD实验【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37407423 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一 ...
- tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一 ...
- 基于KEIL4开发ARM9(S3C2440)的裸机程序
本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...
随机推荐
- WM_CONCAT和LISTAGG 语法例子
select to_char(replace(wm_concat(name), ',', '')) from codeitems where setid = 'A018' and ' like cod ...
- Python的文件读写
目录 读文件 操作文件 读取内容 面试题的例子 写文件 操作模式 指针操作 字符编码 读文件 操作文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): 文件使用完毕后必 ...
- Servlet 生命周期、工作原理-是单实例多线程
Servelet是单实例多线程的 参考:servlet单实例多线程模式 一.Servlet生命周期 大致分为4部:Servlet类加载-->实例化-->服务-->销毁 1.Web C ...
- Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
1. 理解 kivy 坐标系统 上一节中,咪博士带大家实现了画板程序的基础框架,以及一个基本的自定义窗口部件(widget).在上一节的末尾,咪博士留了一道关于 kivy 坐标系统的思考题给大家.通过 ...
- 利用git从github上拉取项目
(一)准备工作 (1)安装git,下载地址是git官网:https://git-scm.com/点击打开链接 (二)拉取项目的步骤 1.新建文件夹,最好为英文名project 2.进入文件夹,空白处右 ...
- BZOJ5465 APIO2018选圆圈(KD-Tree+堆)
考虑乱搞,用矩形框圆放KD-Tree上,如果当前删除的圆和矩形有交就递归下去删.为防止被卡,将坐标系旋转一定角度即可.注意eps稍微设大一点,最好开上long double. #include< ...
- Play with Floor and Ceil UVA - 10673(拓展欧几里得)
因为我现在还不会用这个...emm...蒟蒻...只看了 从来没用过....所以切一道水题...练一下... 人家讲的很好 https://blog.csdn.net/u012860428/arti ...
- 【刷题】BZOJ 2734 [HNOI2012]集合选数
Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中 ...
- 学习Spring Boot:(十九)Shiro 中使用缓存
前言 在 shiro 中每次去拦截请求进行权限认证的时候,都会去数据库查询该用户的所有权限信息, 这个时候就是有一个问题了,因为用户的权限信息在短时间内是不可变的,每次查询出来的数据其实都是重复数据, ...
- 【BZOJ2054】疯狂的馒头(并查集,线段树)
[BZOJ2054]疯狂的馒头(并查集,线段树) 题面 BZOJ 然而权限题,随便找个离线题库看看题吧. 题解 线段树就是个暴力,如果数据可以构造就能卡掉,然而不能构造,要不然复杂度瓶颈成为了读入了. ...