S3C2410中文芯片手册-11.串口
February 28, 2015 4:57 PM
- 11 UART
- Overview
- UART Operation
- UART SPECIAL REGISTERS
- UART LINE CONTROL REGISTER
- UART CONTROL REGISTER
- UART CONTROL REGISTER(CONTINUED)
- UART FIFO CONTROL REGISTER
- UART MODEM CONTROL REGISTER
- UART TX/RX STATUS REGISTER
- UART ERROR STATUS REGISTER
- UART FIFO STATUS REGISTER
- UART MODEM STATUS REGISTER
- UART TRANSMIT BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)
- UART RECEIVE BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)
- UART BAUD RATE DIVISOR REGISTER
11 UART
Overview
S3C2410x 提供3个独立的异步串行I/O接口,每一个都可以工作在中断或是 DMA 模式。UART 最高可以支持230.
4K bps波特率,通过使用系统时钟。如果有外部设备给 UART 提供 UCLK, 那么 UART 可以达到更高的速度。每个 UART 通道包含2个16个字节的 FIFO 用于接收和发送数据。
S3C2410 的 UART 包括 可编程波特率,infra-red 发送/接收, 1~2个停止位, 5~8位数据位和奇偶校验。
每个 UART 由波特率发生器、发送器、接收器和控制单元组成,如图11-1所示。波特率发生器可以由 PCLK 或是 UCLK 提供时钟。数据发送器和接收器包含16字节的 FIFO 和数据缓冲器。数据首先被写入 FIFO 中,然后在发送前被拷贝到发送数据缓冲器中。这些数据之后被数据发送引脚(TxDn)发送。同时从接收引脚接收数据,然后将数据从缓冲器复制到 FIFO。
Featrues
- RxD0, TxD0, RxD1, TxD1, RxD2 和 TxD2 带有 DMA 和中断操作。
- UART 通道 0,1和2,带有 IrDA 1.0 & 16-byte FIFO
- UART 通道 0和1,带有 nRTS0,nCTS0,nRTS1 和 nCTS1
- 支持硬件握手发送/接收
UART Operation
接下来的章节描述了 UART 的操作,包括数据发送、数据接收、中断产生、波特率产生,回环模式,红外模式和自动流控制。
Data Transmission
传送的数据结构是可编程的。它包括一位起始位、5~8位数据位、一位可选的奇偶校验位和1~2位停止位,这些都可以通过线性控制寄存器(ULCONn)来指定。发送器也可以通过强制串行口在一帧发送数据时间里输出逻辑0来产生中止条件。这块发送中止信号出现在发送字发送完之后。在发送中止信号之后,将继续发送数据到 Tx 的 FIFO 中(Tx 将保持寄存器对于 Non-FIFO 模式来说)。
Data Reception
与发送一样,接收到的数据结构同样是可编程的。它包括一位起始位、5~8位数据位、一位可选的奇偶校验位和1~2位停止位在线性控制寄存器中(ULCONn)。接收器可以探测 overrun error,parity error,frame error和break condition,每种错误都有相应的错误标志位。
- overrun error 代表在旧数据被读取前新数据已经将旧数据重写。
- parity error 代表接收器已经探测到不期望的奇偶校验值。
- frame error 代表接收到的数据没有默认的停止位。
- break condition 代表 RxDn 输入保持在逻辑0的时间比一帧发送数据的时间长
当在3个字长时间内没有接收到任何数据并且 Rx FIFO 在 FIFO 模式下非空,将会产生接收超时(Receive time-out condition)。
Auto Flow Control(AFC)
S3C2410X 的串口0和串口1支持自动流控制,并带有 nRTS 和 nCTS信号。如果用户想连接串口到终端,那么需要在 UMCONn 寄存器中取消自动流控制位并且用软件控制 nRTS 信号。
在 AFC 模式中, nRTS 根据接收器的状态和 nCTS 信号来控制发送器的操作。当 nCTS 信号被激活时(在 AFC 中,nCTS 代表其他串口的 FIFO 已经准备好接收数据),串口的发送器发送 FIFO 中的数据。在接收数据前,如果接收器的 FIFO 有超过两个字节的空闲,那么 nRTS 信号将被激活;如果接收器的 FIFO 中空闲少于一个字节时, nRTS 信号将停止激活(在 AFC 模式中, nRTS 代表它本身的接收FIFO 已经准备好接收数据)。
NOTE: 串口2不支持 AFC 功能,因为 S3C2410X 没有 nRTS2 和 nCTS2。
Example of Non Auto-Flow control(controlling nRTS and nCTS by software)
Rx operation with FIFO
- 选择接收模式(Interrupt or DMA mode)。
- 在 UFSTATn 寄存器中检查 Rx FIFO 中当前的字节数。如果数值少于15,用户需要将 UMCONna[0] 的值设为1(激活 nRTS);如果大于等于15,用户应把值设为0(取消 nRTS)。
- 重复执行第二步。
Tx operation with FIFO
- 选择发送模式(Interrupt or DMA mode)。
- 检查 UMSTATn[0] 的值。如果值为1(激活 nCTS),用户可以将数据写到 Tx FIFO 寄存器中。
RS-232C interface
如果用户想把串口连接到终端上, nRTS, nCTS, nDSR, nDTR, DCD 和 nRI 信号是必须的。由于 AFC 不支持 RS-232C 接口,如果用户要使用这种接口,需要通过软件控制通用 I/O 接口来控制这些信号。
Interrupt/DMA Request Genration
S3C2410X 的每个串口有7种状态:Overrun error, Parity error, Frame error, Break, Receive buffer data ready, Transmit buffer empty 和 Transmit shifter empty。所有这些状态都通过相应的串口状态寄存器(UTRSTATn/UERSTATn)表现出来。
Overrun error, parity error, frame error 和 break condition 是接收错误状态,它们都能引发接收错误状态中断请求,如果接收错误状态中断使能位(receive-error-status-interrupt-enable)被设置成1在 UCONn 中。当接收错误状态中断请求(receive-error-status-interrupt-request)被检测到,导致请求的信号可以通过读取 UERSTSTn 的值来被识别。
如果在接收模式下控制寄存器(UCONn)中的值被设为1(Interrupt request or polling mode),在 FIFO 模式下,当接收器将接收缓冲器中的数据发送到接收 FIFO 中并且接收到的数据量达到 Rx FIFO 的触发等级,Rx 中断将会产生。
在 Non-FIFO 模式中,如果设置为 Interrupt request and polling 模式,当把接收缓冲器中的数据发送到接收保持寄存器将会引起 Rx 中断。
如果在发送模式下控制寄存器被设置为 Interrupt request or polling 模式,当发送器将发送 FIFO 中的数据发送到发送缓冲器并且发送 FIFO 中剩余的数据量达到 Tx FIFO 的触发等级, Tx 中断将会产生。
在 Non-FIFO 模式中,如果设置为 Interrupt request and polling 模式,当把发送保持寄存器中的数据发送到发送缓冲器时将会引起 Tx 中断。
如果控制寄存器被设为 DMAn request 模式,那么在上面提到的发送模式和接收模式中,DMAn 请求将会取代 Rx 或 Tx 中断。
UART Error Status FIFO
除了 Rx FIFO 寄存器,串口还有错误状态队列(error status FIFO)。这个错误状态队列记录了 FIFO 寄存器中接收到的哪个数据是错误的。当带有错误的数据准备被读出时,错误中断将会产生。为了清除错误状态队列(error status FIFO),需要读取 URXHn 和 UERSTATn 寄存器。
For example
假设 UART Rx FIFO 连续地收到了 A,B,C,D 和 E 五个字符,并且当接收到 ‘B’ 时发生 frame error,接收到 ‘D’ 时发生 parity error。
实际上串口接收到错误将不会产生任何错误中断,因为收到的错误字符还没有被读出来。当错误字符被读出时发生错误中断。
Figure 11-3 shows the UART receiving the five characters including the two errors.
Time | Sequence Flow | Error Interrupt | Note |
---|---|---|---|
#0 | When no character is read out | - | - |
#1 | A,B,C,D,and E is received | - | - |
#2 | After A is read out | The frame error (in B) interrupt occurs. | The 'B' has to be read out |
#3 | After B is read out | - | - |
#4 | After C is read out | The parity error (in D) interrupt occurs. | The 'D' has to be read out |
#5 | After D is read out | - | - |
#6 | After E is read out | - | - |
Baud-Rate Generation
每个串口的波特率发生器给发送器和接收器提供串行时钟。波特率发生器的时钟源可以选择 S3C2410S 的内部系统时钟或 UCLK。换句话说,分频因子是可以选择的通过设置 UCONn 中的时钟选项。波特率时钟是通过在串口波特率分频因子寄存器(UART baud-rate divisor register) UBRDIVn 中设置16位的分频因子来分频时钟源(PCLK or UCLK)。 UBRDIVn 可以通过下面的公式确定:
UBRDIVn = (int)(PCLK/(bps * 16)) - 1
分频因子的范围1~(216-1)。
为了准确地操作串口,S3C2410X 还支持使用 UCLK 作为分频源。
如果 S3C2410X 使用外部串口设备或系统提供的额 UCLK,那么串口的串行时钟将和 UCLK 同步。因此用户可以更加准确的操作串口。UBRDIVn 可以通过下面公式确定:
UBRDIVn = (int)(UCLK/(bps * 16)) - 1
分频因子的范围1~(216-1),并且 UCLK 应该比 PCLK 小。
For example:如果波特率是115200 bps 并且 PCLK 和 UCLK 是 40 MHz, UBRDIVn 如下确定:
UBRDIVn = (int)(40000000/(115200 * 16)) - 1
= (int)(21.7) - 1
= 21 - 1 = 20
UART baud-rate generator error tolerance
串口10位数据的时间错误(time error)应该小于 1.87%(3/160)
tUPCLK = (UBRDIVn + 1) * 16 * 10 / PCLK
tUPCLK:Real UART 10-bit time
tUEXACT = 10 / baud-rate
tUEXACT:Ideal UART 10-bit time
UART error = (tUPCLK - tUEXACT) / tUEXACT * 100%
Loopback Mode
S3C2410X 的串口提供了一个测试模式能够帮助隔离通信线路中的错误,叫做回环模式。这个模式能开启串口中 RXD 和 TXD 的连接。因此在这个模式中,发送的数据能够经过自身的 RXD 接收到接收器中。这个特性可以允许处理器检验内部发送和接收数据的频道路径。这个模式可以在串口控制寄存器(UCONn)中回环位(loopback bit)进行设置。
Break Condition
Break 信号被定义为一帧发送数据时间内输出的发送数据中连续的低电平信号。
Infra-Red(IR) Mode
S3C2410X 的串口模块可以通过设置串口线性控制器(ULCONn)的红外模式位(Infra-red-mode bit)来支持红外发送和接收。 Figure 11-4 举例说明如何执行 IR 模式。
在 IR 发送模式中,发送脉冲发出正常的串行发送率 3/16;在 IR 接收模式中,接收器一定要在 3/16 脉冲期间去识别出 0 值。
UART SPECIAL REGISTERS
UART LINE CONTROL REGISTER
在串口模块中有3个串口线性控制寄存器,分别是 ULCON0,ULCON1 和 ULCON2。
UART CONTROL REGISTER
在串口模块中有3个串口控制寄存器,分别是 UCON0,UCON1 和 UCON2。
UART CONTROL REGISTER(CONTINUED)
NOTE: 在带有 FIFO 的 DMA 模式下,当串口没有达到 FIFO 的触发等级并且在3个字的时间内(接收超时)没有收到数据, Rx 中断将会产生同时用户应该检查 FIFO 的状态并把剩下的数据读完。
UART FIFO CONTROL REGISTER
在串口模块中有3个串口 FIFO 控制寄存器,分别是 UFCON0,UFCON1 和 UFCON2。
NOTE: 在带有 FIFO 的 DMA 模式下,当串口没有达到 FIFO 的触发等级并且在3个字的时间内(接收超时)没有收到数据, Rx 中断将会产生同时用户应该检查 FIFO 的状态并把剩下的数据读完。
UART MODEM CONTROL REGISTER
在串口模块中有2个串口终端控制寄存器,分别是 UMCON0 和 UMCON1。
NOTE:串口2不支持 AFC 功能,因为 S3C2410X 没有 nRTS2 和 nCTS2。
UART TX/RX STATUS REGISTER
在串口模块中有3个串口 TX/RX 状态寄存器,分别是 UTRSTAT0,UTRSTAT1 和 UTRSTAT2。
UART ERROR STATUS REGISTER
在串口模块中有3个串口 Rx 错误状态寄存器,分别是 UERSTAT0,UERSTAT1 和 UERSTAT2。
NOTE:当串口错误状态寄存器被读过之后,这些位将会自动被清0。
UART FIFO STATUS REGISTER
在串口模块中有3个串口 FIFO 状态寄存器,分别是 UFSTAT0,UFSTAT1 和 UFSTAT2。
UART MODEM STATUS REGISTER
在串口模块中有2个串口终端状态寄存器,分别是 UMSTAT0 和 UMSTAT1。
UART TRANSMIT BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)
在串口模块中有3个串口发送缓冲寄存器,分别是 UTXH0,UTXH1 和 UTXH2。
UTXHn 有8位发送数据。
NOTE:(L):The endian mode is Little endian.
(B):The endian mode is Big endian.
UART RECEIVE BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)
在串口模块中有3个串口接收缓冲寄存器,分别是 URXH0,URXH1 和 URXH2。
URXHn 有8位接收数据。
NOTE:当发生 overrun error 时,需要读取 URXHn 寄存器。否则,即使清空 UERSTATn 中的 overrun 标志位,当再次接收到数据时同样将产生 overrun error。
UART BAUD RATE DIVISOR REGISTER
在串口模块中有3个串口波特率分频寄存器,分别是 UBRDIV0,UBRDIB1 和 UBRDIV2。
存储在波特率分频寄存器(UBRDIVn)中的值如下确定串行 Tx/Rx 的时钟频率:
UBRDIVn = (int)(PCLK / (bps * 16)) - 1
or
UBRDIVn = (int)(UCLK / (bps * 16)) - 1
分频因子的范围1~(216-1),并且 UCLK 应该比 PCLK 小。
For example:如果波特率是115200 bps 并且 PCLK 和 UCLK 是 40 MHz, UBRDIVn 如下确定:
UBRDIVn = (int)(40000000/(115200 * 16)) - 1
= (int)(21.7) - 1
= 21 - 1 = 20
S3C2410中文芯片手册-11.串口的更多相关文章
- jpgraph中文使用手册之文本和字体控制教程
摘要:在之前的php jpgraph安装配置教程中已介绍过jpgraph字体的安装与配置方法,jpgraph类库中字体和文本的使用是非常重要的,jpgraph既可以控 制文本的旋转.对齐方式.字体大小 ...
- phpExcel中文帮助手册
phpExcel中文帮助手册 Admin 2011年11月13日 名人名言:上人生的旅途吧.前途很远,也很暗.然而不要怕.不怕的人的面前才有路.——有岛武郎 下面是总结的几个应用办法 include ...
- CentOS7 安装中文帮助手册
1.首先确定系统安装中文字体否 locale 2.rpm安装中文帮助手册 挂在光盘 将man-pages-zh-CN-1.5.2-4.el7.noarch.rpm拷贝到本机 rpm -ivh man- ...
- glusterFS系统中文管理手册(转载)
GlusterFS系统中文管理手册 1文档说明 该文档主要内容出自 www.gluster.org 官方提供的英文系统管理手册<Gluster File System 3.3.0 A ...
- Highcharts中文参考手册
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- Semantic UI 中文参考手册
一个拥有友好词汇表的前端框架,完全语义化的前端界面开发框架,为一组开发人员之间共享UI元素配备了规格.使用的词汇(类和ID)相比其它替代品更加简洁,从而降低了学习曲线.有许多HTML元素,UI元素和场 ...
- Yahoo Pure 中文参考手册
Pure 是来自雅虎的 CSS 框架,使用 Normalize.CSS 无需任何 JavaScript 代码.框架基于响应式设计,提供多种样式的组件,包括表格.表单.按钮.表.导航等.标识使用非常简单 ...
- Bootstrap中文参考手册
Bootstrap是推出的一个开源的用于前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架.Bootstrap提供了优雅的 ...
- Lua 5.2 中文参考手册
闲来无事,发现Lua更新到了5.2.2,参考手册也更到了5.2,在网上发现只有云风翻译的5.1版,花了几天时间翻译了一些. 参考手册有点长,又要随时修改,所以在github上建了项目,有需要的朋友可以 ...
随机推荐
- 3123: [Sdoi2013]森林
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3336 Solved: 978[Submit][Status] ...
- EasyNVR无插件直播服务器软件览器低延时播放监控摄像头视频(EasyNVR播放FLV视频流)
背景描述 EasyNVR的使用者应该都是清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可 ...
- http => https 升级
准备证书 阿里云安全(云盾)-> CA证书服务,购买证书,个人测试的话可以使用免费的,期限1年. 购买证书后,把域名与证书进行绑定,提交审核,大概10分钟左右,正常情况下审核就可以通过.证书准备 ...
- Linux安装python3.7.2详细操作步骤
1.下载Python依赖环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ...
- onActivityResult方法不执行,什么原因?
原因: public void OnOpenPlayersActivity(View view) { Intent intent = new Intent(); intent.setClass(g ...
- html ---- web sql 例子
<!doctype html> <html> <head> <meta charset="utf-8"> <script> ...
- uCGUI 按键窗口切换机制
前段时间在做一个窗口项目,这个项目菜单项过多,在管理起来比较麻烦.想做一个高效移植又方便的一个切换机制.后来在网上多方查找这方面资料,但是感觉比较少.后来自己整理出了这个结构,希望对后来朋友有所帮助. ...
- STM32 HAL SPI读取MPU6500的设备ID异常
1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...
- P4388 付公主的矩形(gcd+欧拉函数)
P4388 付公主的矩形 前置芝士 \(gcd\)与欧拉函数 要求对其应用于性质比较熟,否则建议左转百度 思路 有\(n×m\)的矩阵,题目要求对角线经过的格子有\(N\)个, 设函数\(f(x,y) ...
- hd acm1425
给你n个整数,请按从大到小的顺序输出其中前m大的数. 先看代码: #include<stdio.h>#include<string.h>#define MAX 1100000i ...