2024年1月21日发(作者:)

18章 DUART

本章介绍MPC8394E的两个通用异步接收器/发送器(UART universal asynchronous

receiver/transmitter)。介绍其功能操作、DUART的初始化步骤、以及DUART寄存器的编程细节和特性。

18.1 概述

DUART包括两个通用异步接收器/发送器(UART)。这两个UART独立工作。本章所有UART相关的讨论都是针对其中一个接收器/发送器而言的。各UART通过系统时钟进行时钟同步。DUART编程模型和PC16552D兼容。

UART为点对点接口,即只能够把两个UART设备连到连接信号上。如图18-1所示,每个UART模块的组成如下:

 接收和发送缓冲区

 用于数据流控制的清除发送输入端口(CTS)和请求发送输出端口RTS

 用于产生波特率的16位计数器

 中断控制逻辑

图18-1 UART结构图

18.1.1 特性

DUART包括以下特性:

 全双工操作。

 可编程模式,兼容原来的PC16450UART和PC16550D(能工作在FIFO模式下的

PC16450改进版本)。

PC16450寄存器复位值。

用于发送器和接收器的FIFO模式,提供16字节的FIFO。

采用标准的异步通信位(START、STOP和奇偶校验)封装和解封串行数据。

可屏蔽发送、接收、线路状态和MODEM状态中断。

软件可编程的波特率发生器,将系统时钟用1到(216-1)分频,为发送器和接收器引擎生成16倍时钟。

 清除发送CTS和发送就绪RTSMODEM控制功能。

 软件可选择的串行数据格式(数据长度、奇偶校验、1/1.5/2停止位、波特率)。

 线路和MODEM状态寄存器。

 线路断开(Line-break)检测和产生。

 内部诊断支持、本地环路和断开功能。

 具有优先级的中断报告。

 过载、奇偶校验和帧错误检测。

18.1.2 操作模式

信道提供一个全双工的异步发送器和接收器,使用源自系统时钟的操作频率。

发送器接收写入发送器保持寄存器(UTHR)的并行数据。在FIFO模式下,将数据直接放入发送器FIFO的内部发送器移位寄存器中。发送器将数据转换成串行位流,插入START、STOP和可选的奇偶校验位。最后将打包好的串行数据流输出到信道发送器串行数据输出信号线(SOUT)。可以轮询或中断驱动发送器状态。

接收器接收信道接收器串行数据输入信号线(SIN)的串行数据位,将它们转换成并行格式,检测START位、奇偶校验位(如果有的话)和STOP位,将组装好的字符(去掉了START、STOP和奇偶校验位)从UART的接收器缓冲区(或FIFO)传输进来,以响应接收器缓冲寄存器读操作。可以轮询或中断驱动接收器状态。

18.2 外部信号说明

本节包括信号概述及详细信号说明。

18.2.1 信号概述

表18-1汇总了DUART信号。注意,尽管实际设备的信号名称常带有如表所示的前缀“UART_”,但本章一般采用功能(缩写的)信号名称。

表18-1 DUART信号概述

信号名称

UART_SIN[1:2]

UART_SOUT[1:2]

I/O

I

O

I

O

引脚数 复位值

2

2

2

2

1

1

1

1

18.2.2 详细信号说明

状态含义

串行输入数据UART1和UART2

串行输出数据UART1和UART2

清除发送UART1和UART2

请求发送UART1和UART2

UART_CTS[1:2]

UART_RTS[1:2]

DUART信号的详细说明见表18-2。

表18-2 DUART详细信号说明

信号

UART_SIN[1:2]

I/O

I

说明

串行数据输入。在UART1和UART2的接收器上通过各自的串行数据输入信号接收数据,先接收最低有效位。

状态

含义

时序

UART_SOUT[1:2] O

有效/无效 - 代表正在UART接口上接收的数据。

有效/无效 - 一个内部逻辑采样信号,rxcnt,利用波特率发生器的频率在SIN上采样数据。

串行数据输出。当发送器禁用、空闲或在本地回送模式操作时,置位UART1和UART2(标记状态)的串行输出数据信号。将数据从这些信号移出,先发送最低有效位。

状态

含义

时序

有效/无效 - 代表在各自UART接口上发送的数据。

有效/无效 - 一个内部逻辑采样信号,rxcnt,利用波特率发生器的频率更新并且驱动SOUT上的数据。

UART_CTS[1:2]

I

清除发送。分别连接到总线上其他UART设备的RTS输出。可以设定在信号状态变化时产生中断。

状态

含义

时序

有效/无效 - 代表各自UART清除发送的状态。

有效/无效 - 在每个系统时钟的上升沿采样。

UART_RTS[1:2]

O

请求发送。可以由接收器或发送器设定为自动有效和无效。当连接到发送器的CTS输入时,可以使用这个信号控制串行数据流。

状态

含义

时序

有效/无效 - 代表正在各自UART发送的数据。

有效/无效 - 在每个系统时钟的上升沿更新和驱动。

18.3 内存映射/寄存器定义

有两套完整的DUART寄存器集合(一套为UART1服务,一套为UART2服务)。这两个UART完全相同,只是UART1的寄存器偏移地址在0x0_4500(本地),UART2的寄存器偏移地址在0x0_4600(本地)。在本章中,寄存器用单词首字母缩写的符号来表示,例如LCR表示UART1和UART2的线路控制寄存器。

每个UART接口中的寄存器均用于配置、控制和状态。分频系数锁存器访问位,ULCR[DLAB],用来访问分频系数锁存的低位和高位寄存器和备用功能寄存器。有关ULCK[DLAB]的更多信息参见18.3.1.7节“线路控制寄存器(ULCK1 和ULCR2)”。

所有DUART寄存器均只有1个字节宽,因此读写这些寄存器都必须是字节宽度的操作。表18-3提供了寄存器汇总,以及包含每个寄存器详细信息的节和页的参考。0x4000-0x4FFF

中未定义的字节地址空间是保留的。

表18-3 DUART寄存器汇总表

偏移 寄存器 访问

R

W

R/W

R/W

R/W

R

W

R/W

R/W

R/W

R

R

R/W

R

R

W

R/W

R/W

R/W

R

复位值

0x00

0x00

0x00

0x00

0x00

0x01

0x00

0x00

0x00

0x00

0x60

0x00

0x00

0x01

0x00

0x00

0x00

0x00

0x00

0x01

节/页

18.3.1.1/18-6

18.3.1.2/18-6

18.3.1.3/18-7

18.3.1.4/18-8

18.3.1.3/18-7

18.3.1.5/18-9

18.3.1.6/18-10

18.3.1.12/18-16

18.3.1.7/18-11

18.3.1.8/18-13

18.3.1.9/18-13

18.3.1.10/18-15

18.3.1.11/18-15

18.3.1.13/18-16

18.3.1.1/18-6

18.3.1.2/18-6

18.3.1.3/18-7

18.3.1.4/18-8

18.3.1.3/18-7

18.3.1.5/18-9

0x0_4500

URBR-ULCR[DLAB] = 0 UART1

接收器缓冲寄存器

UTHR-ULCR[DLAB] = 0 UART1

发送器保持寄存器

UDLB-ULCR[DLAB] = 1 UART1

分频器低有效字节寄存器

0x0_4501

UIER-ULCR[DLAB] = 0 UART1

中断允许寄存器

UDMB-ULCR[DLAB] = 1 UART1

分频器高有效字节寄存器

0x0_4502

UIIR-ULCR[DLAB] = 0 UART1

中断ID寄存器

UFCR-ULCR[DLAB] = 0 UART1

FIFO控制寄存器

UAFR-ULCR[DLAB] = 1 UART1

备用功能寄存器

0x0_4503

ULCR-ULCR[DLAB] = x UART1

线路控制寄存器

0x0_4504

UMCR-ULCR[DLAB] = x UART1

MODEM控制寄存器

0x0_4505

ULSR-ULCR[DLAB] = x UART1

线路状态寄存器

0x0_4506

UMSR-ULCR[DLAB] = x UART1

MODEM状态寄存器

0x0_4507

USCR-ULCR[DLAB] = x UART1

临时寄存器(用于测试读写操作)

0x0_4510

UDSR-ULCR[DLAB] = x UART1

DMA状态寄存器

0x0_4600

URBR-ULCR[DLAB] = 0 UART2

接收器缓冲寄存器

UTHR-ULCR[DLAB] = 0 UART2

发送器保持寄存器

UDLB-ULCR[DLAB] = 1 UART2

分频器最低有效字节寄存器

0x0_4601

UIER-ULCR[DLAB] = 0 UART2

中断允许寄存器

UDMB-ULCR[DLAB] = 1 UART2

分频器最高有效字节寄存器

0x0_4602

UIIR-ULCR[DLAB] = 0 UART2

中断ID寄存器

UFCR-ULCR[DLAB] = 0 UART2

FIFO控制寄存器

UAFR-ULCR[DLAB] = 1 UART2

备用功能寄存器

0x0_4603

ULCR-ULCR[DLAB] = x UART2

线路控制寄存器

0x0_4604

UMCR-ULCR[DLAB] = x UART2

MODEM控制寄存器

0x0_4605

ULSR-ULCR[DLAB] = x UART2

线路状态寄存器

0x0_4606

UMSR-ULCR[DLAB] = x UART2

MODEM状态寄存器

0x0_4607

USCR-ULCR[DLAB] = x UART2

临时寄存器

0x0_4610

UDSR-ULCR[DLAB] = x UART2

DMA状态寄存器

W

R/W

R/W

R/W

R

R

R/W

R

0x00

0x00

0x00

0x00

0x60

0x00

0x00

0x01

18.3.1.6/18-10

18.3.1.12/18-16

18.3.1.7/18-11

18.3.1.8/18-13

18.3.1.9/18-13

18.3.1.10/18-15

18.3.1.11/18-15

18.3.1.13/18-16

18.3.1 寄存器说明

下面几节介绍UART1和UART2的寄存器。

18.3.1.1 接收器缓冲寄存器(URBR1和URBR2)

这些寄存器包含接收到的来自UART总线上的数据。在FIFO模式下,读时返回接收到的第一个字节。关于FIFO状态信息,参看UDSR[RXRDY]的说明。

除了过载情况外,URBR按接收顺序返回数据。参看18.3.1.9节“线状态寄存器(ULSR1和ULSR2)”中的ULSR[OE]说明。图18-2显示了接收器缓冲寄存器。注意,这些寄存器和UTHR具有相同的偏移。

图18-2 接收器缓冲寄存器(URBR1和URBR2)

表18-4说明了URBR。

表18-4 URBR字段说明

0-7

名字

DATA

说明

从UART总线上收到的数据[只读]

18.3.1.2 发送器保持寄存器(UTHR1和UTHR2)

写这些8位寄存器引起UART设备以ULCR(线路控制寄存器)中配置的格式在UART总线上传输5到8个数据位。在FIFO模式下,写入UTHR的数据被放入FIFO。写入UTHR的数据是送到UART总线上的数据,并且写入UTHR的第一个字节就是送到总线上的第一个字节。UDSR[TXRDY]指示何时FIFO满了。参见表18-21和表18-22。

图18-3显示了UTHR中的位。

图18-3 发送器保持寄存器(UTHR1和UTHR2)

表18-5说明了UTHR。

表18-5 UTHR字段说明

0-7

名字

DATA

说明

写入UTHR的数据 [只写]

18.3.1.3 分频器高位和低位有效字节寄存器(UDMB和UDLB)

UDLB和分频器高有效字节寄存器(UDMB)连接在一起构成分频器,用来实现DUART输入时钟的分频。波特率发生器的输出频率为波特率的16倍,因此期望的波特率=平台时钟频率/(16x[UDMB||UDLB])。等价的,[UDMB||UDLB||0b0000]=平台时钟频率/期望的波特率。可以通过特定的输入时钟频率产生的波特率如表18-8所示。

图18-4显示了UDMB的位。

表18-4 分频器高字节寄存器(UDMB1和UDMB2)

表18-6说明了UDMB。

表18-6 UDMB字段说明

0-7

名字

UDMB

说明

分频器高有效字节

图18-5显示了UDLB的位。

表18-5 分频器低有效字节寄存器(UDLB1和UDLB2)

表18-7说明了UDLB。

表18-7 UDLB字段说明

0-7

表18-8给出了不同输入时钟频率的波特率。

表18-8 波特率示例

波特率

(十进制)

分频器

十进制 十六进制

输入时钟

(系统时钟)

频率

(MHz)

266

266

266

266

266

266

333

333

333

333

333

333

误差百分数

(十进制)

名字

UDLB

说明

分频器最低有效字节。它和UDMB连接在一起。

9,600

19,200

38,400

56,000

128,000

256,000

96,00

19,200

38,400

56,000

128,000

256,000

1736

868

434

298

130

65

2170

1085

543

372

163

81

6C8

364

1B2

12A

82

41

87A

43D

21F

174

A3

51

0.0064

0.0064

0.0064

0.1280

0.1600

0.1600

0.0064

0.0064

0.0858

0.0064

0.1472

0.4672

为了得到误差百分数,执行以下三个步骤:

1.将输入时钟频率(ICF)除以实际频率输入(AFI),得到正确的除数值(ICF/AFI,这里AFI=波特率X16)。

2.将除数值减去1。

3.将第2步的结果乘以100,计算出最终的百分数错误。结果取绝对值(没有负数)。

上述三步可以用下面的等式来表示:

百分数错误值=(1-AFI/ICF)x100

18.3.1.4 中断允许寄存器(UIER1和UIER2)

UIER使用户可以屏蔽到MPC8349E可编程中断控制器(PIC)的特定UART中断。

图18-6显示了UIER的位。

图18-6 中断允许寄存器(UIER1和UIER2)

表18-9说明了UIER的字段。

表18-9 UIER字段说明

0-3

4

名字

EMSI

说明

保留

允许MODEM状态中断

0 屏蔽UMSR[DCTS]置位时引起的中断。

1 在UMSR[DCTS]改变状态时,允许并宣告中断。

允许接收器线路状态中断

0 屏蔽对ULSR过载位、奇偶校验位、帧格式错误位或断开中断位置位时产生的中断。

1 在ULSR过载位、奇偶校验位、帧格式错位或断开中断置位时,允许并宣告中断。

允许发送器保持寄存器空中断

0 屏蔽由ULSR[THRE]置位时引起的中断。

1 当ULSR[THRE]置位时,允许并宣告中断。

允许接收数据可用中断

0 屏蔽新的接收数据可用或接收数据超时时的中断。

1 当从外部设备接收了新的数据字符和/或在FIFO模式下发生超时中断时,允许并宣告中断。

5 ERLSI

6 ETHREI

7 ERDAI

18.3.1.5 中断ID寄存器(UIIR1和UIIR2)

UIIR指示来自相应UART的中断挂起以及什么类型的中断是活动的。它们还指示FIFO是否被允许。

DUART将中断分成四个优先级,并将它们记录到对应的UIIR中。按优先顺序的四级中断条件如下:

 接收器线路状态

 接收数据就绪/字符超时

 发送器数据保持寄存器空

 MODEM状态

更加详细的说明见表18-11。

在读取UIIR时,相关的DUART串行信道冻结所有中断并指示挂起的最高优先级中断。在出现读事务时,相关的DUART串行信道记录新中断,但不改变UIIR的内容,直到读访问完成。

图18-7显示了UIIR的位。

图18-7 中断ID寄存器(UIIR1和UIIR2)

表18-10说明了UIIR的字段。

表18-10 UIIR字段说明

0-1

2-3

4

名字

FE

IID3

保留

中断ID位,标识表18-11中说明的尚未处理的最高优先级的中断。仅当FIFO模式的超时中断挂起时才将IID3和IID2一起置位。

中断ID位,标识表18-11中说明的尚未处理的最高优先级的中断。

IID0指示有中断挂起

0 UART有一个活动中断等待服务。

1 没有挂起的中断。

说明

FIFO允许。反映UFCR[FEN]的设置。

5-6

7

IID2-IID1

IID0

UIIR寄存器包含的位的说明见表18-11。

表18-11 UIIR IID位汇总

IID3-IID0

0001

0110

0100

优先级

最高

第二

接收器线路状态

收到的数据可用

中断类型

过载错、奇偶校验错、帧格式错或断开中断。

FIFO模式下接收的数据可用或达到触发水平。

中断说明 如何复位中断

读线路状态寄存器

读接收器缓冲寄存器或接收器FIFO中的字节数目降到触发水平以下。

读接收器缓冲寄存器

1100

第二 字符超时 在最近的四个字符时间内没有字符送入或者移出接收器FIFO,并且在接收器FIFO

中至少有1个字符。

0010

0000

第三

第四

UTHR空

MODEM状态

发送器保持寄存器空。

自上一次读UMSR以来读UIIR或者写UTHR

读UMSR

CTS输入值发生了变化。

18.3.1.6 FIFO控制寄存器(UFCR1和UFCR2)

UFCR用于允许和清除接收器和发送器FIFO,设置接收器FIFO触发水平以控制接收数据可用中断,以及选择DMA信号的类型。

只能在置位FIFO允许位的时候才可以设定UFCR位。当FIFO模式变成16450模式(非FIFO模式)时,自动从FIFO中清除数据。反之亦然。

在清除了接收器FIFO中所有数据之后,并不清除接收器内部移位寄存器。同样的,清除了发送器FIFO中的字节后并不清除发送器内部移位寄存器。TFR和RFR都是自清除的。

图18-8显示了UFCR的位。

图18-8 FIFO控制寄存器(UFCR1和UFCR2)

表18-12说明了UFCR的字段。

表18-12 UFCR字段说明

0-1

名字

RTL

说明

接收器触发水平。当UIER[ERDAI] 置位且接收器FIFO中的字节数目等于RTL值时,产生接收数据可用中断。

00 1字节

01 4字节

10 8字节

11 14字节

保留

DMA模式选择。参看18.4.5.2节“DMA模式选择”。

0 UDSR[RXRDY]和UDSR[TXRDY]位为模式0

1 如果UFCR[FEN]=1,则UDSR[RXRDY]和UDSR[TXRDY]位为模式1

发送器FIFO复位。

0 无动作

1 清除发送器FIFO中的所有字节,并将FIFO计数器/指针复位为0。

接收器FIFO复位

2-3

4

DMS

5 TFR

6 RFR

0 无动作

1 清除接收器FIFO中的所有字节,并将FIFO计数器/指针复位为0。

7 FEN

FIFO允许

0 禁止并清除FIFO

1 允许发送器和接收器FIFO

18.3.1.7 线路控制寄存器(ULCR1 和 ULCR2)

ULCR规定UART总线的数据格式并且设置分频器锁存访问位ULCR[DLAB],分频器锁存访问位控制访问分频锁存高有效位和低有效位寄存器以及备用功能寄存器。

初始化ULCR后,当UART总线上活动时,软件不能重写ULCR。只有当收到最后停止(STOP)位并且总线上不再有新字符传输时,软件才能重写ULCR。

固定(stick)校验位,ULCR[SP],为UART总线上发送的奇偶位时间槽分配一个固定奇偶值。固定值定义为标记(mark)奇偶(逻辑1)或空(space)奇偶(逻辑0)。ULCR[PEN]和ULCR[EPS]帮助确定固定奇偶值。参看表18-14。ULCR[NSTB]定义在数据传输结束时所有发送的停止位的个数。接收器仅检测第一个停止位,而不管所选择的停止位的数目。字长度选择位(1和0)定义发送或接收的一个串行字符的数据位数目。字长度不包括起始位(START),奇偶校验位和停止位(STOP)。

图18-9显示了ULCR的位。

图18-9 线路控制寄存器(ULCR1 和 ULCR2)

表18-13说明了ULCR的字段。

表18-13 ULCR字段说明

0

名字

DLAB

说明

分频器锁存访问位

0 访问除UDLB、UAFR和UDMB以外的所有寄存器。

1 可以访问UDMB、UDLB和UAFR。

设置断开。

0 发送正常UTHR数据到SOUT信号。

1 强制SOUT信号为逻辑0。不影响UTHR中的数据。

固定奇偶

0 禁止固定奇偶。

1 如果PEN=1和EPS=1,选择空(space)奇偶;如果PEN=1和EPS=0,选择标记(mark)奇偶。

偶校验选择。参看表18-14。

0 如果PEN=1和SP=0,选择奇校验。

1 如果PEN=1和SP=0,选择偶校验。

1 SB

2 SP

3 EPS

4 PEN

允许奇偶校验

0 不产生和校验奇偶。

1 为发送器时产生奇偶位,为接收器时校验奇偶。

停止位(STOP)数目

0 在传输的数据中产生一个停止位。

1 当选择5位数据长度时,产生1 1/2停止位。当选择6、7或者8位字长度时,产生2个停止位。

字长度选择。组成字符长度的位数。

00 5位

01 6位

10 7位

11 8位

5 NTSB

6-7 WLS

表18-14 使用ULCR[PEN]、ULCR[SP]和ULCR[EPS]选择奇偶

PEN

0

0

0

0

1

1

1

1

SP

0

0

1

1

0

0

1

1

18.3.1.8 MODEM控制寄存器(UMCR1和UMCR2)

UMCR控制与UART总线上的外部设备的接口,如图18-10所示。

EPS

0

1

0

1

0

1

0

1

选择校验

无奇偶

无奇偶

无奇偶

无奇偶

奇奇偶

偶奇偶

标记(Mark)奇偶

空(Space)奇偶

图18-10 MODEM控制寄存器(UMCR1和UMCR2)

表18-15说明了UMCR字段。

表18-15 UMCR字段说明

0-2

3

名字

LOOP

保留,应清除

本地回送模式

0 正常操作

1 工作时,可以从同一个UART的URBR中读取写入UTHR说明

的数据,UMCR[RTS]和UMSR[CTS]连接在一起

4-5

6

RTS

保留

发送就绪

0 使对应的/UART_RTS输出无效。

1 使对应的/UART_RTS输出有效。通知外部MODEM或外围设备UART已经准备好发送/接收数据。

保留

7

18.3.1.9 线路状态寄存器(ULSR1和ULSR2)

ULSR监控UART总线上的数据传输状态,如图18-11所示。为了从通过UART总线接收的正确字符中分离出状态位,软件应先读ULSR再读URBR。

图18-11 线路状态寄存器(ULSR1和ULSR2)

表18-16说明了ULSR的字段。

表18-16 ULSR字段说明

0

名字

RFE

说明

接收器FIFO错误

0 当接收器FIFO无错或者读ULSR时没有遗留的接收器FIFO错时清除。

1 接收器FIFO中的一个字符遇到错误(帧格式、奇偶校验或者断开中断)时置位。

发送器空

0 UTHR或内部发送器移位寄存器有数据字符。在FIFO模式下,发送器FIFO或内部发送器移位寄存器中有数据字符。

1 UTHR和内部发送移位寄存器都为空。在FIFO模式下,发送器FIFO和内部发送器移位寄存器都为空。

发送器保持寄存器空

0 UTHR非空

1 已经将数据字符从UTHR传输到内部发送器移位寄存器。在FIFO模式下,发送器FIFO内没有数据字符。

断开中断

0 在读ULSR或在检测到有效数据传输时(即收到停止位)清除。

1 收到逻辑0的时长超过起始位+数据位+校验位+1个停止位的时长。在SIN返回到标记状态(逻辑1)并且检测到有效起始位(START)之后才装入新字符。在FIFO模式下,会在1 TEMT

2 THRE

3 BI

FIFO中遇到零字符(零字符在FIFO顶部)。在FIFO模式下,仅存储零字符。

4 FE

帧格式错误

0 在读ULSR或将新字符从接收器移位寄存器装入URBR时清除。

1 接收数据的停止位错误(仅检查第一个停止位)。在FIFO模式下,当在FIFO中遇到检测到帧格式错的字符时(即该字符在FIFO顶部)置位FE。遇到帧格式错误后需要重新同步。UART假定帧格式错(当希望读到逻辑1(停止位)时却读到逻辑0)是因为停止位覆盖了下一个起始位,因此它认为该逻辑0采样是一个真的起始位,之后就接收后续的新数据。

奇偶校验错误

0 在读ULSR时或将新字符装入URBR时清除。

1 在接收数据时检测到不期望的奇偶校验值。在FIFO模式下,带有错误的字符位于FIFO顶部。

过载错误

0 读ULSR时清除。

1 读URBR之前,它被新字符覆盖。旧字符丢失。在FIFO模式下,接收器FIFO满(不考虑接收器FIFO触发水平),且已将新字符接收到内部接收器移位寄存器。旧字符被新字符覆盖。接收器FIFO中的数据未被覆盖。

数据就绪

0 在读URBR时或读取了接收器FIFO中的所有数据时清除。

1 在URBR或接收器FIFO中收到字符。

5 PE

6 OE

7 DR

18.3.1.10 MODEM状态寄存器(UMSR1 和UMSR2)

UMSR跟踪为对应UART设置的MODEM(或外部设备)的CTS状态,如图18-12所示。

图18-12 MODEM状态寄存器(UMSR1 和UMSR2)

表18-17说明了UMSR的字段。

表18-17 UMSR字段说明

位 名字 说明

0-2

3

CTS

保留,应清除。

清除发送。代表来自外围设备的CTS输入引脚的相反值。

0 对应CTSn无效。

1 对应CTSn有效。MODEM或者外设准备好数据传输。

4-6

7

DCTS

保留,应清除。

Delta清除发送

0 自从上一次读UMSR[CTS]之后,对应的CTSn信号无变化。

1 自从上一次读UMSR[CTS] 之后,对应的CTSn信号有变化。如果置位UIER[EMSI]检测该状态,则会引起中断。

18.3.1.11 中间结果寄存器(USCR1 和USCR2)

USCR用于调试软件或者DUART硬件,如图18-13所示。USCR不影响DUART的操作。

图18-13 中间结果寄存器(USCR)

表18-18说明了USCR的字段。

表18-18 USCR字段说明

0-7

名字

DATA

18.3.1.12 备用功能寄存器(UAFR1和UAFR2)

UAFR如图18-14所示,允许软件使用同一个写操作同时写UART1和UART2的寄存器。UAFR还提供了用于设备性能监控的方法,以记录波特时钟。

说明

数据

图18-14 备用功能寄存器(UAFR)

表18-19说明了UAFR的字段。

表18-19 UAFR字段说明

0-5

6

名字

BO

保留

波特时钟选择

0 波特时钟不是门控时钟信号

1 波特时钟是门控时钟信号

并发写允许

0 禁止写UART1和UART2

1 允许并发写对应的UART寄存器。对UART1寄存器进行的写操作同时作用于对应的UART2寄存器,反之亦然。

说明

7 CW

18.3.1.13 DMA状态寄存器(UDSR1 和UDSR2)

DMA状态寄存器返回发送器和接收器FIFO的状态,并为对FIFO的DMA数据操作提供帮助。DMA状态寄存器如图18-15所示。

图18-15 DMA状态寄存器(UDSR)

表18-20说明了UDSR的字段。

表18-20 UDS字段说明

0-5

6

名字

TXRDY

保留

发送器就绪。反映发送器FIFO或者UTHR状态。该状态依赖于所选择的DMA模式,DMA模式由UFCR[DMS]和UFCR[FEN]确定。

0 清除该位,如表18-22所示。

1 置位该位,如表18-21所示。

接收器就绪。这个只读位反映接收器FIFO或者URBR的状态。该状态依赖于选择的DMA模式,DMA模式由UFCR[DMS]和UFCR[FEN]确定。

0 清除该位,如表18-24所示。

1 置位该位,如表18-23所示。

表18-21 UDSR[TXRDY]置位条件

DMS

0

0

FEN

0

1

DMA模式

0

0

含义

在将第一个字符装入发送器FIFO或者UTHR后置位TXRDY。

说明

7 RXRDY

1

1

0

1

0

1

当发送器FIFO满时置位TXRDY。

表18-22 UDSR[TXRDY]清除条件

DMS

0

0

1

1

FEN

0

1

0

1

DMA模式

0

0

0

1

含义

在发送器FIFO或者UTHR中无字符时清除TXRDY。

在发送器FIFO或者UTHR中无字符时清除TXRDY。当发送器FIFO不满时,TXRDY保持清除。

表18-23 UDSR[RXRDY]置位条件

DMS

0

0

1

1

FEN

0

1

0

1

DMA模式

0

0

0

1

含义

在接收器FIFO或者URBR中无字符时置位RXRDY。

在未达到触发水平且无超时时置位RXRDY。

表18-24 UDSR[RXRDY]清除条件

DMS

0

0

1

1

FEN

0

1

0

1

DMA模式

0

0

0

1

含义

在接收器FIFO或者URBR中至少有一个字符时清除RXRDY。

当达到触发水平或者超时时清除RXRDY。RXRDY保持清除,直到接收器FIFO空。

18.4 功能说明

该通信信道提供一个全双工的异步发送器和接收器,它使用源自系统时钟信号的操作频率进行工作。

发送器接受写入UTHR的并行数据。在FIFO模式下,将数据直接放入内部发送器移位寄存器或者FIFO发送器——参看18.4.5节“FIFO模式”。发送寄存器将数据转换成为串行位流,并且插入合适的START、STOP和可选的奇偶校验位。最后寄存器将打包好的串行数据流输出到信道的发送器串行数据输出(SOUT)。可以轮询或中断驱动发送器的状态。

接收器在信道的接收器串行数据输入(SIN)上接收串行数据,将数据转换成并行格式,并检查START位、STOP位和奇偶校验位。在FIFO模式下,接收器去掉START,STOP和奇偶校验位,然后传输接收器缓冲区或接收器FIFO中的装配好了的字符。在响应UART接收器缓冲寄存器(URBR)读操作时开始传输。可以轮询或中断驱动接收器的状态。

18.4.1 串行接口

UART总线是一个串行、全双工、点对点的总线,如图18-16所示。因此,只能将两个设备连接到同一个信号上,并且不需要地址或者仲裁总线周期。

两个带奇偶校验位和2个停止位的7位数据传输

图18-16 UART总线接口事务处理协议举例

标准的UART总线传输包括以下三个或四个部分。

START位

数据传输(最低有效位是总线上的第一个数据位)

奇偶校验位(可选)

STOP位

内部逻辑采样信号rxcnt使用波特率发生器的频率将数据位送往SOUT。

下面几节说明串行接口的四个组成部分、波特率发生器,本地回送模式、各种错误和FIFO模式。

18.4.1.1 START位

UTHR写操作在SOUT信号上产生一个START位。图18-16显示,将START位定义成逻辑0。START位表示一次新的数据传输的开始,数据传输的长度由ULCR中设定的位长度限制。当总线空闲时,SOUT为高。

18.4.1.2 数据传输

每次数据传输包含5,6,7或8位的数据。发送器和接收器UART设备的ULCR数据位长度在传输开始之前必须达成一致,否则会出现奇偶校验错或者帧错误。在UTHR写入时开始数据传输。同时产生START位,后面紧接着5到8位先前写入UTHR的数据。按照最低位到最高位的顺序驱动数据位。在奇偶校验位和STOP位之后,如果UTHR中写入了新的数据,则开始新的一轮传输。

18.4.1.3 奇偶校验位

用户可选择使用奇校验、偶校验,无奇偶校验还是固定校验(参看18.3.1.7节“线路控制寄存器(ULCR1和ULCR2)”)。在传输数据之前,接收器和发送器的奇偶校验定义必须一致。在接收数据时,如果检测到非期望的奇偶校验值,则会产生奇偶校验错误。(参看18.3.1.9节“线路状态寄存器(ULSR1和ULSR2)”)。

18.4.1.4 STOP位

发送器设备通过产生一个停止位(STOP)来结束写传输。STOP位始终为高。用户可以在ULCR中设定STOP位的长度。在传输数据之前,接收器和发送器的STOP位长度必须一致。如果检测到错误STOP位,则发生帧格式错误。

18.4.2 波特率发生器逻辑

每个UART都包含一个独立的可编程波特率发生器,该发生器以系统时钟作为输入,将输入除以1到216-1进行分频。

将波特率定义为可以在UART总线上每秒钟发送的位数。计算波特率的公式如下:

波特率=(1/16)X(系统时钟频率/分频值)

因此,波特率发生器输出的频率是波特率的16倍。

分频值由以下两个8位寄存器组成的16位二进制数决定:

 UART分频器高有效字节寄存器(UDMB)

 UART分频器低有效字节寄存器(UDLB)

在装入上述两个分频系数锁存器的任何一个时,就装入16位的波特率计数器。

为确保波特率发生器正常工作,必须在初始化过程中装入分频系数锁存器。在开始传输之前,必须将同一总线上的两个UART设备设定为相同的波特率。

允许UAFR[BO]可以将波特时钟传输到性能监控器。这可以用来确定波特率错误。

18.4.3 本地回送模式

本地回送模式用于诊断测试。可以从同一个UART的接收器缓冲寄存器中读出写入UTHR的数据。这种模式下,在内部将MODEM控制寄存器的UMCR[RTS]和MODEM状态寄存器的UMSR[CTS]连在一起。将发送器的SOUT置为逻辑1,将接收器的SIN端断开。发送器移位寄存器的输出回送到接收器移位寄存器的输入。将CTS(输入信号)断开,将RTS从内部连接到CTS,并且RTS(输出信号)无效。在该诊断模式下,发送出去的数据立刻被接收。在本地回送模式下,可以验证DUART的发送和接收数据路径。注意,在本地回送模式下,发送和接收中断完全有效,可以由中断允许寄存器(UIER)控制。

18.4.4 错误

下面几节介绍数据在UART总线上传输时可能出现的帧格式、奇偶校验错误和过载错误。如下将要说明的那样,在读线路状态寄存器(ULSR)时,这些错误位通常被清除。

18.4.4.1 帧格式错

当检测到错误的停止位(STOP)时,就发生帧格式错误并置位ULSR[FE]。注意,只检测第一个停止位。在FIFO模式下,当FIFO顶部的字符检测到帧格式错误时置位ULSR[FE]。在帧格式错误发生以后,需要重新同步。 UART假定帧格式错(当希望读到逻辑1(停止位)时却读到逻辑0)是因为停止位覆盖了下一个起始位。读ULSR时或者将一个新字符从接收器移位寄存器装入URBR时,清除ULSR[FE]。

18.4.4.2 奇偶校验错

接收数据时,如果检测到不期望的奇偶校验值,则发生奇偶校验错并置位ULSR[PE]。在FIFO模式下,当FIFO顶部的字符由奇偶校验错时置位ULSR[PE]。读ULSR时或者将一个新字符装入URBR时,清除ULSR[PE]。

18.4.4.3 过载错

当检测到一个新(覆盖字符)停止位且老字符丢失时,就发生过载错并置位ULSR[OE]。在FIFO模式下,当FIFO接收器满(不管接收器FIFO触发水平的设置)且已将新字符接收到内部接收器的移位寄存器之后置位ULSR[OE]。不覆盖FIFO中的数据,仅覆盖移位寄存器中的数据。因此立即发生中断。读ULSR时清除ULSR[OE]。

18.4.5 FIFO模式

UART使用备用功能模式(FIFO模式)将处理器核从繁重的软件开销中解脱出来。FIFO控制寄存器(UFCR)用来允许和禁止接收器和发送器FIFO,并设置FIFO接收器触发水平UFCR[RTL],以控制接收数据可用中断UIER[ERDAI]。

UFCR还选择DMA信号的类型。UDSR[RXRDY]指示接收器FIFO的状态。UDSR[TXRDY]指示FIFO发送器满了。当在FIFO模式下时,将写入UTHR的数据送入发送器FIFO。写入UTHR的第一个字节即为送往UART总线的第一个字节。

18.4.5.1 FIFO中断

在FIFO模式下,当超时中断发生时置位UIER[ERDAI]。接收数据超时产生可屏蔽中断状态(通过UIER[ERDAI])。参看18.3.1.4节“中断允许寄存器(UIER1和UIER2)”。

UIIR指示是否允许FIFO。仅为FIFO模式中断置位UIIR[IID3]。在最近的四个字符传输的时间段内,如果无字符串输入接收器FIFO或者移出,并且在接收器FIFO中至少有一个字符,则发生字符超时中断。读URBR时清除字符超时中断(受UIIR[IID]控制)。参看18.3.1.5节“中断ID寄存器(UIIR1和UIIR2)”。

UIIR[FE]指示是否允许FIFO模式.。

18.4.5.2 DMA模式选择

UDSR[RXRDY]反映接收器FIFO或者URBR的状态。在模式0(UFCR[DMS]被清除),当接收器FIFO或者URBR中至少有一个字符时,清除UDSR[RXRDY];当接收器FIFO或者URBR中无字符时,置位UDSR[RXRDY]。此时不考虑UFCR[FEN]的设置。在模式1(UFCR[DMS]和UFCR[FEN]被置位),当达到触发水平或者超时时,清除UDSR[RXRDY];当接收器FIFO中没有任何字符时,置位UDSR[RXRDY]。

UDSR[TXRDY]反映发送器FIFO或者UTHR的状态。在模式0(UFCR[DMS]被清除),当发送器FIFO或者UTHR中没有任何字符时,清除UDSR[TXRDY];当将第一个字符装入发送器FIFO或者UTHR之后,置位UDSR[TXRDY]。此时不考虑UFCR[FEN]的设置。在模式1(UFCR[DMS]和UFCR[FEN]被置位),当发送器FIFO或者UTHR中没有任何字符时,清除UDSR[TXRDY];当FIFO发送器满时,置位UDSR[TXRDY]。

有关USDR[RXRDY]和USDR[TXTDY]位的完整说明参看18.3.1.13节“DMA状态寄存器(UDSR1和UDSR2)”。

18.4.5.3 中断控制逻辑

当DUART中断ID寄存器的第0位(UIIR[0])被清除时,中断有效。UIER用来屏蔽特定的中断类型。参看18.3.1.4节“中断允许寄存器(UIER1和UIER2)”。

当UIER中的中断被禁止时,轮询软件不能使用UIIR[0]确定UART是否准备好服务。软件必须监控合适的ULSR和UMSR位。当UIER中的中断允许时,才可以将UIIR[0]用于轮询。

18.5 DUART初始化/应用/信息

DUART访问必须满足下列要求:

 所有的DUART寄存器都必须映射到cache禁止的受保护的区域。(也就是说 需要把MMU中的WIMG设置成0b01x1。)

 所有DUART寄存器都只有1个字节宽。对这些寄存器的读和写都必须是1个字节宽度的操作。

系统复位将DUART寄存器置为缺省状态。在接口可以传输串行数据之前,推荐下列初始化步骤:

1. 更新可编程中断控制器(PIC)DUART信道中断向量源寄存器。

2. 设置ULCR、UFCR、UAFR、UMCR、UDLB和UDMB中的数据属性和控制位。

3. 设置外部MODEM或者外部设备的数据属性和控制位。

4. 设置中断允许寄存器(UIER)。

5. 写UTHR,开始写传输。

6. 如果DUART产生的中断被屏蔽,轮询UIIR。