ARM7串口9位方式多機通信的編程技術(shù)
O——禁止奇偶產(chǎn)生和校驗。
1——使能奇偶產(chǎn)生和校驗。
奇偶選擇:設置奇偶校驗類(lèi)型。
OO——奇數(數據位+校驗位=奇數)。
01——偶數(數據位+校驗位=偶數)。
10——校驗位強制為1。
11——校驗位強制為O。
U0FCR寄存器的描述如下:
這里面注意第6、7位。
Rx觸發(fā)點(diǎn)設置:通過(guò)設置這兩位可以調整接收FIF0中觸發(fā)RDA中斷的有效字節數量。
00——觸發(fā)點(diǎn)O(1字節)。
01——觸發(fā)點(diǎn)1(4字節)。
10——觸發(fā)點(diǎn)2(8字節)。
11——觸發(fā)點(diǎn)3(14字節)。
上面已說(shuō)明,9位方式多機通信的關(guān)鍵是第9位的編程發(fā)送和第9位的接收和判斷。
對于發(fā)送端,利用UOLCR寄存器的設置便能實(shí)現第9位的編程發(fā)送。
UOLCR=0x2B; //帶奇偶校驗,強制為l
UOLCR=Ox3B; //帶奇偶校驗,強制為O
通過(guò)以上設置,只要編程發(fā)送1字節,ARM就自動(dòng)將第9位按程序設置的0或1發(fā)送出去。
難點(diǎn)在于接收端,即接收端把接收到的第9位放到哪了,程序員又如何知道這第9位是0還是1。
其實(shí),ARM并不像51單片機那樣把接收到的第9位數據自動(dòng)裝入SCON的RB8。實(shí)際上,ARM并沒(méi)有這樣的寄存器SCON,也沒(méi)有RB8位。要實(shí)現判斷第9位為1或0,只能利用ARM串口通信的奇偶校驗功能!
具體思路如下:
?、僭O置奇偶校驗使能;
?、诰幊套x取UOLSR寄存器的PE位(具體含義見(jiàn)UOLSR寄存器的描述部分);
?、劬幊膛袛嗍盏降膌字節中有多少個(gè)“1”,并設置一標志PP;
?、軐⑸鲜鰳酥九cPE位比較處理;
?、荼容^的結果就正確表示了第9位是“O”,還是“1”。
按照以上思路,可有效實(shí)現第9位的判斷。下面給出相應的程序代碼:
上述程序中變量u9就是得到的第9位標志:
當u9=OxFF時(shí),說(shuō)明第9位為1;
當u9=OxFE時(shí),說(shuō)明第9位為O。
還需注意的是,接收端奇偶校驗設置成偶校驗還是奇校驗,要根據后面程序中標志pp的設置而定。
4 總 結
本設計方案巧妙地應用ARM串口通信奇偶校驗功能,實(shí)現了9位方式的多機通信,并在相關(guān)課題中成功應用,而且保證了通信的可靠性。
評論