异步串口通信
概述
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
上一篇:Smart210 USB ROOT HUB自动复位
下一篇:ADS1.2开发环境创建、编译、下载以及超级终端搭建
推荐阅读
史海拾趣
在1982年,Chauvin Arnoux发明了CONPA系列万用表,这款万用表具有多种适配器扩展功能,可适应不同的测量需求。通过适配器,CONPA万用表可以转变为照度计、声压计、热风速计等多种测量工具,为用户提供了更为灵活和便捷的测量方案。这一创新不仅展示了Chauvin Arnoux在测量技术上的深厚实力,也满足了用户对于多功能测量工具的需求。
这些故事展示了Chauvin Arnoux在电子行业发展的历程中,不断创新和进步的精神。通过不断推出具有创新性和实用性的测量仪器,Chauvin Arnoux在电气测量和工业应用领域取得了卓越的成就,为全球用户提供了高质量的测量解决方案。
请注意,以上内容基于我所了解到的Chauvin Arnoux公司的历史和发展情况,可能并不完全包含所有重要的故事和细节。如果需要更详细和全面的信息,建议查阅公司的官方资料或相关历史文献。
比亚迪的发展可以追溯到1995年,当时王传福创立了这家公司,最初专注于生产小型电池。在初创期,比亚迪通过模仿日本三洋和索尼的产品快速积累了生产经验。然而,王传福深知模仿不是长久之计,因此他果断地决定转向自主研发和创新。这一决策在日后证明是极其明智的。随着技术的不断积累,比亚迪于1997年开始量产锂离子电池,并成功实现了年销售额突破1亿元。这一里程碑标志着比亚迪在电池技术领域取得了重大突破,为其日后在电子行业的发展奠定了坚实基础。
近年来,比亚迪在电子行业的发展进入了新的阶段。为了巩固和扩大国内市场的发展优势,同时加速海外布局,比亚迪开始实施多品牌策略。通过推出不同定位、不同价格区间的产品系列,比亚迪满足了更多消费者的需求。同时,比亚迪还积极推进本地化生产进程,在海外设立生产基地,提高生产效率和降低成本。这些举措不仅提升了比亚迪在全球市场的竞争力,也为其未来的可持续发展奠定了坚实基础。
这些故事展示了比亚迪在电子行业中的发展历程和关键节点,从电池技术的突破、进军海外市场、新能源汽车转型、品牌形象更新到多品牌策略的实施,都体现了比亚迪不断创新、追求卓越的精神。
随着汽车工业的发展,大陆集团开始将业务扩展到汽车轮胎领域。1901年,马牌轮胎首次与德国戴姆勒·奔驰汽车公司合作参加汽车竞赛,这标志着大陆集团正式进入汽车轮胎市场。仅仅三年后,大陆集团就生产出了全世界第一条带花纹的汽车轮胎,这一创新大大提高了轮胎的抓地力和安全性。1908年,大陆集团又生产出了全世界第一个可拆装的车轮,使车轮和车轴分开,由此大大节省了换轮胎的时间。这些技术创新使得大陆集团在汽车轮胎市场上占据了重要地位。
EMS GmbH公司自创立之初,就专注于汽车转换器注塑件(微动开关)的研发和生产。公司投入大量资源进行技术创新,逐步积累起了一系列核心专利技术。这些技术不仅涵盖了汽车转换器注塑件生产的所有关键技术,还获得了多个国际品质管理组织机构及主流整车厂的双重、三重认证。这些专利技术的积累,使EMS GmbH公司在汽车转换器注塑件领域确立了行业领先地位。
随着环保意识的日益增强,ACI积极响应国家号召,致力于绿色电子产品的研发和生产。公司投入大量资源研发环保材料和技术,推出了一系列符合环保标准的产品。
这些绿色电子产品在市场上受到了广泛欢迎。消费者越来越关注产品的环保性能,ACI的产品正好满足了这一需求。同时,公司的环保理念也得到了社会各界的认可和支持,进一步提升了公司的品牌形象。
没想到第一个参加这个活动,也算是抛砖引玉一下了,希望有后来人能够找到更强悍的! 我晒得这个是一个用光作为媒介的调频传输系统。发射机把565锁相环用作电压控制振荡器,使光电隔离器的发光二极管按照与输入电压成正比的速率而闪光。光电晶体管 ...… 查看全部问答∨ |
|
RS232接口总是让我们爱恨交织,N多年前有个偷电式一只PNP/NPN偷电式串口盛行于当下,其最早的知识产权ZENYIN同学估计当追溯到小齐(XIAO-QI)叔叔那里,近几年随着欲望的膨胀,ZENYIN作了改进,改进的电路如下: 有这样炫彩: 1.速率更高,实测可以 ...… 查看全部问答∨ |
下载50mb 的开发资料包:实例,原理图,keil 正式版,下载实验板免费申请中 下载50个单片机程序实例和开发板原理图,学林电子免费开发板新年助学活动报名啦! 申请主贴地址: http://www.51c51.com/bbs/thread-44274-1-1.html… 查看全部问答∨ |
我在网上看到S3C2410A将系统的存储空间分成8个bank,每个bank的大小是128M字节。 每个bank都有一个nGCSx对应 nGCSx被叫做片选,片选上可以连接内存 那是不是一个256M的内存链接到上述一个片选上,因为一个片选对应的bank的大小只有128M,就会浪费 ...… 查看全部问答∨ |
|
用PA0做为IO按键输入,加了一个上拉电阻。 当你按下按键时,PA0没有被拉低,依旧是高。 请用过ZET6的兄弟们,指点一下。 程序如下: void GpioInit(void) { /* Configure all unused GPIO port pins in Analog Input mode (floating in ...… 查看全部问答∨ |
【MSP430共享】基于嵌入式实时操作系统的电子熔断丝的设计 应用嵌入式实时操作系统实现了智能式电子熔断的设计. 介绍了由 MS P 4 3 0 F I 4 9组成的电 子熔断丝系统的工作原理、 硬件电路及其在计算机实时操作系统 ~ c / o s - Ⅱ平台上应用软件的编程技巧. 实验证明, 智能电子熔断丝能够克服传 ...… 查看全部问答∨ |