文档库 最新最全的文档下载
当前位置:文档库 › S3C2440A中文资料_UART

S3C2440A中文资料_UART

S3C2440A中文资料_UART
S3C2440A中文资料_UART

第十一章UART

10.1概述

s3c2440A通用异步接收器和发送器(UART)提供了三个独立的异步串行I/O(SIO)端口,每个端口都可以在中断模式或DMA模式下操作。换言之,UART可以生成一个中断或DMA请求用于CPU和UART之间的数据传输。UART使用系统时钟可以支持最高115.2K bps的波特率。如果一个外部设备提供UEXTCLK给UART,

作。每个UART通道对于接收器和发送器包括了2个64位的FIFO

s3c2440A UART包括了可编程波特率,红外传输接收,一个或两个停止位,5位6位7位8位数据长度和奇偶校验。

每个UART包含一个波特率发送器,发送器,计数器和一个控制单元,如图11-1所示。其波特率发生器可由PCLK,FCLK/n或UEXTCLK(外部输入时钟)来锁定。发送器和接收器包含了64位FIFO和数据移位器。数据写到FIFO然后在被传送前拷贝到发送移位器。数据通过发送数据引脚(TxDn)被发出。同时,接收数据通过接收数据引脚(RxDn)移入,然后从移位器拷贝到FIFO。

10.2特点

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

-有红外和64位FIFO的UART通道0和1

-有nRTS0,nCTS0,nRTS1和nCTS1的UART通道0和1

-支持握手的发送和接收

10.3模块图

10.4UART操作

以下章节描述了UART操作,包括数据传输,数据接收,中断生成,波特率生,回送模式,红外模式自动流控制。

10.4.1数据发送

发送的数据帧是可编程的。其包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,其可由线性控制寄存器ULCONn来设置。发送器也可以产生一个终止条件,其可以对一个帧发送时间强制串行输出为逻辑0。在当前发送字被完全传输完以后,该模块发送一个终止信号。在终止信号发送后,其串行发送数据到TxFIFO。

10.4.2数据接收

如数据发送,接收的数据帧是可编程的。其包括一个开始位,5~8个数据位,一个可选的奇偶校验位和1~2个停止位,其可由线性控制寄存器ULCONn来设置。接收器可以侦测溢出错误,奇偶校验错误,帧错误和终止条件,每个错误都可以设置一个错误标志。

-溢出错误是指在旧数据被读取前新数据覆盖了旧数据。

-奇偶校验错误是指接收器侦测到一个不希望的奇偶条件。

-帧错误是指接收到的数据没有一个有效的停止位。

-终止条件是指RxDn输入保持逻辑0状态长于一个帧的传输时间。

当接收器在三个字的时间内(其间隔根据字长位的设置)没有收到任何数据且Rx FIFO在FIFO模式下不为空,接收超时条件出现。

10.4.3自动流控制(AFC)

s3c2440A的UART0和UART1支持有nRTS和nCTS的自动流。这种情况下,其可以连接到外部UART。如果用户想连接UART到Modem,应使UMCONn寄存器中的自动流控制位无效且通过软件控制nRTS。

在AFC中,nRTS依赖于接收器的条件,nCTS信号控制发送器的操作。UART的发送器传输数据到FIFO仅当nCTS信号被激活(在AFC中,nCTS意思是对方的UART FIFO准备好接收数据)。在UART接收数据之前,当其接收FIFO有大于32个字节的空闲空间,nRTS必须被激活;当其接收FIFO有小于32个字节的空闲空间,nRTS必须置非激活。

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

非自动流控制举例(用软件控制nRTS和nCTS)

使用FIFO的接收操作

(1)选择接收模式(中断或DMA模式)

(2)检查UFSTATn寄存器中的Rx FIFO计数器。如果其值小于32,用户应该将UMCONn[0]的值置1(激活nRTS),如果其等于大于32,用户应该将其置0。

(3)重复步骤2

有FIFO的发送操作

(1)选择发送模式(中断或DMA模式)

(2)检查UMSTATn[0]的值,如果其值为1,用户写数据到发送FIFO寄存器。

10.4.4RS-232C接口

如果用户想连接UART到Modem接口上,就需要nRTS、nCTS、nDSR、nDTR、DCD和nRI。在这种情况下,用户可通过软件使用通用IO端口来控制这些信号,因为AFC不支持RS-232C接口。

10.4.5中断/DMA请求生成

s3c2440A的每个UART有七个状态(Tx/Rx/Error)信号:溢出错误,奇偶校验错误,帧错误,终止,接收缓存数据准备好,发送缓存空和发送移位器空,其由相应UART的状态寄存器(UTRSTATn/UERSTATn)指出。

溢出错误,奇偶校验错误,帧错误,终止条件是作为接收错误状态来参考,每种错误都可以引起接收错误状态中断请求,如果在控制寄存器UCONn中的接收错误状态中断使能位置1。

当接收错误状态中断请求被检测到,该信号引起的请求可以通过读UERSTSTn寄存器的值

来鉴别。

当接收器传输接收移位器上的数据到在FIFO 模式下的接收FIFO 寄存器上且接收到的数据数量达到接收FIFO 触发水平,接收中断产生,如果在控制寄存器UCONn 中接收模式被置1(中断请求或查询模式)。在非FIFO 模式下,传输接收移位器的数据到接收保持寄存器将引起在中断请求或查询模式下的接收中断。

当发送器传输接收移位器上的数据到发送FIFO 寄存器上且在在发送FIFO 中剩余的数据数量达到发送FIFO 触发水平,发送中断产生,如果在控制寄存器UCONn 中的接收模式被选定为中断请求或查询模式。在非FIFO 模式下,传输发送保持寄存器的数据到发送移位器将引起在中断请求或查询模式下的发送中断。

如果在控制寄存器中发送模式和接收模式被选定为DMAn 请求模式,这样DMAn 请求将取代上述情形下的接收或发送中断出现。10.4.6UART 错误状态FIFO

除了了接收FIFO 寄存器,UART 有一个错误状态FIFO 。错误状态FIFO 是指出FIFO 寄存器中有错的数据。当有错的数据准备读出,错误中断就产生。为了清除错误状态FIFO ,有错误的URXHn 和UERSTATn 必须被读出。

举例

假定UART 接收FIFO 顺序接收到A 、B 、C 、D 、E 且在接收B 时出现帧错误,在接收D 时出现奇偶校验错误。因为错误接收的字符没有被读取,所以UART 接收错误没有产生错误中断。一旦字符被读取,错误中断产生。

如图11-3所示UART 接收4个字符包括2个错误。类型FIFO 模式非FIFO 模式Rx interrupt 只要接收数据到达接收FIFO 的触发等级,中断产生。当FIFO 中的数据数量没有达到接收FIFO 的触发等级且在三个字时间内没有接收到任何数据(接收超时),产生中断。该时间根据字长位设置。

只要接收缓存为空,由接收

保持寄存器生成。Tx interrupt 只要发送数据达到发送FIFO 触发等级,中断产生。只要发送缓存为空,由接收

发送寄存器生成。

Error interrupt 当帧错误,奇偶错误或终止信号被检测到,中断产生。当达到接收FIFO 的上限没有读出数据,中断产生。

由错误生成。但是如果其他

错误同时产生,仅一个中断产生。时间顺序流

错误中断

#0当没有字符被读出

--#1接收到A 、B 、C 、D 、E 帧错误(B 中)中断出现

‘B’必须被读出

#2在A 被读出后--#3在B 被读出后--#4在C 被读出后奇偶校验错误(D 中)中断出现

‘D’必须被读出

#5在D 被读出后--#6

在E 被读出后

--

10.4.7波特率产生

每个UART波特率发生器为发送器和接收器提供串行时钟。波特率发生器的源时钟可以选择

s3c2440A的内部系统时钟或UEXTCLK。换言之,被除数可以设定UCONn中的时钟选择来选择。波特率时钟通过16和由UART波特率除数寄存器(UBRDIVn)中定义的16位除数来分频源时钟(PCLK,FCLK/n or UEXTCLK)产生。UBRDIVn由以下表达式来决定。

UBRDIVn=(int)(UART clock/(buad rate x16))–1

(UART clock:PCLK,FCLK/n or UEXTCLK)

UBRDIVn应该是从1到216-1,当使用小于PCKL的外部时钟UEXTCLK时应该设置0。

例如如果波特率是115200bps且UART时钟是40MHz,UBRDIVn是

UBRDIVn=(int)(40000000/(115200x16))-1

=(int)(21.7)-1[round to the nearest whole number]

=22-1=21

波特率错误公差Baud-Rate Error Tolerance

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

tUPCLK=(UBRDIVn+1)x16x1Frame/PCLK tUPCLK:Real UART Clock

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

UART error=(tUPCLK–tUEXACT)/tUEXACT x100%

注:

1.1Frame=start bit+data bit+parity bit+stop bit.

2.在特定条件下,我们支持波特率最高达到921.6K bps。例如,当PCLK为60MHz,你可以在

1.69UART错误公差下使用921.6K bps under UART error of1.69%.

10.4.8回送模式

s3c2440A UART提供了一个参考作为回送模式的测试模式,以帮助孤立通讯连接中的错误。这个模式结构上使能在UART中的RXD和TXD连接。在此模式下发送的数据通过RXD接收到接收器。该特点是允许处理器验证内部传输和每个SIO通道的接收数据通道。该模式通过设置UART控制寄存器UCONn的回送位来选定。

10.4.9红外模式

S3c2440A UART模块支持红外发送和接收,其通过设置UART线性控制寄存器ULCONn的红外模式位来选定。如图11-4所示如何执行一个红外模式。

在红外发送模式,发送脉冲是3/16的正常串行发送率(当发送数据位为0时)。在红外接收模式下,接收器必须检测3/16的脉冲期间来识别一个0值(看如图11-7和11-6所示的帧时序图)。

10.5UART特殊寄存器

(1)UART线性控制寄存器(ULCONn)

(2)UART控制寄存器(UCONn)

(3)UART FIFO控制寄存器(UFCONn)

(4)UART MODEM控制寄存器(UMCONn)

(5)UART接收发送状态寄存器(UTRSTATn)

(6)UART错误状态寄存器(UERSTATn)

(7)UART FIFO状态寄存器(UFSTATn)

(8)UART MODEM状态寄存器(UMSTATn)

(9)UART发送缓存寄存器(UTXHn)

(10)UART接收缓存寄存器(URXHn)

(11)UART波特率除数寄存器(UBRDIVn)

10.5.1UART线性控制寄存器

UART LINE CONTROL REGISTER(ULCONn)

寄存器地址读写描述复位值ULCON00x50000000R/W UART通道0线性控制寄存器0x00 ULCON10x50004000R/W UART通道1线性控制寄存器0x00 ULCON20x50008000R/W UART通道2线性控制寄存器0x00

ULCONn位描述初始值Reserved[7]0 Infrared Mode[6]决定是否使用红外模式

0=正常模式操作

1=红外接收发送模式

Parity Mode[5:3]在UART发送接收操作中定义奇偶码的生成和检

000

验类型

0xx=No parity

100=Odd parity

101=Even parity

110=Parity forced/checked as1

111=Parity forced/checked as0

0 Number of Stop Bit[2]定义度搜按个停止位用于帧末信号

0=每帧一个停止位

1=每帧两个停止位

Word Length[1:0]指出发送接收每帧的数据位数

00

00=5-bits01=6-bits

10=7-bits11=8-bits

10.5.2UART控制寄存器

UART CONTROL REGISTER(UCONn)

寄存器地址读写描述复位值UCON00x50000004R/W UART通道0控制寄存器0x00

UCON10x50004004R/W UART通道1控制寄存器0x00

UCON20x50008004R/W UART通道2控制寄存器0x00

UCONn位描述初始值FCLK divider[15:12]当UART时钟源选为FCLK/n时的分频器值。

n由UCON0[15:12],UCON1[15:12],UCON2[14:12]来决

定。

UCON2[15]是FCLK/n时钟使能位。

设置n从7到21,使用UCON0[15:12],

设置n从22到36,使用UCON1[15:12],

设置n从37到43,使用UCON2[14:12],

UCON2[15]:

0=无效FCLK/n时钟1=使能FCLK/n时钟

对于UCON0,UART时钟=FCLK/(divider+6),其

divider>0,UCON1,UCON2必须为0。

ex)1:UART clock=FCLK/7,2:UART clock=FCLK/8

3:UART clock=FCLK/9,…,15:UART clock=FCLK/21

对于UCON1,UART时钟=FCLK/(divider+21),其

divider>0,UCON0,UCON2必须为0

ex)1:UART clock=FCLK/22,2:UART clock=FCLK/23

3:UART clock=FCLK/24,…,15:UART clock=FCLK/36

对于UCON2,UART时钟=FCLK/(divider+36),其

divider>0,UCON0,UCON1必须为0.

ex)1:UART clock=FCLK/37,2:UART clock=FCLK/38

3:UART clock=FCLK/39,…,7:UART clock=FCLK/43

如果UCON00/1[15:12]和UCON2[14:12]都是0,分频器为

44,t则UART时钟=FCLK/44

总的除数范围是从7到44。

0000

Clock Selection [11:10]为波特率选择PCLK,UEXTCLK或FCLK/n。

UBRDIVn=(int)(selected clock/(baudrate x16))–1

00,10=PCLK,01=UEXTCLK,11=FCLK/n

(如果你选择FCLK/n,你应该在选择或取消选择FCLK/n加上

注释代码)

Tx Interrupt

Type [9]发送中断请求类型

0=Pulse(在非FIFO模式下一旦发送缓存变空或在FIFO模

式下发送缓存达到发送FIFO触发水平,则中断请求)

1=Level(当非FIFO模式下发送缓存变空或在FIFO模式下发

送缓存达到发送FIFO触发水平,则中断请求)

Rx Interrupt

Type [8]接收中断请求类型

0=Pulse(在非FIFO模式下一旦接收缓存接收到数据,或在

FIFO模式下,发送缓存达到发送FIFO触发水平,则中断请求)

1=Level(在非FIFO模式下接收缓存接收数据,或在FIFO模式下发送缓存达到发送FIFO触发水平,则中断请求)

Rx Time Out Enable [7]在UART FIFO有效时,使能接收超时中断。该中断是一个接

收中断。

0=无效1=有效

Rx Error Status Interrupt Enable [6]使能UART对异常产生中断,例如在接收期间终止信号,帧

错误,奇偶校验错误和溢出错误。

0=不产生接收错误状态中断

1=产生接收错误状态中断.

Loopback Mode [5]对该位置位将引起UART进入回送模式。该模式仅用于测试

目的。

0=正常操作1=回送模式

Send Break Signal [4]对该位置位将引起UART在一个帧时间内发送一个终止信

号。在发送终止信号后该位自动清零。

0=正常发送1=发终止信号

Transmit Mode [3:2]决定哪种功能用来写数据到UART发送缓存寄存器(UART

Tx Enable/Disable)。

00=无效

01=中断请求或查询模式

10=DMA0请求(仅对UART0),

DMA3请求(仅对UART2)

11=DMA1请求(仅对UART1)

00

Receive Mode [1:0]决定哪种功能用来读取UART接收缓存寄存器中的数据

(UART Rx Enable/Disable)。

00=无效

01=中断请求或查询模式

10=DMA0请求(Only for UART0),

DMA3请求(Only for UART2)

11=DMA1请求(Only for UART1)

00

10.5.3UART FIFO控制寄存器

UART FIFO CONTROL REGISTER(UFCONn)

寄存器地址读写描述复位值UFCON00x50000008R/W UART通道0FIFO控制寄存器0x00 UFCON10x50004008R/W UART通道1FIFO控制寄存器0x00 UFCON20x50008008R/W UART通道2FIFO控制寄存器0x00

UFCONn位描述初始值Tx FIFO Trigger Level[7:6]决定发送FIFO的触发等级

00

00=Empty01=16-byte

10=32-byte11=48-byte

Rx FIFO Trigger Level[5:4]决定接收FIFO的触发等级

00

00=1-byte01=8-byte

10=16-byte11=32-byte

Reserved[3]0 Tx FIFO Reset[2]在重置FIFO后自动清除

0=Normal1=Tx FIFO reset

Rx FIFO Reset[1]在重置FIFO后自动清除

0=Normal1=Rx FIFO reset

FIFO Enable[0]0=Disable1=Enable0

10.5.4UART MODEM 控制寄存器

UART MODEM CONTROL REGISTER (UMCONn )

10.5.5UART 接收发送状态寄存器

UART TX/RX STATUS REGISTER (UTRSTATn )

寄存器

地址

读写描述

复位值

UMCON00x5000000C R/W UART 通道0MODEM 控制寄存器0x0UMCON10x5000400C R/W UART 通道1MODEM 控制寄存器

0x0

保留

0x5000800C

---UMCONn

描述

初始值Reserved

[7:5]这些位必须为0000Auto Flow Control (AFC)[4]0=无效1=有效0Reserved

[3:1]这些位必须为0

000Request to Send

[0]

如果AFC 位有效,则该值被忽略。在这种情况下S3C2440A 将自动控制nRTS 。

如果AFC 位无效,nRTS 必须由软件控制。

0='H'level (去激活nRTS)1='L'level (激活nRTS)

寄存器

地址

读写描述

复位值

UTRSTAT00x50000010R/W UART 通道0接收发送状态寄存器0x00UTRSTAT10x50004010R/W UART 通道1接收发送状态寄存器0x00UTRSTAT2

0x50008010

R/W

UART 通道2接收发送状态寄存器

0x00

UTRSTATn 位

描述

初始值

Transmitter empty

[2]

当发送缓存寄存器中没有有效值且发送移位寄存器空,则自动置1。0=非空

1=发送器空(发送缓存和移位寄存器)1

Transmit buffer empty

[1]当发送缓存寄存器为空,则自动置于10=发送缓存寄存器不为空1=发送缓存寄存器

为空

(在非FIFO 模式下,中断或DMA 被请求。在FIFO 模式下当发送FIFO 触发等级设为00(空)时,中断或DMA 被请求)

如果UART 使用FIFO ,用户应该检查寄存器UFSTAT 中的Tx FIFO Coun 位和Tx FIFO Full 位取代对此位的检查。

1

Receive buffer data ready

[0]

只要接收缓存寄存器保留通过RXDn 端口接收的有效值,则自动置1。

0=缓存寄存器为空1=缓存寄存器接收到数据

(在非FIFO 模式下,请求中断或DMA)

如果UART 使用FIFO ,用户应该在UFSTAT 中的Rx FIFO Count 位和Rx FIFO Full 位取代对此位的检查。

10.5.6UART 错误状态寄存器

UART ERROR STATUS REGISTER (UERSTATn )

10.5.7UART FIFO 状态寄存器

UART FIFO STATUS REGISTER (UFSTATn)

寄存器

地址

读写描述

复位值

UERSTAT00x50000014R/W UART 通道0错误状态寄存器0x00UERSTAT10x50004014R/W UART 通道1错误状态寄存器0x00UERSTAT2

0x50008014

R/W UART 通道2错误状态寄存器

0x00

UTRSTATn 位

描述

初始值

Break Detect

[3]

自动置1来指出一个终止信号已发出0=No break receive

1=Break receive (已请求中断)

Frame Error [2]只要在接收操作中帧错误出现则自动置10=接收过程中无帧错误1=帧错误(已请求中断)

Parity Error [1]只要在接收操作中出现奇偶校验错误则自动置10=接受过程中无奇偶校验错误1=奇偶校验错误(已请求中断)

Overrun Error [0]只要在接收过程中出现溢出错误则自动置10=接收过程中无溢出错误1=溢出错误(已请求中断)

寄存器

地址

读写描述

复位值

UFSTAT00x50000018R/W UART 通道0FIFO 状态寄存器0x00UFSTAT10x50004018R/W UART 通道1FIFO 状态寄存器0x00UFSTAT2

0x50008018

R/W UART 通道2FIFO 状态寄存器

0x00

UFSTATn 位

描述

初始值

Reserved [15]0Tx FIFO Full

[14]

只要在接收操作中接收FIFO 满,则自动置1。0=0-byte ≤ Tx FIFO data ≤ 63-byte 1=Full

Tx FIFO Count [13:8]发送FIFO 中的数据数量

0Reserved [7]0Rx FIFO Full [6]

只要在接收操作中接收FIFO 满,则自动置1。0=0-byte ≤ Rx FIFO data ≤ 63-byte 1=Full

Rx FIFO Count [5:0]接收FIFO 中的数据数量

10.5.8UART MODEM 状态寄存器

UART MODEM

STATUS REGISTER (UMSTATn )

10.5.9UART 发送缓存寄存器

UART TRANSMIT BUFFER REGISTER (HOLDING REGISTER &FIFO REGISTER)

寄存器

地址

读写描述

复位值

UFSTAT00x5000001C R/W UART 通道0MODEM 状态寄存器0x00UFSTAT10x5000401C R/W UART 通道1MODEM 状态寄存器0x00保留

0x5000801C

R/W

保留

-

UMSTATn 位

描述

初始值

Delta CTS

[4]

Indicate that the nCTS input to the S3C2440A has changed state since the last time it was read by CPU.(参考图11-8.)0=未变

1=已变

Reserved [3:1]0

Clear to Send [0]

0=CTS 信号未激活(nCTS 引脚为高电平)1=CTS 信号激活(nCTS 引脚为低电平)

寄存器

地址

读写描述

复位值

UTXH00x50000020(L)0x50000023(B)W (byte )

UART 通道0发送缓存寄存器-

UTXH10x50004020(L)0x50004023(B)W (byte )

UART 通道1发送缓存寄存器-UTXH2

0x50008020(L)0x50008023(B)W (byte )

UART 通道2发送缓存寄存器

-

UTXHn 位

描述初始值

TXDATAn

[7:0]

UARTn 的发送数据

-

10.5.10UART 接收缓存寄存器

UART RECEIVE BUFFER REGISTER (HOLDING REGISTER &FIFO REGISTER)

10.5.11UART 波特率除数寄存器

UART BAUD RATE DIVISOR REGISTER (UBRDIVn )

在UART 模块中有三个UART 波特率除数寄存器UBRDIV0,UBRDIV1和UBRDIV2。存储在波特率除数寄存器UBRDIVn 中的值用于决定串行发送接收时钟率(波特率)如下:

UBRDIVn =(int)(UART clock /(buad rate x 16))–1(UART clock:PCLK,FCLK/n or UEXTCLK)

UBRDIVn 应该从1到(216-1),仅当使用小于PCLK 的UEXTCLK 时可以设为0。例如如果波特率为115200bps 且UART 时钟为40MHz ,UBRDIVn 是:

UBRDIVn =(int)(40000000/(115200x 16))-1=(int)(21.7)-1[round to the nearest whole number]=22-1=21

寄存器

地址

读写描述

复位值

URXH00x50000024(L)0x50000027(B)R (byte )

UART 通道0接收缓存寄存器-

URXH10x50004024(L)0x50004027(B)R (byte )

UART 通道1接收缓存寄存器-URXH2

0x50008024(L)0x50008027(B)R (byte )

UART 通道2接收缓存寄存器

-

URXHn 位

描述初始值

RXDATAn

[7:0]

UARTn 的接收数据

-

寄存器

地址

读写描述

复位值

UBRDIV00x50000028R/W 波特率除数寄存器0-

UBRDIV10x50004028R/W 波特率除数寄存器1-UBRDIV2

0x50008028

R/W 波特率除数寄存器2

-

UBRDIVn 位

描述

初始值

UBRDIV

[15:0]

波特率分频值UBRDIVn >0

使用UEXTCLK 作为输入时钟,UBRDIVn 可以置0

-

相关文档