采用非對稱雙核 MCU 提高系統性能

Message RAM 僅僅作為 IPC 的數據緩存,IPC 還需借助于特定的控制邏輯電路來完成。如圖 6 所示,Master 子系統和 Control 子系統都是通過 5 個寄存器來實現 IPC 的邏輯流程控制:IPCACK、IPCSTS、IPCFLG、IPCCLR、IPCSET。這 5 個寄存器都是 32 位,每一個 bit 對應于 IPC 的一個通道,因此最多可實現 32 個通道的握手通信。Bit0 到 Bit3 總共 4 個通道可以觸發消息接收方的 IPC 中斷,Bit4 到Bit31 共 28 個通道則需要消息接收方的軟件查詢來獲取 Message RAM 中是否收到數據。如果兩個內核之間僅僅傳遞狀態和控制信息(例如 RTOS 中的 Semaphore),僅通過以上寄存器便可以實現,而無需 Message RAM 的參與。

以下通過舉例 Master 子系統往 Control 子系統發送一幀數據,來簡單介紹 IPC 模塊的操作流程。
1. Cortex-M3 先在 MTOC Message RAM 中寫入一幀數據;
2. Cortex-M3 置位 MTOCIPCSET(CM3 映射存儲器區)的 Bit9,如圖 6 所示,此時 MTOCIPCSTS(C28x 映射存儲器區)的 Bit9 也將置位;
3. C28x 輪詢 MTOCIPCSTS 的 Bit9,查詢到 Bit9 已置位;(如果之前的操作是 Bit0 到 Bit3 其中之一, 則將觸發 C28x 產生一個 IPC 中斷)
4. C28x 讀 MTOC Message RAM 中的數據,此時,Cortex-M3 成功將一幀數據發送至 C28x。
3.2 Shared RAM 內存區
大部分情況下,2K 字節的 IPC Message RAM 區能夠滿足 C28x 和 M3 子系統之間的數據通信,配合DMA,通信效率也可以進一步提高。如果用戶希望一次性在兩個子系統傳遞更大塊的數據,另一種方法是通過 Shared RAM 內存。
TMS320F28M35H52C 有一個 64K 字節大小的 Shared RAM 區,總共 8 塊 S0-S7,每塊 8K 字節大小,如圖 7 所示。Cortex-M3 可以設置讓任何一塊 Shared RAM 區由 C28x 或 M3 主控,比如,映射 S0 至C28x 側以后,C28x CPU 和 DMA 可以讀寫 S0,而 M3 和 uDMA 將只能讀 S0,不能寫入和預取。
假如 Cortex-M3 需要一次性發送 6K 字節的數據到 C28x 側,它可以先將 Shared RAM 區 S0 映射到本地存儲器空間,接著通過 IPC 發送一個標志位給 C28x 來通知其可以將數據取走。

3.3 IPC 的軟件驅動
controlSUITE 軟件開發包中提供 2 種 IPC 的軟件驅動庫,IPC Driver 和 IPC_Lite Driver。IPC_Lite Driver 僅使用 IPC 寄存器來實現通信,不需要額外的 RAM,但是用戶只能支持一個 IPC 中斷服務 ISR,且不支持以隊列形式來處理 IPC 請求。IPC_Lite Driver 使用方式如下:


1,主動發起數據請求的內核會首先調用 IPC_Lite Driver 提供的名函數。在這個例子匯總,M3 是發送數據的內核并執行“IPCLiteMtoCDataRead” 函數。
? IPC_FLAG2 是 C28 中斷標志,指示 C28 內核一個消息到來。
? IPC_FLAG17 是響應標志,C28 用其指示 M3 核一個命令已經被處理。
? 需要讀取數據的 C28 的地址也被作為一個參數傳遞給 C28 內核。
? 這個函數在 while 循環中被調用的原因是,它可能返回 STATUS_FAIL 并且不會發送信息給C28 直至 MtoC IPC 中斷 2 和標志 17 可用, 之后,該函數返回 STATUS_PASS.
2,被動接收數據請求的內核會在 ISR 中解析其 IPCCOM寄存器的命令。這個例子中,C28 MtoCIPCINT2 ISR 知道標志置位,解析 MTOCIPCCOM寄存器的命令,識別出是讀數據命令。
3,被動接收數據請求的內核會調用與主動發起數據請求的內核相同的函數名。這個例子中,C28 執行 IPCLiteMtoCDataRead, IPC_FLAG2 作為中斷標志參數, IPC_FLAG17 作為狀態標志參數。
4,如果接收到命令有效,IPC_Lite 的驅動函數會處理讀命令并確認(acknowledges)狀態和中斷標志。如果接收到的命令無效,則只有中斷標志被確認(acknowledged)用來釋放中斷給后續的命令,而狀態標志仍然置位。
IPC Driver 通過在 Message RAM 中建立環形緩沖區,使得多個 IPC 通信命令可以以隊列的形式被緩沖,然后逐個處理,并且可以同時支持多個 IPC 中斷服務程序 ISR,當然,IPC Driver 需要更多的RAM 來支持。和 IPC-Lite 不同,為了使用 IPC 驅動,需要在 M3 和 C28 的項目中增加一些設置。
第一步是在 M3 和 C28 的鏈接定位文件(.cmd)中添加 IPC 循環緩沖區和指針段到 CTOM和 MTOC message RAM。如下所示:

第二步,應用程序源碼中必須定義并且初始化至少一個 volatile global tIpcController 變量 (為 C28 –M3 IPC 中斷使用),如下所示:



評論