專利名稱::雙端口隨機存儲器同步通信的方法及裝置的制作方法
技術領域:
:本發(fā)明涉及同步通信技術,具體地,涉及一種單板上兩個獨立CPU使用雙端口隨機存儲器(DPRAM,DoublePortRandomAccessMemory)同步通信的方法及裝置。
背景技術:
:隨著嵌入式系統(tǒng)的不斷發(fā)展,一個嵌入式單板上集成的功能越來越多。只使用一個嵌入式CPU去實現(xiàn)和管理單板上的所有功能,已經讓設計者越來越感到力不從心。越來越多的設計者開始采用多個嵌入式CPU,對單板上的業(yè)務和功能進行分散式管理。目前,最常用的分"^管理方式是使用兩個CPU,兩個CPU之間的通信方式有很多種串口、網口、DPRAM等等。對于串口和網口的通信方式,無論是硬件還是軟件,技術上都非常成熟,在設計和開發(fā)中,使用起來通常很方便。但是,當單板上的兩個CPU之間需要進行大批量的數(shù)據傳輸時,串口和網口速率太低,往往不能滿足通信的需要,DPRAM則是此時最好的選擇。使用DPRAM作為單板上兩個CPU間的通信方式,已經廣泛應用于很多嵌入式系統(tǒng)的設計之中。但是,DPRAM僅僅是一個隨機存儲器(RAM),沒有與串口和網口芯片類似的底層協(xié)議。因此,當期望把DPRAM的驅動設計為高效、全雙工模式時,DPRAM自身不能對兩端的通信初始化進行協(xié)商同步。在以往的設計中,通常把DPRAM的驅動設計為簡單低效的查詢半雙工模式,從而避免協(xié)商同步的過程?;蛘撸袲PRAM兩端的CPU設計為主從模式,主控CPU初始化DPRAM兩端的驅動,然后,啟動從屬CPU,從而實現(xiàn)初始化的協(xié)商同步。現(xiàn)有技術在將DPRAM設計為兩個CPU間的通信通道時,同步需求主要體現(xiàn)在三個方面(l)初始化DPRAM兩端驅動,建立通信鏈路的協(xié)商過程;(2)當通信鏈路出現(xiàn)異常時,重新恢復通信鏈路的再次協(xié)商過程;(3)使用DPRAM鏈路收發(fā)消息后,相互通知的過程。在這三種情況下,僅僅依賴DPRAM本身是無法完成同步的,必須依靠必要的外部手段。
發(fā)明內容有鑒于此,本發(fā)明的主要目的在于提供一種DPRAM同步通信的方法,能實現(xiàn)DPRAM的同步通信。本發(fā)明的另一目的在于提供一種高效的通過DPRAM同步通信的裝置。為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的一種雙端口隨機存儲器同步通信的方法,設置CPU通信的中斷標識和鏈路標識符,該方法包4舌A、異步啟動兩個CPU,兩個CPU分別向只于方發(fā)送中斷;B、收到中斷的CPU響應對方CPU,并建立同步通信通道。步驟A中啟動每個CPU的過程進一步包括Al、關閉CPU自身的雙端口隨機存儲器中斷,將鏈路標識符置0;A2、初始化CPU自身的雙端口隨機存儲器驅動,并向雙端口隨機存儲器另一端的CPU發(fā)送REQ中斷請求;A3、CPU開啟自身的雙端口隨機存儲器中斷。所述步驟B進一步包括Bl、收到中斷的CPU讀取雙端口狀態(tài)寄存器中的值,并將相應的雙端口狀態(tài)寄存器清零;B2、判斷所述雙端口狀態(tài)寄存器值的bitO位是否為1,如果是,則為REQ中斷,響應REQ請求,否則,進入步驟B3;B3、判斷所述雙端口狀態(tài)寄存器值的bill位是否為1,如果是,則為ACK中斷,CPU將自身的鏈路標識符置1,結束流程;否則,進入步驟B4;B4、判斷所述雙端口狀態(tài)寄存器值的bit2位是否為1,如果是,則為讀中斷,CPU喚醒自身的寫任務;否則,進入步驟B5;B5、判斷所述雙端口狀態(tài)寄存器值的bit3位是否為1,如果是,則為寫中斷,CPU喚醒自身的讀任務,否則,不做處理。步驟B2中所述響應REQ中斷進一步包括B21、CPU關閉自身雙端口隨機存儲器中斷,并將鏈路標識符置0;B22、CPU初始化自身雙端口隨機存儲器的驅動,并向另一CPU發(fā)送ACK中斷;B23、CPU將《連^4示識符置1,并開啟雙端口隨才幾存l渚器中斷。一種雙端口隨機存儲器同步通信的裝置,該裝置包括第一CPU、第二CPU、第一雙端口狀態(tài)寄存器、第二雙端口狀態(tài)寄存器、雙端口隨機存儲器;其中,第一雙端口狀態(tài)寄存器與第一CPU對應,第二雙端口狀態(tài)寄存器與第二CPU對應;雙端口隨機存儲器一端連接第一CPU,另一端連接第二CPU;所述兩個雙端口狀態(tài)寄存器的bit0到bit30位為表明雙端口隨機存儲器中斷類型的狀態(tài)位,以及bit31位為中斷觸發(fā)位。第一CPU對第一雙端口狀態(tài)寄存器只寫,對第二雙端口狀態(tài)寄存器只讀;第二CPU對第一雙端口狀態(tài)寄存器只讀,對第二雙端口狀態(tài)寄存器只寫;第一雙端口狀態(tài)寄存器的bit31位引出,連接到第二CPU的中斷控制器,作為第二CPU的一個中斷輸入信號;第二雙端口狀態(tài)寄存器的bit31位引出,連接到第一CPU的中斷控制器,作為第一CPU的一個中斷輸入信號。本發(fā)明在DPRAM同步通信的設計中,引入了中斷標識和表征兩個CPU之間通信鏈路連接情況的鏈路標識符,中斷標識在兩個CPU之間通信時,將CPU自身的動作通知對方CPU,鏈路標識符用來幫助CPU判斷,是否可以使用通信鏈路進行同步通信,從而不需要增加新的硬件設備即實現(xiàn)了DPRAM的同步通信,且安全可靠,提高了通信的效率。圖1為本發(fā)明一個實施例的硬件示意圖2為本發(fā)明DPRAM通信鏈路建立流程圖3為CPIJ1啟動流程圖4為CPU1中斷類型判斷流程圖5為CPU1響應REQ中斷流程圖。具體實施例方式下面結合一個工程實施例,對本發(fā)明方法的具體實施作進一步的詳細描述。本發(fā)明一個實施例的裝置如圖1所示,單板上使用了兩個完全獨立的CPU,分別是CPU1和CPU2。DPRAM和用于同步功能的兩個32位雙端口狀態(tài)寄存器statl和stat2在同一個基于現(xiàn)場可編程門陣列(FPGA,FieldProgrammableGateArray)中實現(xiàn)。statl與CPU1對應,stat2與CPU2對應;DPRAM—端連接CPU1,另一端連接CPU2;狀態(tài)寄存器的bit0到bit30位為狀態(tài)位,用于表明DPRAM中斷(int)的類型,bit31位為中斷觸發(fā)位,用于使對方CPU觸發(fā)中斷。statl和stat2各bit位的定義相同,具體如表一所示<table>tableseeoriginaldocumentpage7</column></row><table>在DPRAM的驅動中,設計了一個標識DPRAM鏈路連接狀態(tài)的標識符flag,表示鏈路連接狀態(tài)。當flag等于1時,表示鏈路處于連接狀態(tài);當flag等于0時,表示鏈路處于斷開狀態(tài)。CPU在向DPRAM發(fā)送或讀取消息之前,必須先判斷這個標識符。只有當flag等于l時,才能發(fā)送或讀取消息。通常情況下,單板上電后,兩個CPU啟動時間會有差異,以CPUl比CPU2先啟動為例,DPRAM通信鏈^^的建立過程如圖2所示步驟201:CPU1、CPU2異步啟動,分別向對方發(fā)送中斷。CPUl與CPU2啟動過程基本相同,以CPUl為例,啟動步驟如圖3所示,包括步驟201a:關閉DPRAM中斷;步驟201b:將flag標識符置O,即設置為斷開狀態(tài);步驟201c:初始化CPU1的DPRAM驅動;步驟20Id:向DPRAM另一端的CPU2發(fā)送REQ中斷;CPUl向statl寄存器寫入0x80000001,即把statl的bitO和bit31置1,向CPU2發(fā)出REQ中斷,進入等待ACK中斷的就緒狀態(tài)。步驟201e:CPU1開啟DPRAM的中斷。由于CPU2啟動較CPUl慢,因此,CPUl發(fā)給CPU2的中斷信號,可能會完全丟失。CPU2啟動后,如果沒有收到CPUl的中斷請求,就執(zhí)行與CPUl完全類似的步驟,只是在步驟201d中,CPU2是向stat2寄存器寫入0x80000001,以達到向CPUl發(fā)出REQ中斷且自身進入等待ACK中斷狀態(tài)之目的。如杲收到CPUl的REQ中斷請求,則CPU2直接進入下文所述的中斷響應流程。步驟202:CPU根據接收的中斷做出響應。當收到DPRAM中斷后,CPU對中斷類型進行判斷,才艮據不同的中斷類型進行操作,以CPUl為例,判斷流程如圖4所示,包括以下步驟步驟202a:CPU1響應中斷時,先讀取stat2的值,再把stat2清零。步驟202b:根據讀取的stat2寄存器的內容,判斷stat2寄存器的bitO是否為1;若stat2的bit0為1,則中斷的類型是REQ中斷,表明CPU2的DPRAM驅動已經完成初始化,處于就緒狀態(tài),CPU1對CPU2的REQ中斷進行響應;若stat2的bit0為0,表示中斷不是REQ中斷,進入步驟202c;步驟202c:判斷stat2寄存器的bitl是否為1。若stat2的bitl為1,表示中斷是CPU2發(fā)過來的ACK中斷,這表明CPU2已經收到CPU1發(fā)給它的REQ中斷,并完成了對DPRAM驅動的初始化,DPRAM通信鏈路已經建立成功,CPUl將自身的flag設置為1,結束流程。若stat2的bit]為0,則表示收到的中斷可能是RD中斷或WR中斷,需要進一步判斷stat2的bit2和bit3,進入步驟202d;步驟202d:判斷stat2寄存器的bit2是否為1。若stat2的bit2為1,則中斷的類型是RD中斷,喚醒自身睡眠中的寫任務;若stat2的bit2為0,則進入步驟202e;步驟202e:判斷stat寄存器的bit3是否為1。若stat2的bit3為1,則中斷的類型是WR中斷,喚醒自身睡眠中的讀任務。若stat2的bit3為0,表明該請求不是以上類型的中斷,可能由于系統(tǒng)的某些信號錯誤導致,則CPU1對該中斷不做任何處理。在步驟202b中,當CPU1判斷出中斷的類型是RF.Q時,對這個中斷的進一步響應流程,如圖5所示,包括以下步驟步驟202b1:CPU1關閉DPRAM的中斷;步驟202b2:CPU1設置flag為0;步驟202b3:CPU1初始化DPRAM的驅動;步驟202b4:CPUl向DPRAM另一端的CPU2,發(fā)送ACK中斷;步驟202b5:CPUl設置flag為1;步驟202b6:CPUl開啟DPRAM的中斷。CPU在建立及使用通信鏈路的過程中,對每次中斷的類型都需要根據以上判斷,做出響應的處理。步驟203:DPRAM通道建立成功。標識符flag為1,表明DPRAM兩端的CPU都已初始化完成,DPRAM通信鏈路處于連接狀態(tài),CPU之間就可以使用DPRAM通道讀寫消息,實現(xiàn)相互通信。每讀寫完一條消息,CPU向對方CPU發(fā)送RD或WR中斷,通知對方同步。在收發(fā)消息的通信過程中,DPRAM鏈路可能會因某些意外因素出現(xiàn)異常,導致鏈路斷開。一個用于判斷DPRAM鏈路是否出現(xiàn)異常的簡單方法是在CPU之間通信的消息中增加校驗碼,收到消息的CPU對校驗碼進行校驗,校驗正常,表明鏈路正常,當連續(xù)多次校-驗出錯時,就認為DPRAM鏈路出現(xiàn)異常。若CPU在接收消息時,檢測到DPRAM鏈路出現(xiàn)異常,就認為鏈路已經斷開。此時需要恢復鏈路,其過程與步驟l基本相同。CPU立即將自身的flag設置為0,重新初始化DPRAM驅動,并向對方CPU發(fā)送REQ中斷。對方CPU收到REQ中斷后,響應方式與前面描述的過程完全相同。此外,步驟202d、202e判斷讀中斷或寫中斷沒有嚴格的順序限制,兩步可以互換。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。權利要求1、一種雙端口隨機存儲器同步通信的方法,其特征在于,設置CPU通信的中斷標識和鏈路標識符,該方法包括A、異步啟動兩個CPU,兩個CPU分別向對方發(fā)送中斷;B、收到中斷的CPU響應對方CPU,并建立同步通信通道。5、一種雙端口隨機存儲器同步通信的裝置,其特征在于,該裝置包括第一CPU、第二CPU、第一雙端口狀態(tài)寄存器、第二雙端口狀態(tài)寄存器、雙端口隨機存儲器;其中,第一雙端口狀態(tài)寄存器與第一CPU對應,第二雙端口狀態(tài)寄存器與第二CPU對應;雙端口隨機存儲器一端連接第一CPU,另一端連接第二CPU;所述兩個雙端口狀態(tài)寄存器的bit0到bit30位為表明雙端口隨機存儲器中斷類型的狀態(tài)位,以及bit31位為中斷觸發(fā)位。6、根據權利要求5所述的雙端口隨機存儲器同步通信的裝置,其特征在于,第一CPU對第一雙端口狀態(tài)寄存器只寫,對第二雙端口狀態(tài)寄存器只讀;第二CPU對第一雙端口狀態(tài)寄存器只讀,對第二雙端口狀態(tài)寄存器只寫;第一雙端口狀態(tài)寄存器的bit31位引出,連接到第二CPU的中斷控制器,作為第二CPU的一個中斷輸入信號;第二雙端口狀態(tài)寄存器的bit31位引出,連接到第一CPU的中斷控制器,作為第一CPU的一個中斷輸入信號。全文摘要本發(fā)明公開了一種雙端口隨機存儲器同步通信的方法,設置CPU通信的中斷標識和鏈路標識符,該方法包括異步啟動兩個CPU,向對方發(fā)送中斷;CPU響應對方CPU,建立同步通信通道。本發(fā)明還公開了相應的裝置,該裝置包括第一CPU、第二CPU、第一雙端口狀態(tài)寄存器、第二雙端口狀態(tài)寄存器、雙端口隨機存儲器;其中,第一雙端口狀態(tài)寄存器與第一CPU對應,第二雙端口狀態(tài)寄存器與第二CPU對應;雙端口隨機存儲器一端連接第一CPU,另一端連接第二CPU;兩個雙端口狀態(tài)寄存器的bit0到bit30位為表明雙端口隨機存儲器中斷類型的狀態(tài)位,bit31位為中斷觸發(fā)位。本發(fā)明使得兩個CPU能夠同步通信,不需要增加新的硬件設備,安全可靠,提高了通信的效率。文檔編號G06F15/16GK101110065SQ200710140490公開日2008年1月23日申請日期2007年8月24日優(yōu)先權日2007年8月24日發(fā)明者冷再鮮,劉一峰,劉志強申請人:中興通訊股份有限公司