TMS320C6474學習總結(十)----IPC中斷
IPC中斷
1. 簡介
核內通訊是多核裝置的CPU之間資訊交換的方式。在大多數應用程式中,工作以並行或順序的方式在核心之間進行劃分,需要一個核心將控制資訊或資料緩衝訊息傳遞給另一個核心。交換資料緩衝的機制一般包括一個核寫資料到一個核特定的記憶體區域(通過CPU、回寫快取或直接記憶體訪問(DMA)、共享記憶體等外部雙倍資料速率(DDR)或在一個晶片上的靜態隨機存取儲存器(SRAM)地區),並通知的其他核該資料是可用的。在C6474的片上,可以利用IPC來實現核間的通訊。
2. IPC模組結構
IPC是一個全域性模組,意味著三個核都可以訪問和設定該模組,IPC處於CPU之外的外圍裝置,通過CFG匯流排與CPU互聯。
IPC模組主要有兩個暫存器需要設定:IPCGRn / IPCARn,n=0,1,2。
IPC產生暫存器(IPCGR)由本地核進行寫操作來產生目的核的中斷,IPCGR有三個暫存器分別對應IPCGR0/IPCGR1/IPCGR2分別對應核0/1/2。
對IPCGRn的LSB進行寫操作會生成一箇中斷到核n,注意,所有核都產生相同的中斷,需要一些SRCS標誌可以用來確定哪個核心傳送了中斷。換句話說,每個核上的每個任務都有與之相關的標誌,這樣在收到中斷時才知道是哪個核發生了中斷。
IPC告知暫存器(IPCAR)是目的核來清除SRCS位的暫存器,也有三個暫存器IPCAR0/IPCAR1/IPCAR2來分別表示三個核0/1/2
3. 工作原理
相同的應用程式在所有三個核心上執行。每個核心通過IPC暫存器向其他兩個核心傳送訊息。根據片上計時器事件定期傳送訊息。當生成訊息的核心(源核心)寫入對應於接收核心(目標核心)的IPCGR暫存器時,目標核心接收一箇中斷。這個相應的中斷服務例程(ISR)執行在目標核上,確定哪個核是訊息的源,併發送相應的軟體訊號量; 這裡有三個任務,每個任務處理來自特定核心的訊息。注意,在任何給定的核心上,只有兩個任務是活動的,因為在本例中,核心不會向自身傳送訊息。
IPCGR暫存器的SRCS位的用法如下:
• SRCS0-7 and SRCS24 are used by core 0
• SRCS8-15 and SRC25 are used by core 1
• SRCS16-23 and SRC26 are used by core2
SRC24-26高位被目的核來識別是哪個核產生的中斷源,SRC0-23被用來作為標誌位, 共8位被一起用作一個8位計數器,以便於驗證接收核是否接收了所有中斷。
4. 如何建立一個IPC中斷
首先IPC中斷是在兩個核內工作的,也就是一個核對IPCGR暫存器進行寫操作,中斷產生在另一個核上,因此需要建立兩個核的工程。
①在核0、核1上分別將IPC中斷號和中斷服務函式名配置在.tcf檔案中(IPC中斷號為76)
②啟動全域性中斷(關使能、清標誌位、使能)
③清除IPC中斷的標誌位(利用IPCAR暫存器)
④對核0的IPCGR進行寫操作,核1 就可以產生IPC中斷
注意:核0/1都需要配置① ② ③三步。