關(guān)于GPIO實(shí)現(xiàn)RS485/422通信的研究
2)中間層:字節(jié)接收,如圖6所示。當(dāng)新bit接收完成時(shí),將當(dāng)前Bit值按照格式組合到字節(jié)數(shù)據(jù)。當(dāng)字節(jié)位計(jì)數(shù)器滿一個(gè)字節(jié)時(shí),如果滿足起始位“0”和停止位“1”的條件,字節(jié)接收完成,并通知頂層進(jìn)行幀接收控制,否則字節(jié)無效。
本文引用地址:http://www.ex-cimer.com/article/235349.htm
3)頂層:幀接收,如圖7所示。首先檢測串口當(dāng)前狀態(tài)是否為接收允許,如果不是則將串口置為接收允許、發(fā)送禁止?fàn)顟B(tài),在確任接收允許后開始收數(shù)。在新字節(jié)接收完成后,將新字節(jié)寫入接收緩沖區(qū),同時(shí)根據(jù)通信協(xié)議啟動(dòng)報(bào)文識別,直到收到一幀完整的報(bào)文,結(jié)束接收通信。根據(jù)實(shí)際需要可以加入通信超時(shí)控制。
4.面向?qū)ο髮?shí)現(xiàn)方法
在DSP中,對某一個(gè)GPIO管腳操作,需要對某一個(gè)寄存器的某一位進(jìn)行置位或者清零。
為避免每次對管腳操作時(shí)去尋找寄存器的地址和位地址這個(gè)易出錯(cuò)的缺點(diǎn),軟件設(shè)計(jì)時(shí)采用C++類結(jié)構(gòu)的方式進(jìn)行數(shù)據(jù)封裝,使用時(shí)只需在初始化時(shí)一次性的傳入寄存器及其位地址,其余用處均采用交互性良好的助記符。
4.1 GPIO管腳類數(shù)據(jù)結(jié)構(gòu)
在構(gòu)建GPIO管腳類時(shí),圍繞寄存器以及位地址操作和電平操作進(jìn)行。
軟件數(shù)據(jù)類型與處理器的型號相關(guān),本文采用TMS3206713處理器,為有效控制數(shù)制,將硬件支持?jǐn)?shù)制和編譯系統(tǒng)符號相對應(yīng),將C6000數(shù)據(jù)類型重定義,在GPIO操作中主要使用無符號數(shù)。
4.2 串口類數(shù)據(jù)結(jié)構(gòu)
為了區(qū)分當(dāng)前使用的串口類型,故定義串口類型號枚舉,為串口操作程序提供識別入口。
由類的構(gòu)造函數(shù)知,由于RS422和RS485所使用的管腳不同,為了將每種操作統(tǒng)一到一個(gè)函數(shù)中,采用了swtich結(jié)構(gòu),其他成員函數(shù)類似。其中發(fā)射函數(shù)Sending()對應(yīng)圖3、4中的流程,接收函數(shù)Receving()對應(yīng)圖5、6、7中的流程。
軟件設(shè)計(jì)以定時(shí)器為中心,由使用目的屬性來區(qū)分發(fā)送還是接收,以中斷方式控制通信時(shí)序,能夠?qū)崿F(xiàn)全雙工通信。在全雙工通信中,當(dāng)出現(xiàn)收發(fā)定時(shí)中斷沖突的極端情況時(shí),可設(shè)定發(fā)送優(yōu)先,由于端口操作時(shí)間為納秒級,接收滯后處理的影響可以忽略不計(jì)。
5.位檢測與接收通信可靠性
由于每一個(gè)bit的檢測結(jié)果直接決定著接收數(shù)據(jù)是否正確,按照波特率所確定的時(shí)間間隔對端口電平采樣一次來確定bit的值來實(shí)現(xiàn)的軟件,實(shí)驗(yàn)室拷機(jī)時(shí)存在誤碼現(xiàn)象,因此通過提高bit的檢測能力,降低誤碼率。bit檢測改進(jìn)方法如下:
(1)接收通信的位采樣仍然采用由波特率確定的時(shí)間間隔,但對于位檢測時(shí),采用讀3次管腳電平然后進(jìn)行表決的方式確定當(dāng)前bit的值,有效降低了誤碼率,但仍有字節(jié)出錯(cuò)的問題,因?yàn)?取2的方式可以部分地剔除納秒級的高頻毛刺,但不能有效抑制強(qiáng)干擾引起的電平翻轉(zhuǎn),需進(jìn)一步改進(jìn)。
( 2 )將每一b i t檢測的時(shí)間間隔縮短到1/3,即對每一個(gè)bit進(jìn)行三次檢測,然后做3取2判決,并將連續(xù)30個(gè)1/3bit的高電平后的首個(gè)1/3bit低電平作為幀起點(diǎn)的先決條件,確保正常情況下每一bit的3個(gè)1/3bit都是同樣的電平值,這樣做的好處是每一個(gè)bit的檢測可以允許一個(gè)1/3bit出錯(cuò)。
以下進(jìn)行簡要分析,令改進(jìn)之前的誤碼率是p,引起誤碼的噪聲為非相干的,第一次改進(jìn)后,對于任一bit的三次檢測中允許有一次出錯(cuò),因此在理想狀態(tài)下的誤碼率為檢測出錯(cuò)兩次和三次的條件概率:
如果p=10-6,那么最終的誤碼率可以降低到約為1.4×10-25,分析表明改進(jìn)措施應(yīng)該有效。
經(jīng)改進(jìn)的軟件在實(shí)驗(yàn)室進(jìn)行了30小時(shí)通訊強(qiáng)度試驗(yàn),試驗(yàn)中20ms完成一輪收發(fā),報(bào)文長度為20個(gè)字節(jié),在約1.08×108字節(jié)的接收通信中,未發(fā)現(xiàn)一個(gè)字節(jié)的通信錯(cuò)誤。此后在產(chǎn)品8個(gè)月的調(diào)試與外場試驗(yàn)統(tǒng)計(jì)數(shù)據(jù)表明,除了有一次因通信接口芯片損壞以及一次不明原因的通信出錯(cuò)以外,沒有出現(xiàn)因?yàn)檐浖a(chǎn)生的通信故障,證實(shí)了接收通信的可靠性。
6.結(jié)論
本文在GPIO模擬通用RS485/422串口通信的研究中,采用分層處理技術(shù)、優(yōu)化bit檢測方法、面向?qū)ο笤O(shè)計(jì)手段,實(shí)現(xiàn)了全雙工通訊,具有邏輯清晰、易于實(shí)現(xiàn)、可靠性高和易于改進(jìn)、維護(hù)和移植的優(yōu)點(diǎn);但也存在一定的局限性,如軟件不宜采用匯編語言實(shí)現(xiàn),全雙工通信是以定時(shí)器為中心進(jìn)行統(tǒng)籌實(shí)現(xiàn)的,并不是真正獨(dú)立意義上的全雙工,其波特率受工作頻率的限制較大。
通信相關(guān)文章:通信原理
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評論