移动嵌入ARM7串口9位方式编程技术
字符的停止位为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字节)。3 9位方式多机通信编程实现
上面已说明,9位方式多机通信的关键是第9位的编程发送和第9位的接收和判断。
对于发送端,利用UOLCR寄存器的设置便能实现第9位的编程发送。
UOLCR=0x2B; //带奇偶校验,强制为l
UOLCR=Ox3B; //带奇偶校验,强制为O
通过以上设置,只要编程发送1字节,arm就自动将第9位按程序设置的0或1发送出去。
难点在于接收端,即接收端把接收到的第9位放到哪了,程序员又如何知道这第9位是0还是1。
其实,ARM并不像51单片机那样把接收到的第9位数据自动装入SCON的RB8。实际上,ARM并没有这样的寄存器SCON,也没有RB8位。要实现判断第9位为1或0,只能利用arm串口通信的奇偶校验功能!
具体思路如下:
①设置奇偶校验使能;
②编程读取UOLSR寄存器的PE位(具体含义见UOLSR寄存器的描述部分);
③编程判断收到的l字节中有多少个“1”,并设置一标志PP;
④将上述标志与PE位比较处理;
⑤比较的结果就正确表示了第9位是“O”,还是“1”。
按照以上思路,可有效实现第9位的判断。下面给出相应的程序代码:
上述程序中变量u9就是得到的第9位标志:
当u9=OxFF时,说明第9位为1;
当u9=OxFE时,说明第9位为O。
还需注意的是,接收端奇偶校验设置成偶校验还是奇校验,要根据后面程序中标志pp的设置而定。
4 总 结
本设计方案巧妙地应用arm串口通信奇偶校验功能,实现了9位方式的多机通信,并在相关课题中成功应用,而且保证了通信的可靠性。
- Reed Solomon编解码器的可编程逻辑实现(06-21)
- 基于TMS320C62X DSP的混合编程研究(07-12)
- 基于JTAG的DSP外部FLASH在线编程与引导技术(01-22)
- 基于嵌入式系统的手机编程开发平台(07-30)
- DSP编程的几个关键问题(10-01)
- 基于VxWorks的MB系列智能可编程控制器设计(01-16)