移动嵌入ARM7串口9位方式编程技术
使用ARM7串口UARTO之前须设置5个寄存器,即中断使能寄存器UOIER、UARTO格式控制寄存器UOLCR、FIFO控制寄存器UOFCR和波特率设置寄存器UODLM和UODLL。发送过程是:CPU内核通过VPB接口对UARTO的寄存器进行读写访问,数据首先进入发送缓存UOTHR,经发送移位寄存器UOTSR逐位移出,经TxDO引脚输出。接收过程是:数据经RxDO,先进入接收移位寄存器UORSR,经接收缓存U0RBR,通过VPB与CPU内核相连。特别注意的是,通信过程中arm7串口中的中断标志寄存器U0IIR和UART0状态寄存器UOLSR的各位将随着通信收发而自动受到影响,也就是说这两个寄存器记录了数据通信过程的状态信息,这些信息很有用。
UOIIR寄存器的描述如表1所列。

UOIIR提供状态代码,用于指示一个挂起中断的中断源和优先级。在访问UOIIR的过程中,中断被冻结。如果在访问UOIIR时产生了中断,该中断将被记录,在下次访问UOIIR时可以读出,避免了中断的丢失。
UOLSR寄存器描述如下:

RDR:接收数据就绪。判断该位是否置1,决定能否从FIF0中读取数据。
0——UORBR为空。
l——UORBR中包含有效数据。从接收FIFO中读走所有数据后,恢复为O。
0E:溢出错误标志。当U0RBR寄存器中已经有新的字符就绪,而接收FIF0已满时,该位置位。
0——接收缓存区没有溢出。
1——接收缓存区发生溢出错误。
PE:奇偶校验错误。在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与UOLCR中的设置不符,将引起奇偶校验错误。
O——没有发生奇偶校验错误。
1——发生奇偶校验错误。读操作使该位恢复为O。
FE:帧错误标志。当接收字符的停止位为O时,产生帧错误。
O——没有发生帧错误。
1——发生帧错误。读取该位时恢复为O。
BI:间隔中断标志。在发送数据时,如果RXDO引脚保持低电平,将产生间隔中断。发生间隔中断后,接收模块停止数据接收。
O——没有发生间隔中断。
1——发生间隔中断。
THRE:反映UOTHR是否为空,也可以认为发送FIFO是否为空。
O——不为空。
1——空。对UOTHR进行写操作,使该位恢复为O。
TEMT:当发送移位寄存器和UOTHR均为空时,该位置位。
0——不为空。
1——空。对UOTHR进行写操作,使该位恢复为0。
RXFE:如果一个带有接收错误(如帧错误、奇偶错误或间隔中断)的字符装入UORBR时,该位置位。
O——UORBR中没有接收错误,或UOFCR[O]为0。
1——UORBR中包含至少一个UARTO Rx错误。
另外,还有两个很重要的寄存器:一个是前面提到的格式控制寄存器UOLCR,另一个是FIFO控制寄存器UOFCR。
UOLCR寄存器的描述如下:

其中第3位和第4、5位十分重要。
奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。
O——禁止奇偶产生和校验。
1——使能奇偶产生和校验。
奇偶选择:设置奇偶校验类型。
OO——奇数(数据位+校验位=奇数)。
01——偶数(数据位+校验位=偶数)。
10——校验位强制为1。
11——校验位强制为O。
U0FCR寄存器的描述如下:

这里面注意第6、7位。
Rx触发点设置:通过设置这两位可以调整接收FIF0中触发RDA中断的有效字节数量。
00——触发点O(1字节)。
01——触发点1(4字节)。
10——触发点2(8字节)。
11——触发点3(14字节)。
评论