移動終端處理器串口喚醒與流控的方法
2023-06-03 11:34:06 1
專利名稱:移動終端處理器串口喚醒與流控的方法
技術領域:
本發明屬於移動終端技術領域,具體地說是涉及到適用於電池供電終端 設備內部處理器之間的串口通信方法。
技術背景移動終端產品使用電池供電,對功耗要求很高。為了降低電量消耗,產 品內部大多數晶片均可以進入休眠狀態,此時晶片耗電量減少,但是晶片內 大多數器件,包括串口均處於關閉狀態。因此晶片休眠時不能進行串口數據 的收發。進行數據傳輸時,發送端需要先喚醒接收端,然後再進行數據的發 送。如果數據發送時接收端還沒準備好,就會導致數據丟失。目前發送端喚醒接收端的方法有兩種, 一種是通過串口本身電平變化喚 醒接收端,即發送端在發送有用數據前,先發送幾個字節的喚醒數據,喚醒 數據會導致串口電平變化,從而喚醒接收端。但是有些晶片不支持串口喚醒,這時就只能採用另一種方法應用GPIO即通用輸入輸出埠的電平變化導 致中斷喚醒。發送端與接收端通過一根互連線相連,連線兩端均為GPIO端 口,發送端設為輸出,接收端設為輸入。發送端發送時通過改變自身GPIO 埠輸出而控制連線電平變化,從而使接收端的GPIO埠檢測到電平跳變 產生硬體中斷,此中斷會喚醒接收端。如果是雙向通信則需要兩根連接線, 兩端各佔用兩個GPIO。以上所述的這兩種喚醒接收端的技術方式都很簡單,但都存在一個缺點。 即沒有接收端反饋的喚醒確認信號,發送端發出喚醒動作後等待一段固定時 間,然後就開始發送數據,而這時接收端可能處於不同的狀態,導致接收端 每次準備好接收所需要的時間長短不同。因此發送端等待的固定時間難以確 定,如果等待的時間過短,這就有可能造成發送端發送時,接收端還沒有準 備好,造成數據丟失。如果等待的時間過長,要求發送端在發送前必須等待 足夠長的時間以保證接收端可以準備好,這樣就降低了傳輸效率。如果在以上所述的兩種喚醒接收端的技術方式上增加喚醒確認信號的步 驟,要求接收端返回喚醒確認信息,也存在一個問題,因為發送端發送數據
時接收端可能正處於休眠狀態,從接收端發現串口電平變化到真正開始接收 數據需要一定時間,這就造成開頭部分數據丟失。因此接收端無法判斷接收 到的具體數據是什麼,也就不可能返回確認信息,這就需要發送端重發喚醒 數據,從而導致效率下降。而GPIO電平喚醒方式可以使用另外一根互連線 實現喚醒確認,但這樣一來如果是雙向通信就需要4根連接線來進行喚醒與 喚醒確認。而移動終端追求微型化,其所用晶片的埠資源比較緊張,通常無法提供這麼多的GPIO埠。一般情況下,發送端與接收端都會有兩個緩衝區(BUFFER)分別緩衝 發送和接收的數據。當接收端收到數據後,數據存放在接收BUFFER中,'只 有在數據處理完後才能刪除。如果有時接收到的數據需要較長的處理時間, 而此時串口一直還在接收,就有可能造成接收緩衝區溢出,從而導致數據丟 失。而且損壞的數據也要佔用接收緩衝區的空間,等待處理器進行判斷、刪 除,這就導致接收緩衝區的數據溢出情況進一步惡化。對於數據溢出的解決方法有三種。方法一是降低串口的物理傳輸速率, 但這會造成系統整體性能的下降,且仍然不能保證在所有情況下數據均能夠 得到及時的處理。方法二是採用硬體流控,需要在發送端與接收端之間增加 四根專用連接線。硬體流控根據接收FIFO是否已滿來控制是否發送,這就 需要軟體在接收BUFFER已滿的信息時就停止取FIFO的操作,這種硬體流 控的方法也增加了軟體的複雜性,且硬體流控需要額外佔用4個埠,在很 多情況下是不可接受的。方法三是釆用軟體流控,發送端與接收端之間通過 串口發送指令通知對方暫停或繼續發送來避免數據的處理速度趕不上傳輸速 度。這增加了軟體實現的複雜度,流控指令本身也增加了系統的負擔。且某 些情況下流控指令可能丟失,從而導致流控失敗。基於此,本發明以一種巧妙可靠的方式來解決移動終端處理器之間串口 喚醒和數據溢出問題。 發明內容本發明的目的在於提供一種簡單可靠的處理器之間串口喚醒和流控的方 法,在串口通信中使用兩根控制線,實現了串口雙向喚醒、雙向喚醒確認、 雙向流控和死機監測。為了達到上述目的,本發明釆用以下技術方案予以實現
移動終端處理器串口喚醒與流控的方法,包括以下步驟 第一處理器設置管腳為輸出狀態,改變與第二處理器之間連接線的電平高低;第二處理器接收到連接線的電平變化,產生中斷,改變電平觸發的類型; 第一處理器設置管腳返回為輸入狀態,連接線也返回原來的電平形成一 個脈衝;第二處理器產生中斷,關閉控制管腳的中斷,並退出休眠狀態,查看接 收緩衝區是否有空間;如果接收緩衝區有空間且串口可用,則設置管腳為輸出狀態,改變連接 線的電平;第一處理器響應電平變化,關閉控制管腳的中斷,通過與第二處理器連 接的數據線開始發送數據。在本發明的技術方案中,還具有以下技術特徵第二處理器設置管腳返 回輸入狀態,連接線也返回原來電平,形成一個脈衝,第二處理器形成的確 認喚醒脈衝寬度比第一處理器形成的喚醒脈衝寬度大。第一處理器和第二處理器之間的連接線上設置有上拉電阻,在處理器管 腳為輸入狀態時,連接線保持為高電平,第一處理器形成的喚醒脈衝和第二 處理器形成的確認喚醒脈衝均為一個高低髙脈衝,脈衝寬度範圍是l微秒至 10毫秒。在本發明的技術方案中,還具有以下技術特徵所述的兩個處理器控制 管腳均為GPIO通用輸入輸出埠。所述的兩個處理器均釆用電平觸發中斷, 中斷類型在高電平觸發和低電平觸發之間切換。在本發明的技術方案中,還具有以下技術特徵第二處理器發送確認喚 醒脈衝時設置串口休眠定時器。在本發明的技術方案中,還具有以下技術特徵如果第一處理器在時限 內沒有接收到第二處理器發送的確認喚醒脈衝,則再次發送喚醒脈衝,第一 處理器再次發送喚醒脈衝的前後瞬間判斷一下連接線的電平狀態。與現有技術相比,本發明的優點和積極效果是應用電平觸發中斷在兩 個處理器之間發送喚醒脈衝和確認喚醒脈衝的步驟,節省了把處理器從休眠 狀態喚醒的時間,最大程度上保證了串口傳輸的快速、穩定、可靠。
圖1是本發明處理器之間通信埠連接的示意圖; 圖2是本發明的流程圖;圖3是本發明處理器之間喚醒和確認喚醒的匯報過程示意圖; 圖4是本發明處理器多次發送喚醒脈衝的示意圖。
具體實施方式
下面結合附圖和實施例對本發明作進一步的描述。如圖l所示,為實現雙向通信,第一處理器1和第二處理器2之間用於 通信的有4根連接線。其中兩根單向數據線用於數據的收發,另外兩根雙向 控制線用於喚醒、喚醒確認和流控。如果兩個處理器之間只是單向通信,則 只需要一根數據線與 一根控制線。控制線兩端管腳均為GPIO管腳,處理器可以把管腳設置為輸入或輸出 狀態,並且管腳可以根據輸入電平變化產生硬體中斷。在每一條控制線上連 接有上拉電阻,以保證控制線兩端管腳在均設為輸入時連接線會保持在高電 平上。此上拉電阻可以是外接的,也可以是晶片內置的。上拉電阻阻值需要 根據晶片特性而定,阻值應儘量大以減少耗電。在第一處理器內部,有一個發送緩衝區11和接收緩衝區12,通過對應 的寄存器13和寄存器14發送和接收數據,在第二處理器內部,有一個接收 緩衝區21和發送緩衝區22,通過對應的寄存器23和寄存器24接收和發送 數據。如圖2所示,兩個處理器之間進行喚醒和確認喚醒以及流控過程的具體 步驟如下201步驟第一處理器設置管腳為輸出狀態,改變與第二處理器之間連 接線的電平高低。第一處理器為了發送喚醒信號,先把控制管腳由輸入狀態設置為輸出狀 態,連接線置為低電平。步驟202:第二處理器接收到連接線的電平變化,產生中斷,改變電平 觸發的類型,管腳由低電平觸發設置為高電平觸發。
步驟203:第一處理器設置管腳返回為輸入狀態,連接線也返回原來的 高電平,從而形成一個高低高脈衝作為喚醒信號。步驟204:第二處理器產生中斷,關閉控制管腳的中斷,並退出休眠狀態。步驟205:第二處理器判斷接收緩衝區是否有空間且串口是否可用。判斷結果為否,則說明第二處理器沒有做好數據接收的準備,不能接收 數據,繼續進行步驟206:即第一處理器等待一定時間後,返回到201步驟, 進行再一次的喚醒過程。再次喚醒過程可以重複多次。判斷結果為是,則說明第二處理器已經做好數據接收的準備,能夠接收 數據,進行步驟207:第二處理器設置管腳為輸出狀態,連接線為低電平。步驟208:第一處理器響應電平變化,關閉控制管腳的中斷,通過與第 二處理器連接的數據線開始發送數據。步驟209:第二處理器設置管腳返回輸入狀態,連接線也返回原來電平, 形成 一個高低高脈衝作為確認喚醒的信號。因為使用邊緣觸發中斷來檢測GPIO管腳電平變化可靠性不高,本技術 方案中使用的是電平觸發中斷。實現時,中斷類型需要在高電平觸發和低電 平觸發之間來回切換。控制線變為低電平後,GPIO管腳會收到低電平中斷。 此時中斷類型需要更改為高電平觸發,這樣當控制線變回高電平時,就會產 生高電平中斷。收到高電平中斷後管腳的中斷類型會重新變為低電平觸發, 來檢測下一個電平變化。圖3說明的是以第一處理器為發送端,第二處理器為接收端的一次完整 的通信過程。圖中A點處串口處於非工作狀態,此時控制線兩端管腳均設為 輸入。因為有上拉電阻的存在,因此控制線保持在高電平。此時第一處理器 的控制管腳不響應中斷,第二處理器的控制管腳設為響應低電平中斷。在圖3中B點,當第一處理器準備向第二處理器發送數據時,發送端先 將控制管腳設為輸出低電平,從而導致控制線變為低電平。第二處理器發現 其控制管腳變為低電平,產生低電平中斷。在第二處理器的中斷處理函數中 不做其它操作,只是將控制管腳的中斷類型改為高電平觸發,等待控制線變 回高電平。在圖3中C點,第一處理器將控制管腳重新設為輸入,並設置管腳響應 低電平中斷。因為上拉電阻的關係,控制線會立刻變為高電平,從而形成一 個高低高脈衝。電平的變化會導致第二處理器產生中斷,第二處理器的中斷 處理函數中首先關閉控制管腳的中斷。然後通知系統開始喚醒及準備接收工 作。作為喚醒信號的高低高脈衝的寬度,即持續時間需要根據第二處理器的 特性來確定。有些處理器可以檢測到幾微秒寬的脈衝,而有些處理器休眠時 只能檢測到幾亳秒寬的脈衝,因此脈衝寬度設置範圍是l微秒至IO毫秒。第二處理器退出休眠狀態後,首先査看接收緩衝區BUFFER剩餘空間是否足夠。 如果剩餘空間足夠,而且串口已經準備好,就會將控制管腳從輸入改為輸出 低電平,在圖3中D點,第一處理器此時響應低電平中斷,因此會被觸發。第一 處理器被觸發後,就可以知道第二處理器已經準備好接收數據了。則第一處 理器關閉管腳中斷響應,然後立刻開始發送數據。因此在D點串口已經可以 開始發送數據了 ,不需要等到控制線回到高電平後再發送。在圖3中E點,第二處理器輸出低電平足夠長時間後,重新將管腳置為 輸入,且中斷設為低電平觸發。此時連線會立刻回到高電平,形成一個高低 高脈衝。脈衝寬度必須足夠寬以確認第一處理器可以如前所述觸發低電平中 斷。至此,喚醒與喚醒確認過程結束。如果在收到喚醒脈衝時,第二處理器已經處於可接收數據狀態,會立即 返回確認脈衝。但如果第二處理器此時忙於某種操作,如處於鎖中斷狀態, 或接收BUFFER剩餘空間不夠,會過一段時間當第二處理器滿足接收條件後 才返回確認脈衝。而第一處理器必須等到確認脈衝後才會開始發送數據,這 就相當於放慢了串口傳輸速率,做到了自動限速。確認脈衝的存在極大的增 強了通信的可靠性,防止數據流量大造成的數據丟失問題的發生。在第二處 理器作為接收端,發送確認脈衝時會設置串口休眠定時器,當串口不再工作、 相關任務完成,且定時器到時,第二處理器會重新進入休眠狀態。為了降低 電量消耗,收到喚醒脈衝後第二處理器設置的串口休眠定時器時間很短,如 果需要串口長時間處於工作狀態,則需要第一處理器作為發送端在指令中指 定串口休眠定時器時間。喚醒脈衝和確認脈衝同時有第二個功能,即確認接收端即第二處理器是 否處於死機狀態。在某些極端狀態下,處理器可能會死機,不再響應任何操
作。而如果接收端死機則不會回復確認脈衝,發送端即第一處理器可以很容 易的通過確認脈衝的有無來檢測接收端是否可正常工作。這通常用於主控端 判斷被控端是否異常,主控端會定期向被控端發送喚醒脈衝,如果收不到確 認脈衝則說明被控端死機,主控端會據此進行處理,如控制被控端重啟等操 作,避免系統長時間處於異常狀態。如圖4所示,因為各種原因,第一處理器發出的第一個喚醒脈衝在時限 內可能得不到確認脈衝回復。此時第一處理器作為發送端會發送第二個喚醒 脈衝。喚醒脈衝根據情況可以重發多次,比如喚醒脈衝最大重發次數為5次, 如果最後一次發送的喚醒脈衝仍未得到確認,則說明接收端工作異常。如果第一處理器發送多個喚醒脈衝,在某種情況下,第二處理器返回的 確認脈衝也可能會有多個。因為發送端控制管腳在收到第一個確認脈衝後就 不再響應中斷,這樣除第一個確認脈衝外其它確認脈衝並不會被發送端檢測 到。接收端的第一個確認脈衝有可能和發起端第二個喚醒脈衝重合,從而造 成發送端收不到確認。解決辦法為確認脈衝要比喚醒脈衝寬。發送端在發送 第二個喚醒脈衝前瞬間判斷 一下連線的當前狀態,如果為低則說明已經收到了確認脈衝,只是中斷還沒有來的及處理,因此第二個喚醒脈衝將不再發送。 發送端在第二個喚醒脈衝發送後立刻再判斷一下連線狀態,如果為低則說明 正在接收確認脈衝,不需再等待確認就可以直接進行串口數據發送。脈衝信號寬度如果是幾微秒,可以釆用死循環的方法來實現。移動終端 處理器的主頻經常是可變的,處理器主頻不同時,相同等待時間死循環次數 不同。因此需要根據當前處理器的主頻來判斷執行死循環的次數。而如果脈 衝信號寬度為毫秒級,則只能使用定時器的方法實現。本發明應用電平觸發中斷在兩個處理器之間發送喚醒脈衝和確認喚醒脈 衝的步驟,提高了串口傳輸的可靠性。
權利要求
1.移動終端處理器串口喚醒與流控的方法,其特徵在於包括以下步驟第一處理器設置管腳為輸出狀態,改變與第二處理器之間連接線的電平高低;第二處理器接收到連接線的電平變化,產生中斷,改變電平觸發的類型;第一處理器設置管腳返回為輸入狀態,連接線也返回原來的電平形成一個脈衝;第二處理器產生中斷,關閉控制管腳的中斷,並退出休眠狀態,查看接收緩衝區是否有空間且串口是否可用;如果接收緩衝區有空間且串口可用,則設置管腳為輸出狀態,改變連接線的電平;第一處理器響應電平變化,關閉控制管腳的中斷,通過與第二處理器連接的數據線開始發送數據。
2. 根據權利要求1所述的移動終端處理器串口喚醒與流控的方法,其 特徵在於第二處理器設置管腳返回輸入狀態,連接線也返回原來電平,形成 一個脈衝。
3. 根據權利要求1或2所述的移動終端處理器串口喚醒與流控的方法, 其特徵在於第二處理器形成的確認喚醒脈衝寬度比第一處理器形成的喚醒脈 衝寬度大。
4. 根據權利要求1所述的移動終端處理器串口喚醒與流控的方法,其 特徵在於第一處理器和第二處理器之間的連接線上設置有上拉電阻,在處理 器管腳為輸入狀態時,連接線保持為高電平。
5. 根據權利要求1、 2、 3或者4所述的移動終端處理器串口喚醒與流 控的方法,其特徵在於第一處理器形成的喚醒脈衝和第二處理器形成的確、認 喚醒脈衝均為一個高低高脈衝,脈衝寬度範圍是l微秒至IO亳秒。
6. 根據權利要求1、 2、 3或者4所述的移動終端處理器串口喚醒與流, 控的方法,其特徵在於所述的兩個處理器控制管腳均為GPIO通用輸入輸出 埠。
7. 根據權利要求1或者2所述的移動終端處理器串口喚醒與流控的方 法,其特徵在於所述的兩個處理器均釆用電平觸發中斷,中斷類型在高電平 觸發和低電平觸發之間切換。
8. 根據權利要求1所述的移動終端處理器串口喚醒與流控的方法,其特徵在於第二處理器發送確認喚醒脈衝時設置串口休眠定時器。
9. 根據權利要求1所述的移動終端處理器串口喚醒與流控的方法,其 特徵在於如果第一處理器在時限內沒有接收到第二處理器發送的確認喚醒脈 衝,則再次發送喚醒脈衝。
10. 根據權利要求3或者9所述的移動終端處理器串口喚醒與流控的方 法,其特徵在於第一處理器再次發送喚醒脈衝的前後瞬間判斷一下連接線的 電平狀態。
全文摘要
本發明公開一種移動終端處理器串口喚醒與流控的方法,包括以下步驟第一處理器設置管腳為輸出狀態,改變與第二處理器之間連接線的電平高低;第二處理器接收到連接線的電平變化,產生中斷,改變電平觸發的類型;第一處理器設置管腳返回為輸入狀態,連接線也返回原來的電平形成一個脈衝;第二處理器產生中斷,關閉控制管腳的中斷,並退出休眠狀態,查看接收緩衝區是否有空間且串口是否可用;如果接收緩衝區有空間且串口可用,則設置管腳為輸出狀態,改變連接線的電平;第一處理器響應電平變化,關閉控制管腳的中斷,通過與第二處理器連接的數據線開始發送數據,在串口通信中使用兩根控制線,實現了串口雙向喚醒、雙向喚醒確認、雙向流控和死機監測。
文檔編號H04B1/40GK101150809SQ20071011308
公開日2008年3月26日 申請日期2007年11月3日 優先權日2007年11月3日
發明者姚利剛 申請人:青島海信移動通信技術股份有限公司