專利名稱:一種通用異步收發(fā)報機的控制方法及其裝置的制作方法
技術領域:
本發(fā)明涉及通信領域,尤其涉及一種通用異步收發(fā)報機(Universal Asynchronous Receiver Transmitter,簡稱UART )的控制方法及其裝置。
背景技術:
UART應用廣泛,已成為低速率串行通訊的標準設備,許多通訊處理器 在片內(nèi)集成有UART模塊。但UART應用在半雙工通訊、總線式全雙工通 訊場景中有一個缺陷,即它不提供真正意義上的數(shù)據(jù)發(fā)送完成中斷,具體如 下
數(shù)據(jù)發(fā)送時,UART僅提供發(fā)送存儲寄存器空中斷(transmitter holding register empty interrupt), 該中斷對應發(fā)送存儲寄存器(transmitter holding register)的內(nèi)容移入移位發(fā)送寄存器(shift transmitter register)事件。該中 斷發(fā)生時,剛移入移位發(fā)送寄存器的數(shù)據(jù)此時處于待發(fā)狀態(tài),尚未發(fā)出。而 移位發(fā)送寄存器的內(nèi)容發(fā)完時UART并不產(chǎn)生中斷。
而在半雙工、總線式全雙工通訊場景中, 一個設備在發(fā)送完數(shù)據(jù)后,一一 般需要立即釋放數(shù)據(jù)發(fā)送權,并且從發(fā)送完成到總線釋放之間的時間間隔盡 可能短,使其他設備可以在該設備發(fā)送完成后立刻獲得并^f吏用數(shù)據(jù)發(fā)送權而 不產(chǎn)生總線沖突。在這類應用場景中,由于UART不提供數(shù)據(jù)發(fā)送完成中 斷這一控制機制,需要UART在數(shù)據(jù)發(fā)送完成時刻的相關控制只能通過引 入額外機制才能準確實現(xiàn)。
當前主要通過以下4種方案來解決該問題,包括
A.在UART產(chǎn)生的發(fā)送存儲寄存器空中斷中啟動一個軟件延時,計時 長度等于UART發(fā)送完移位寄存器里的數(shù)據(jù)所需的時間,之后執(zhí)行發(fā)送完 成對應的控制操作。B. 將方法A中的延時改成循環(huán)讀取UART發(fā)送完成標志,首次讀到標 志為真時執(zhí)行發(fā)送完成對應的控制操作。
C. UART的發(fā)送存儲寄存器空中斷發(fā)生后,暫時不清除中斷標志,讓 中斷持續(xù)發(fā)生,并在中斷里讀取UART發(fā)送完成標志。首次讀到發(fā)送完成 標志為真時執(zhí)行發(fā)送完成對應的控制操作,然后清除該中斷標志。
D. 分別給UART的每一個通道配備一個硬件定時器,當UART產(chǎn)生發(fā) 送存儲寄存器空中斷且發(fā)送緩沖區(qū)為空時,啟動這個硬件定時器進行單次定 時,定時長度為最后一個數(shù)據(jù)發(fā)送完所需時間。定時器中斷發(fā)生時,執(zhí)行發(fā) 送完成對應的控制操作并關閉該定時器。
但上述4種方案均有一定缺陷
方案A、 B簡單但控制準確性差,因為多任務處理環(huán)境下A、 B這類基 于軟件延時、軟件查詢的方式會因其所在軟件任務被搶占而錯過控制時機; 此外方案A、 B存在嚴重的CPU處理能力浪費問題,原因是方案A、 B在 延時期間CPU在做無用功。CPU浪費與UART速率成反比,即UART傳輸 速度越低CPU浪費越大,以2400bps傳輸場景為例,々ii殳每個字節(jié)傳輸對 應10bit,則每次至少浪費4ms的CPU處理時間。
方案C簡單、控制準確性好,但和方法A、 B—樣,也存在嚴重的CPU 處理能力浪費問題。
方案D相對較好,動作準確、CPU開銷小,但每個UART通道需要一 個額外硬件定時器資源來支持,并且實現(xiàn)起來也比較復雜。
因此,當前需要一種技術方案來解決上述當前方案存在的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是提供一種通用異步收發(fā)報機的控制方法 及其裝置,解決了當前技術方案在UART發(fā)送完成時刻控制上存在的動作 準確'性問題、軟硬件資源開銷問題以及實現(xiàn)復雜度問題。
為了解決上述問題,本發(fā)明提供了一種通用異 收發(fā)報機的控制方法, 包括通信主控方的CPU在寫入通用異步收發(fā)報機UART的待發(fā)數(shù)據(jù)序列末 尾增加一冗余數(shù)據(jù),并將所加所述冗余數(shù)據(jù)寫入該UART;
當所述CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器 空中斷時,所述CPU通過該發(fā)送存儲寄存器空中斷對所述UART進行控制。
本發(fā)明還提供了一種通用異步收發(fā)報機的控制裝置,包括CPU,用于
并將所加所述冗余數(shù)據(jù)寫入該UART;當將所加所述冗余數(shù)據(jù)寫入所述 UART產(chǎn)生發(fā)送存儲寄存器空中斷時,通過該發(fā)送存儲寄存器空中斷對所述 UART進行控制。
與現(xiàn)有技術相比,應用本發(fā)明,能夠在UART現(xiàn)有硬件資源的基礎上 實現(xiàn),無需增加硬件的額外開銷,軟件開銷小且易于實現(xiàn),提高了控制準確 性。
圖1是使用UART的半雙工通信裝置圖; 圖2是UART的發(fā)送工作原理圖3是本發(fā)明的通用異步收發(fā)報機的控制方法的流程圖4是本發(fā)明實例中某型基站中心控制板的半雙工通信裝置圖5是本發(fā)明實例中某型基站中心控制板使用UART的半雙工通信的 方式E的流程圖6是本發(fā)明實例中某型基站中心控制板使用UART的半雙工通信的 方式F的流程圖。
具體實施例方式
下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步說明。
如圖1所示的通訊系統(tǒng)中,該系統(tǒng)主要由通信主控方A及其通訊對象B 組成。其中,通信主控方A包括CPU、 UART、總線控制命令鎖存單元、半雙工UART驅(qū)動器4個部分。通訊對象B則是暗箱i殳備,制造商僅提供其 通訊接口電氣特性定義(半雙工485 )以及通訊文格式定義。設備B對外部 命令的響應時間在幾毫秒至幾秒之間。設備B平時處于偵聽狀態(tài),當收到 命令地址是指向自己的命令后向通信主控方A發(fā)送應答報文。
本發(fā)明的主要構(gòu)思在于在通信主控方A的CPU寫給UART的原待發(fā) 數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù)形成新數(shù)據(jù)序列,以該新數(shù)據(jù)序列為發(fā)送數(shù) 據(jù)。當發(fā)送數(shù)據(jù)末尾的新增冗余數(shù)據(jù)被寫入UART后,它對應的發(fā)送存儲 寄存器空中斷發(fā)生時,剛好是原待發(fā)數(shù)據(jù)序列最后 一個數(shù)據(jù)的發(fā)送完成時 刻,所以此發(fā)送存儲寄存器空中斷就可以作為原待發(fā)數(shù)據(jù)序列的發(fā)送完成中 斷來用。至于該新增的冗余數(shù)據(jù)對系統(tǒng)的影響,可以通過關閉UART當前 通道的發(fā)送功能或者關閉相應外接總線驅(qū)動器的發(fā)送功能等方式方法來消 除。
圖2是UART的發(fā)送工作原理圖。
其中,對于UART的冗余數(shù)據(jù)的插入可以通過以下兩種方式實現(xiàn)1、 在應用層插入冗余數(shù)據(jù),即CPU向UART寫入待發(fā)數(shù)據(jù)序列前,在發(fā)送給 UART的待發(fā)數(shù)據(jù)序列末尾直接增加一冗余數(shù)據(jù);2、在驅(qū)動層插入冗余數(shù) 據(jù),即CPU向UART發(fā)送完待發(fā)數(shù)據(jù)后,CPU再向UART的發(fā)送存儲寄 存器寫入一個任意數(shù)據(jù)。
如圖3所示,本發(fā)明的通用異步收發(fā)報機的控制方法,包括以下步驟
步驟300:通信主控方的CPU設置外接總線驅(qū)動器為發(fā)送模式,并使能 UART當前通道的發(fā)送功能;
步驟310:通信主控方的CPU向UART發(fā)送由待發(fā)數(shù)據(jù)序列和在該待 發(fā)數(shù)據(jù)序列末尾增加的冗余數(shù)據(jù)組成的新數(shù)據(jù)序列,直至該冗余數(shù)據(jù)也被寫 入UART;
步驟320:當所加冗余數(shù)據(jù)產(chǎn)生發(fā)送存儲寄存器空中斷時,CPU在該中 斷的中斷服務函數(shù)里關閉UART當前通道發(fā)送功能或者關閉UART相應總 線驅(qū)動器的發(fā)送功能來消除冗余數(shù)據(jù)對系統(tǒng)的影響;
步驟330: CPU執(zhí)行UART數(shù)據(jù)發(fā)送完成時的操作,并做本次發(fā)送后的處理。
執(zhí)行UART數(shù)據(jù)發(fā)送完成時刻所需的操作,可以是指打開UART當 前通道的外接總線驅(qū)動器的接收使能,接收通訊對象設備發(fā)送的響應電文。
本發(fā)明的通用異步收發(fā)報機的控制裝置,主要包括CPU,用于在寫入 所述通用異步收發(fā)報機UART的待發(fā)數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù),并將 所加所述冗余數(shù)據(jù)寫入該UART;當將所加所述冗余凄t據(jù)寫入所述UART 產(chǎn)生發(fā)送存儲寄存器空中斷時,通過該發(fā)送存儲寄存器空中斷對所述UART 進行控制。
所述CPU在寫入所述UART的待發(fā)數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù),并 將所加所述冗余數(shù)據(jù)寫入該UART,具體是指
所述CPU在發(fā)送給所述UART寫入待發(fā)數(shù)據(jù)序列前,在發(fā)送給UART 的待發(fā)數(shù)據(jù)序列末尾直接增加一冗余數(shù)據(jù)形成新數(shù)據(jù)序列,并將該新數(shù)據(jù)序 列寫入該UART;
或者所述CPU向所述UART寫入完待發(fā)數(shù)據(jù)序列后,再向該UART的 發(fā)送存儲寄存器寫入一 冗余數(shù)據(jù)。
所述CPU,還用于將所述新數(shù)據(jù)序列寫入所述UART前,設置外接總 線驅(qū)動器為發(fā)送模式,并使能所述UART當前通道的發(fā)送功能。
所述CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器空 中斷時,通過該發(fā)送存儲寄存器空中斷對所述UART進行控制,是指所 述CPU關閉所述UART當前通道發(fā)送功能或者關閉所述UART相應總線驅(qū) 動器的發(fā)送功能,消除該冗余數(shù)據(jù)對系統(tǒng)的影響。
所述CPU關閉所述UART當前通道發(fā)送功能是指所述CPU在所述中斷 的中斷服務函數(shù)里關閉所述UART當前通道發(fā)送功能。
下面是本發(fā)明所述方法應用在某微型移動通訊基站中心控制板中 UART數(shù)據(jù)傳輸控制過程的實例。
該控制板硬件主要有4個部分CPU、 UART、 FPGA (現(xiàn)場可編程門陣 列)以及半雙工485驅(qū)動芯片。其中,UART為包含有4個通道的TL16C554。 UART通道1、 2和3均工作于全雙工點對點沖莫式下,與本發(fā)明所述方法無關;通道0應用了本發(fā)明所述的控制方法,外接有1片MAX3485E(Dallas 公司生產(chǎn)的半雙工485驅(qū)動芯片),與3個環(huán)境監(jiān)控儀表共用一個3線的半 雙工485總線進4亍通訊,具體如圖4所示。
半雙工485總線上,控制板為主設備,3個儀表為從設備,分別為溫度 表、濕度表以及電源監(jiān)控儀表。主從之間通過命令/響應方式交互,各儀表 命令報文不同、編址不同。各儀表僅響應編址指向自己的命令。數(shù)據(jù)格式 1個啟動位、1個停止位、無校驗位以及8bit數(shù)據(jù),速率為2400bps。
該實例中包括兩種方式方式E是在向UART寫4寺發(fā)數(shù)據(jù)發(fā)送前進行 冗余數(shù)據(jù)插入,適用在應用層實現(xiàn);方式F則是在向UART寫完待發(fā)數(shù)據(jù) 后進行冗余數(shù)據(jù)插入,適用在驅(qū)動層實現(xiàn)。
以上兩種實現(xiàn)方式?jīng)]有實質(zhì)差別,區(qū)別僅在于冗余數(shù)據(jù)的插入階段的不同。
方式E的步驟如圖5所示
步驟500: CPU置通道0外接總線驅(qū)動器為只發(fā)模式(send only mode );
步驟510: CPU構(gòu)造在待發(fā)數(shù)據(jù)序列末尾增加一個字節(jié),生成新的待發(fā) 數(shù)據(jù)序列,并發(fā)送新數(shù)據(jù)序列,直至新數(shù)據(jù)序列的最后一個字節(jié)已寫入 UART;
步驟520: UART通道O產(chǎn)生發(fā)送存儲寄存器空中斷,在該中斷的中斷 服務函數(shù)里關閉通道0外接總線驅(qū)動器的發(fā)送使能,用于消除冗余數(shù)據(jù)對系 統(tǒng)的影響;
步驟530: CPU打開通道0外接總線驅(qū)動器的接收^f吏能,準備接收從設 備的響應電文。
方式F的步驟如圖6所示
步驟600: CPU置通道0外接總線驅(qū)動器為只發(fā)模式(send only mode );
步驟610: CPU向UART寫入待發(fā)數(shù)據(jù),直至最后一個數(shù)據(jù)產(chǎn)生的發(fā) 送存儲寄存器空中斷,在該中斷里再向UART通道0的發(fā)送存儲寄存器寫 入一個任意字節(jié)并退出中斷;
步驟620: UART通道O再次產(chǎn)生發(fā)送存儲寄存器空中斷,在該中斷的中斷服務函數(shù)里關閉通道0外接總線驅(qū)動器的發(fā)送使能,用于消除冗余數(shù)據(jù) 對系統(tǒng)的影響;
步驟630: CPU打開UART通道O外接總線驅(qū)動器的接收使能,準備接 收,人i殳備的響應電文。
經(jīng)過實際測試證明,本發(fā)明所述的方法在沒有額外硬件資源支持的情況 下,達到了當前方案可以達到的最佳性能。
本發(fā)明所述方法簡捷、清晰,易于實現(xiàn)且無額外硬件資源需求,可以作 為UART應用于半雙工點對點、總線式全雙工場景下的一個通用方法,隨 UART廣泛應用于串行通訊領域。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不 局限于此,任何熟悉該技術的人在本發(fā)明所揭露的技術范圍內(nèi),可輕易想到 的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范 圍應該以權利要求的保護范圍為準。
權利要求
1、一種通用異步收發(fā)報機的控制方法,其特征在于,包括通信主控方的CPU在寫入通用異步收發(fā)報機UART的待發(fā)數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù),并將所加所述冗余數(shù)據(jù)寫入該UART;當所述CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器空中斷時,所述CPU通過該發(fā)送存儲寄存器空中斷對所述UART進行控制。
2、 如權利要求1所述的控制方法,其特征在于,所述通信主控方的CPU在寫入所述UART的待發(fā)數(shù)據(jù)序列末尾增加一 冗余數(shù)據(jù),并將所加所述冗余數(shù)據(jù)寫入該UART,是指所述CPU在發(fā)送給所述UART寫入待發(fā)數(shù)據(jù)序列前,在發(fā)送給UART 的待發(fā)數(shù)據(jù)序列末尾直接增加一冗余數(shù)據(jù)形成新凄t據(jù)序列,并將該新數(shù)據(jù)序 列寫入該UART;或者所述CPU向所述UART寫入完待發(fā)數(shù)據(jù)序列后,再向該UART的 發(fā)送存儲寄存器寫入一 冗余數(shù)據(jù)。
3、 如權利要求1所述的控制方法,其特征在于,所述CPU將所述新數(shù)據(jù)序列寫入所述UART前,還包括所述CPU設 置外接總線驅(qū)動器為發(fā)送模式,并使能所述UART當前通道的發(fā)送功能。
4、 如權利要求1所述的控制方法,其特征在于,當所述CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器 空中斷時,所述CPU通過該發(fā)送存儲寄存器空中斷對所述UART進行控制, 是指所述CPU關閉所述UART當前通道發(fā)送功能或者關閉所述UART相 應總線驅(qū)動器的發(fā)送功能,消除該冗余數(shù)據(jù)對系統(tǒng)的影響。
5、 如權利要求4所述的控制方法,其特征在于,所述CPU關閉所述UART當前通道發(fā)送功能是指所述CPU在所述中斷 的中斷服務函數(shù)里關閉所述UART當前通道發(fā)送功能。
6、 一種通用異步收發(fā)報機的控制裝置,其特征在于,包括CPU,用于在寫入所述通用異步收發(fā)報機UART的待發(fā)數(shù)據(jù)序列 末尾增加一冗余數(shù)據(jù),并將所加所述冗余數(shù)據(jù)寫入該UART;當將所加所述 冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器空中斷時,通過該發(fā)送存儲 寄存器空中斷對所述UART進行控制。
7、 如權利要求6所述的控制裝置,其特征在于,所述CPU在寫入所述UART的待發(fā)數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù),并 將所加所述冗余數(shù)據(jù)寫入該UART,是指所述CPU在發(fā)送給所述UART寫入待發(fā)數(shù)據(jù)序列前,在發(fā)送給UART 的待發(fā)數(shù)據(jù)序列末尾直接增加一冗余數(shù)據(jù)形成新數(shù)據(jù)序列,并將該新數(shù)據(jù)序 列寫入該UART;或者所述CPU向所述UART寫入完待發(fā)數(shù)據(jù)序列后,再向該UART的 發(fā)送存儲寄存器寫入一 冗余數(shù)據(jù)。
8、 如權利要求6所述的控制裝置,其特征在于,所述CPU,還用于將所述新數(shù)據(jù)序列寫入所述UART前,設置外接總 線驅(qū)動器為發(fā)送模式,并使能所述UART當前通道的發(fā)送功能。
9、 如權利要求6所述的控制裝置,其特征在于,所述CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器空 中斷時,通過該發(fā)送存儲寄存器空中斷對所述UART進行控制,是指所 述CPU關閉所述UART當前通道發(fā)送功能或者關閉所述UART相應總線驅(qū) 動器的發(fā)送功能,消除該冗余數(shù)據(jù)對系統(tǒng)的影響。
10、 如權利要求9所述的控制裝置,其特征在于,所述CPU關閉所述UART當前通道發(fā)送功能是指所述CPU在所述中斷 的中斷服務函數(shù)里關閉所述UART當前通道發(fā)送功能。
全文摘要
本發(fā)明公開了一種通用異步收發(fā)報機的控制方法及其裝置,包括通信主控方的CPU在寫入UART的待發(fā)數(shù)據(jù)序列末尾增加一冗余數(shù)據(jù),并將所加所述冗余數(shù)據(jù)寫入該UART;當CPU將所加所述冗余數(shù)據(jù)寫入所述UART產(chǎn)生發(fā)送存儲寄存器空中斷時,所述CPU通過該發(fā)送存儲寄存器空中斷對所述UART進行控制。用本發(fā)明,能夠在UART現(xiàn)有硬件資源的基礎上實現(xiàn),無需增加硬件的額外開銷,軟件開銷小且易于實現(xiàn),提高了控制準確性。
文檔編號H04L1/22GK101631012SQ20091016369
公開日2010年1月20日 申請日期2009年8月13日 優(yōu)先權日2009年8月13日
發(fā)明者偉 朱, 冉 賈 申請人:中興通訊股份有限公司