文档章节

S3C2410中文芯片手册-11.串口

PYChen
 PYChen
发布于 2016/10/28 22:00
字数 3218
阅读 8
收藏 0
点赞 0
评论 0

February 28, 2015 4:57 PM

[TOC]

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
  • 支持硬件握手发送/接收

选区_001.png

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 已经准备好接收数据)。

选区_002.png

NOTE: 串口2不支持 AFC 功能,因为 S3C2410X 没有 nRTS2 和 nCTS2。

Example of Non Auto-Flow control(controlling nRTS and nCTS by software)

Rx operation with FIFO

  1. 选择接收模式(Interrupt or DMA mode)。
  2. 在 UFSTATn 寄存器中检查 Rx FIFO 中当前的字节数。如果数值少于15,用户需要将 UMCONna[0] 的值设为1(激活 nRTS);如果大于等于15,用户应把值设为0(取消 nRTS)。
  3. 重复执行第二步。

Tx operation with FIFO

  1. 选择发送模式(Interrupt or DMA mode)。
  2. 检查 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 中断。

选区_003.png

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 - -

选区_004.png

Baud-Rate Generation

每个串口的波特率发生器给发送器和接收器提供串行时钟。波特率发生器的时钟源可以选择 S3C2410S 的内部系统时钟或 UCLK。换句话说,分频因子是可以选择的通过设置 UCONn 中的时钟选项。波特率时钟是通过在串口波特率分频因子寄存器(UART baud-rate divisor register) UBRDIVn 中设置16位的分频因子来分频时钟源(PCLK or UCLK)。 UBRDIVn 可以通过下面的公式确定:

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

分频因子的范围1~(2^16^-1)。

为了准确地操作串口,S3C2410X 还支持使用 UCLK 作为分频源。
如果 S3C2410X 使用外部串口设备或系统提供的额 UCLK,那么串口的串行时钟将和 UCLK 同步。因此用户可以更加准确的操作串口。UBRDIVn 可以通过下面公式确定:

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

分频因子的范围1~(2^16^-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 值。

选区_005.png
选区_006.png
选区_007.png
选区_008.png

UART SPECIAL REGISTERS

UART LINE CONTROL REGISTER

在串口模块中有3个串口线性控制寄存器,分别是 ULCON0,ULCON1 和 ULCON2。

选区_009.png

UART CONTROL REGISTER

在串口模块中有3个串口控制寄存器,分别是 UCON0,UCON1 和 UCON2。

选区_010.png

UART CONTROL REGISTER(CONTINUED)

选区_011.png

NOTE: 在带有 FIFO 的 DMA 模式下,当串口没有达到 FIFO 的触发等级并且在3个字的时间内(接收超时)没有收到数据, Rx 中断将会产生同时用户应该检查 FIFO 的状态并把剩下的数据读完。

UART FIFO CONTROL REGISTER

在串口模块中有3个串口 FIFO 控制寄存器,分别是 UFCON0,UFCON1 和 UFCON2。

选区_012.png

NOTE: 在带有 FIFO 的 DMA 模式下,当串口没有达到 FIFO 的触发等级并且在3个字的时间内(接收超时)没有收到数据, Rx 中断将会产生同时用户应该检查 FIFO 的状态并把剩下的数据读完。

UART MODEM CONTROL REGISTER

在串口模块中有2个串口终端控制寄存器,分别是 UMCON0 和 UMCON1。

选区_013.png

NOTE:串口2不支持 AFC 功能,因为 S3C2410X 没有 nRTS2 和 nCTS2。

UART TX/RX STATUS REGISTER

在串口模块中有3个串口 TX/RX 状态寄存器,分别是 UTRSTAT0,UTRSTAT1 和 UTRSTAT2。

选区_014.png

UART ERROR STATUS REGISTER

在串口模块中有3个串口 Rx 错误状态寄存器,分别是 UERSTAT0,UERSTAT1 和 UERSTAT2。

选区_015.png

NOTE:当串口错误状态寄存器被读过之后,这些位将会自动被清0。

UART FIFO STATUS REGISTER

在串口模块中有3个串口 FIFO 状态寄存器,分别是 UFSTAT0,UFSTAT1 和 UFSTAT2。

选区_016.png

UART MODEM STATUS REGISTER

在串口模块中有2个串口终端状态寄存器,分别是 UMSTAT0 和 UMSTAT1。

选区_017.png

UART TRANSMIT BUFFER REGISTER(HOLDING REGISTER & FIFO REGISTER)

在串口模块中有3个串口发送缓冲寄存器,分别是 UTXH0,UTXH1 和 UTXH2。
UTXHn 有8位发送数据。

选区_018.png

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位接收数据。

选区_019.png

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~(2^16^-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

选区_020.png

© 著作权归作者所有

共有 人打赏支持
PYChen
粉丝 0
博文 13
码字总数 10957
作品 0
哈尔滨
程序员
DS2433应用笔记

最近调试ds2433芯片,由于第一次接触1-wire总线,遇到了许多问题,但相关中文资料并不多,故作笔记总结,方便你我他。 调试环境:keil5 硬件环境:stm32F103C8T6+ds2433 引脚分配: DS2433主...

孟德思维 ⋅ 01/24 ⋅ 0

【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车

Zigbee技术目前在物联网领域和RFID一样,受关注度非常高。日前中科院上海微系统与信息技术研究所、无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628、WSNS1SCBR的两款...

刘洪峰iot ⋅ 2010/10/26 ⋅ 0

《OpenERP6.1中文手册》修订版发布时间

《OpenERP6.1中文手册》修订版发布时间 《OpenERP6.1中文手册上册》 第一次修订版 计划于 2012-11-01 日发布。 《OpenERP6.1中文手册下册》 第一次修订版 计划于 2012-11-15 日发布。 后期计...

保定-粉刷匠 ⋅ 2012/10/21 ⋅ 2

开源网络办公软件FengOffice中文手册正在翻译中(原创)--欢迎访问

FengOffice中文手册大部分为本文原创,借鉴或拷贝的部分已详细注明了其作者和出处。如果大家转载或复制FengOffice中文手册,请注明出处http://blog.sina.com.cn/s/articlelist2092249000111....

保定-粉刷匠 ⋅ 2011/07/03 ⋅ 4

《OpenERP6.1中文手册(上册)尝鲜版》发布

2012年9月1日,《OpenERP6.1中文手册》上册尝鲜版发布. 《OpenERP6.1中文手册》上册尝鲜版,是OpenERP中文社区、OpenERP手册群(235932676)、OpenERP应用群(212904),近一年的学习、交流的...

开源绿洲 ⋅ 2012/09/06 ⋅ 0

《OpenERP7.0中文手册》尝鲜版完善进度

OpenERP7.0中文手册》尝鲜版完善进度 《OpenERP7.0中文手册》尝鲜版已完成,现正进行完善。 第11章 沟通工具 第11节 营销活动 完善(应用群:北京-Ivan,正在进行中) 第21章 生产管理(下,...

保定-粉刷匠 ⋅ 2013/02/16 ⋅ 35

TI-89T 的二次开发思路

TI-89T 的二次开发思路 为什么选择TI-89T? TI-89T是一款成熟、稳定的图形计算器,可以说是用来学习编程的最佳利器,具备了微型计算机的全部功能,并且由于采用了低能耗芯片MC68EC000,使得困...

FreeBlues ⋅ 2012/06/25 ⋅ 2

OpenERP6.1中文手册的翻译进度

OpenERP6.1中文手册的翻译进度 翻译最新进展见:http://blog.sina.com.cn/s/blog_7cb52fa8010105j7.html 一、已完成的部分有: 1)OpenERP中文手册000-044安装(保定-粉刷匠) 2)OpenERP中文...

保定-粉刷匠 ⋅ 2012/03/05 ⋅ 2

日常生活小技巧 -- 玩转 PDF

一、PDF 翻译 芯片手册、用户手册等多是PDF文件,多是英文的。下面介绍一下,如何将英文的 pdf 翻译为中文的。 百度搜索到的翻译网页大多是需要付费的。那么免费的应该用什么呢? 推荐,谷歌...

qq_29350001 ⋅ 2017/12/11 ⋅ 0

DIY高性能树莓派OpenWrt无线路由器

DIY高性能树莓派OpenWrt无线路由器 树叶的BLOG2017-12-032 阅读 Linux 概述 树莓派是一款只有信用卡大小的电脑,虽然硬件配置运行图形操作系统会有些吃力,不过对于OpenWrt系统来说,树莓派的...

树叶的BLOG ⋅ 2017/12/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 17分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 32分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 34分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 40分钟前 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 54分钟前 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部