嵌入式s3c2410A UART部分中文解释

2019-10-16来源: 51hei关键字:嵌入式  s3c2410A  UART  中文解释

异步串口通信


概述

S3C2410的UART提供3个独立的异步串行通信端口,每个端口可以基于中断或者DMA进行操作。换句话说,UART控制器可以在CPU和UART之间产生一个中断或者DMA请求来传输数据。UART在系统时钟下运行可支持高达230.4K的波特率,如果使用外部设备提供的UEXTCLK,UART的速度还可以更高。每个UART通道各含有两个16位的接收和发送FIFO。


S3C2410的UART包括可编程的波特率,红外 接收/发送,一个或两个停止位插入,5-8位数据宽度和奇偶校验。


每个UART包括一个波特率发生器、一个发送器、一个接收器和一个控制单元,如图11-1所示。波特率发生器的输入可以是PCLK或者UEXTCLK。发送器和接收器包含16位的FIFO和移位寄存器,数据被送入FIFO,然后被复制到发送移位寄存器准备发送,然后数据按位从发送数据引脚TxDn输出。同时,接收数据从接收数据引脚RxDn按位移入接收移位寄存器,并复制到FIFO。


特性

  • RxD0, TxD0, RxD1, TxD1, RxD2, 和TxD2基于中断或者DMA操作

  • UART Ch 0, 1, 和 2 具有 IrDA 1.0 & 16 字节 FIFO

  • UART Ch 0 和 1 具有 nRTS0, nCTS0, nRTS1, 和 nCTS1

  • 支持发生/接收握手

图11-1              UART方框图

串口操作

下述部分描述了UART的一些操作,包括数据发送、数据接收、中断产生、波特率发生、loop-back模式、红外模式和自动流控制。


数据发送

发送数据的帧结构是可编程的,它由1个起始位、5-8个数据位、1个可选的奇偶位和1-2个停止位组成,这些可以在线控制寄存器ULCONn中设定。接收器可以产生一个断点条件——使串行输出保持1帧发送时间的逻辑0状态。当前发送字被完全发送出去后,这个断点信号随后发送。断点信号发送之后,继续发送数据到Tx FIFO(如果没有FIFO则发送到Tx保持寄存器)。


数据接收

与数据发送一样,接收数据的帧格式也是可编程的。它由1个起始位、5-8个数据位、1个可选的奇偶位和1-2个停止位组成,这些可以在线控制寄存器ULCONn中设定。接收器可以探测到溢出错误和帧错误。


  • 溢出错误:在旧数据被读出来之前新的数据覆盖了旧的数据

  • 帧错误:    接收数据没有有效的停止位

当在3个字时间(与字长度位的设置有关)内没有接收到任何数据并且Rx FIFO非空时,将会产生一个接收超时条件。


自动流控制(AFC)

UART0和UART1通过nRTS and nCTS信号支持自动流控制,例如连接到外部UART时。如果用户希望将UART连接到一个MODEM,可以在UMCONn寄存器中禁止自动流控位,并且通过软件控制nRTS信号。


在AFC时, nRTS 由接收器的状态决定,而nCTS信号控制发送器的操作。只有当nCTS信号有效的时候(在AFC时,nCTS意味着其它UART的FIFO准备接收数据)UART发送器才会发送FIFO中的数据。在UART接收数据之前,当它的接收FIFO多于2字节的剩余空间时nRTS必须有效,当它的接收FIFO少于1字节的剩余空间时nRTS必须无效(nRTS意味着它自己的接收FIFO开始准备接收数据)。

图11-2              UART AFC接口

注:UART2不支持AFC功能,因为S3C2410没有nRTS2 和 nCTS2。

无AFC的例子

通过FIFO操作Rx

  • 选择接收模式(中断还是DMA模式)。

  • 检查UFSTATn寄存器中Rx FIFO的值。如果值小于15,用户必须将UMCONn[0]置1(nRTS生效),如果大于等于15,用户必须将UMCONn[0]清0(nRTS无效)。

  • 重复第2步。


通过FIFO操作Tx

  • 选择发送模式(中断还是DMA模式)。

  • 检查UMCONn[0]的值,如果为1,写数据到Tx FIFO


RS-232C接口

如果希望将UART连接到MODEM,nRTS, nCTS, nDSR, nDTR, DCD 和nRI信号是必须的。这种情况下用户可以通过GPIO控制这些信号因为AFC不支持RS-232C接口。


中断/DMA请求的产生

每个UART有5个状态(Tx/Rx/Error)信号:溢出错误、帧错误、接收缓冲满、发送缓冲空和发送移位寄存器空。这些状态体现在UART状态寄存器中的相关位(UTRSTATn/UERSTATn)。


溢出错误和帧错误与接收错误状态相关,每个错误可以产生一个接收错误状态中断请求,如果控制寄存器UCONn中的receive-error-status-interrupt-enable位被置1的话。如果探测到一个receive-error-status-interrupt-enable位,通过读UERSTSTn的值可以识别这一中断请求。


控制寄存器UCONn的接收器模式为1(中断或者循环检测模式):当接收器在FIFO模式下将一个数据从接收移位寄存器写入FIFO时,如果接收到的数据到达了Rx FIFO的触发条件,Rx中断就产生了。在无FIFO模式下,每次接收器将数据从移位寄存器写入接收保持寄存器都将产生一个RX中断请求。


如果控制寄存器的接收和发送模式选择为DMAn请求模式,在上面的情况下则是DMAn请求发生而不是RX/Tx中断请求产生。

UART错误状态FIFO

UART除了Rx FIFO外还有错误状态FIFO。错误状态FIFO指示接收到的哪个数据有错误。只有当有错误的数据准备读出的时候才会产生错误中断。要清除错误状态FIFO,URXHn和UERSTATn必须被读出。


例如:假设UART Rx FIFO顺序接收到ABCD4个字符,在接收B的时候发生了帧错误。事实上UART接收错误并未产生任务错误中断,因为错误的数据B还没有被读出,只有当读B字符的时候才会发生错误中断。图11-3描述了这一例子。


波特率发生器

每个UART的波特率发生器提供串行时钟给接收器和发送器。波特率发生器的时钟源可以选择呢不系统时钟或者UEXTCLK。换句话说,通过设置UCONn的时钟选择被除数是可选的。波特率时钟通过对时钟源(PCLK OR UEXTCLK)进行16分频,然后进行一个16位的除数分频得到,这个分频数由波特率除数寄存器UBRDIVn指定。UBRDIVn可由下式得出:

UBRDIVn = (int)(PCLK/(bps * 16) ) -1

此除数应该在1-(2的16方-1)之间。

为了UART的精确性,S3C2410还支持UEXTCLK作为被除数。

如果使用UEXTCLK(由外部UART设备或者系统提供),串行时钟能够精确地和UEXTCLK同步,因此用户可以得到更精确的UART操作,UBRDIVn由下式决定:                            UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1

此除数应该在1-(2的16方-1)之间,且UEXTCLK要比PCLK低。

例如,如果波特率为115200bps,而PCLK或者UEXTCLK为40MHz,则UBRDIVn为:

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

= (int)(21.7) -1

= 21 -1 = 20


波特率错误容差

UART的帧错误应该少于1.87%(3/160)。

UART Frame error should be less than 1.87%(3/160).

tUPCLK = (UBRDIVn + 1) x 16 x 1Frame / PCLK               tUPCLK : Real UART Clock

tUEXACT = 1Frame / baud-rate                                           tUEXACT : Ideal UART Clock

UART error = (tUPCLK – tUEXACT) / tUEXACT x 100%

注意:1、1帧=起始位+数据位+奇偶位+停止位

                    2、在特定条件下,波特率上限可达921.6K,例如当PCLK为60MHZ时,可以使用921.6K的波特率而误差为1.69%


loop-back模式

为了识别通讯连接中的故障,UART提供了一种叫loop-back模式的测试模式。这种模式结构上使能了UART的TXD和RXD连接,因此发送数据被接收器通过RXD接收。这一特性允许处理器检查每个SIO通道的内部发送到接收的数据路径。可以通过设置UART控制寄存器UCONn中的loopback位选择这一模式。


红外(IR)模式

UART支持红外 (IR)接收和发送,可以通过设置UART线控制寄存器ULCONn的Infra-red-mode位来进入这一模式。图11-4阐述了如何实现IR模式。

在IR发送模式下,发送脉冲的比例是3/16——正常的发送比率(当发送数据位为0的时候);在IR接收模式下,接收器必须检测3/16的脉冲来识别0值(见图11-6和11-7所示的帧时序)。




UART SFR

UART线控制寄存器ULCONn

有3个UART线控制寄存器:ULCON0, ULCON1, and ULCON2




UART控制寄存器UCONn

有3个UART控制寄存器:UCON0, UCON1, and UCON2

注意:DMA接收有FIFO模式下,当UART没有达到FIFO触发条件而且3个字时间没有接收到数据时,Rx中断会产生,用户应该检查FIFO的状态并读出其它数据。


UART FIFO控制寄存器UFCONn








波特率除数寄存器UBRDIVn

有3个波特率除数寄存器:UBRDIV0,UBRDIV1,UBRDIV2,存储于里面的值用于设置串口波特率:

UBRDIVn = (int)(PCLK / (bps x 16) ) –1                                                      

或              UBRDIVn = (int)(UEXTCLK / (bps x 16) ) –1

此除数应该在1-(2的16方-1)之间,且UEXTCLK要比PCLK低。

例如,如果波特率为115200bps,而PCLK或者UEXTCLK为40MHz,则UBRDIVn为:

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

= (int)(21.7) -1

= 21 -1 = 20


关键字:嵌入式  s3c2410A  UART  中文解释 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477307.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Smart210 USB ROOT HUB自动复位
下一篇:ADS1.2开发环境创建、编译、下载以及超级终端搭建

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Wind River Simics为嵌入式开发人员铺就坦途
新闻要点●  Wind River® Simics®助力嵌入式开发人员更便捷地改善CI/CD实践并开启DevOps之旅●  新功能特性包括性能提升、安全性增强以及在模拟运行时更好的洞察力●  Simics可以帮助客户模拟和测试传统方法几乎无法复制的复杂场景 领先的智能边缘软件提供商风河公司近日发布了其最新版的Wind River Simics®。运用可对实际硬件进行精确建模的虚拟平台,不管是芯片还是最复杂的复合型系统,Simics都能对其进行功能模拟,同时也为嵌入式开发人员提供了一条坦途,以便开展持续集成/持续部署(CI/CD)实践并发展出一整套DevOps文化
发表于 2019-11-14
[嵌入式开发模块]DS3231时钟芯片 驱动程序
刚刚写完DS3231时钟芯片的驱动程序。这里开源出来供大家使用。需要的自取。先简单介绍下这个芯片,然后直接给驱动代码以及示例代码。DS3231简介简介DS3231是一款低成本、高精度I2C实时时钟(RTC),具有集成的温补晶体振荡器(TCXO)和晶体。该器件包含电池输入端,断开主电源时认可保持精确的计时。其提供年、月、日、星期、时、分、秒信息,提供有效期到2100年的闰年补偿。其带有两个提供不同精度的日历闹钟,可在指定时刻在引脚上产生中断信号。支持快速(400kHz)I2C接口通讯。时钟精度在0℃到+40℃为±2ppm,即一个月可能偏离5s多;在-40℃到+85℃为±3.5ppm。除了时钟外,还提供精度为±3℃的数字温度传感器输出,
发表于 2019-11-11
[嵌入式开发模块]DS3231时钟芯片 驱动程序
LabView开发嵌入式应用技巧介绍
无论使用什么设计语言,不良的编程技术都会给一个应用的性能带来负面影响,对一个嵌入式应用尤其如此。尽管对于绝大部分应用来说,高效率的编程技术是重要的,但对于嵌入式应用所工作的资源极度缺乏的环境,则要求对性能和存储器管理给予特别的关注。本文的讨论将围绕着新的LabView嵌入式开发模块进行,这种新工具为嵌入式应用开发人员提供了图形化系统设计手段。该工具允许用户直观地设计算法并进行交互式调试。下面是一些有助于编程师更有效使用LabView开发嵌入式应用的技巧。这些技巧中的许多也适用于其它高级工具。  动态分配存储器技术动态存储器分配是一项编程师应尽可能避免的复杂操作。例如,如果动态分配出现在将数据存储到数组内的一个
发表于 2019-11-05
LabView开发嵌入式应用技巧介绍
新思科技推出新型嵌入式视觉处理器 可用于ADAS等系统
据外媒报道,新思科技(Synopsys)推出了最新一代的嵌入式视觉处理器,配备了深度神经网络(DNN)加速器,为人工智能(AI)密集型边缘应用提供业界领先的运算性能-每秒35万亿次运算(TOPS)。此外,新思科技还推出了一个用于汽车高级驾驶辅助系统(ADAS)、雷达/激光雷达和车载传感器片上系统(SoC)的功能安全版本的处理器。(图片来源:新思科技)基于ARCv2 RISC指令集架构,新型DesignWare ARC EV7x视觉处理器采用了1、2或4核异构架构,集成了矢量DSP、矢量FPU以及神经网络加速器,能够实现集成了AES加密的各类智能汽车和消费应用。可选的DNN加速器可从880 MAC扩展至14,080 MAC,使该系
发表于 2019-11-04
新思科技推出新型嵌入式视觉处理器 可用于ADAS等系统
研华嵌入式运算平台方案 赋能机器人自动化行业应用
随着国内人口红利逐渐消失,人口老龄化趋势加快,企业用人成本也直线攀升,绝大多数企业尤其是制造型企业,不得不考虑用机器代替人工,由此催生出了千亿级别的机器人市场。在此机遇下,国内机器人企业遍地开花,涉及特种服务,仓储物流,工业制造等多个行业。研华科技作为嵌入式工控行业的领导者,也在同步致力于为机器人制造企业提供优秀的嵌入式运算平台方案。  机器人实时控制解决方案 研华此款解决方案采用3.5寸机器人专用主板MIO-5850 搭配RTOS-RDCAT 软件方案来实现微秒级实时控制。  方案特点:     硬件平台:  Intel
发表于 2019-10-31
研华嵌入式运算平台方案 赋能机器人自动化行业应用
ARM与嵌入式入门的建议
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。在学校里,大都研究linux,也有少部分项目使用
发表于 2019-10-30
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved