微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 移动嵌入ARM7串口9位方式编程技术

移动嵌入ARM7串口9位方式编程技术

时间:06-17 来源:互联网 点击:

字符的停止位为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位方式的多机通信,并在相关课题中成功应用,而且保证了通信的可靠性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top