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