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