八、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值(参考以下帧时序图)

 










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5031783.html,如需转载请自行联系原作者

相关文章
|
存储 JavaScript 前端开发
VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了
Visual Studio Code 是一个轻量级功能强大的源代码编辑器,支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言和运行时(如 C++、C#、Java、Python、PHP、Go、.NET)提供了丰富的扩展生态系统。为了不影响读者的沉浸式阅读学习,如需使用目录请在左侧使用即可。
7059 0
VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了
|
9月前
|
网络协议 数据建模 数据安全/隐私保护
网安快速入门之Windows命令
本文简要介绍了Windows命令行中常用的11个命令,帮助快速入门网络安全和系统管理。这些命令包括:`help`(获取命令帮助)、`copy`(复制文件)、`dir`(显示目录内容)、`cd`(更改当前目录)、`type`(显示文本文件内容)、`del`(删除文件)、`ipconfig`(查看网络配置)、`net`(用户和组管理)、`netstat`(显示网络连接)、`tasklist`(显示进程信息)和`sc`(服务控制)。每个命令都有其特定用途,掌握它们可以大大提高工作效率和系统维护能力。
|
JSON Linux 应用服务中间件
CentOS 7 上编译安装 Podman 3.4.4
CentOS 7 上编译安装 Podman 3.4.4
851 0
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
1740 1
DFA与NFA的区别,由正规表达式构造DFA,以及DFA的相关化简
|
11月前
|
供应链 数据挖掘 Java
电商API接口介绍
‌电商API接口‌是指一组用于访问电商平台中数据的编程接口,通过这些接口,开发者可以以编程方式获取商品信息、订单信息、用户信息等,实现电商平台数据的对接和交互。
317 5
|
12月前
|
机器学习/深度学习 自然语言处理 算法
超越传统搜索:探索基于GraphRAG的信息检索新范式
【10月更文挑战第10天】随着信息爆炸时代的到来,如何从海量的数据中快速准确地找到所需的信息成为了一个亟待解决的问题。传统的信息检索系统主要依赖于关键词匹配和文档排名算法来提供结果,但这种方法往往无法捕捉到数据间的复杂关系,也无法很好地理解用户的查询意图。近年来,一种新的信息检索方法——基于图的检索增强生成(Graph-based Retrieval-Augmented Generation, GraphRAG)应运而生,它通过结合知识图谱与机器学习技术,为信息检索带来了全新的视角。
296 1
|
Web App开发 Go iOS开发
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
【IOS】教你如何在手机端轻松安装 ipa 文件 -(安装器已失效 21.10)
|
JavaScript UED
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
4365 0
解决 Element-ui中 选择器(Select)因options 数据量大导致渲染慢、页面卡顿的问题
|
API Python
永续合约/秒合约系统设计开发dapp技术/代码搭建示例
永续合约是一种类似于期货合约的金融衍生品,与传统合约不同的是,它没有到期日期。HKD交易所的永续合约是基于标 记价格和保证金机制的交易方式,允许用户通过杠杆操作来增加收益和风险。在永续合约交易中,用户可以选择开多或开空 仓位,实现对市场走势的利润预测。
|
存储 SQL 算法
【动态规划】切割钢条详解python
【动态规划】切割钢条详解python