【玩轉多核異構】處理器對共享外設和資源的調配方法

原創 2023-02-03 09:15:00 多核異構 A核和M核 iMX8MP

在多核異構CPU中,多個內核就如同多個大腦,而外設和內存等資源就如同手足,那么多個大腦該如何控制手足才能保證它們正常有序地運行呢?以NXP i.MX8M Plus處理器的A核和M核為例,其實只有少部分外設被指定了屬于哪個核,而大部分的外設都能被A核和M核同時使用。如下圖所示:

大部分的外設都能被A核和M核同時使用

這里我們通過飛凌嵌入式OKMX8MP-C開發板上的UART3進行演示,同時編寫A核和M核程序控制UART3打印信息,通過UART3將開發板與電腦鏈接,在電腦串口調試界面可以看到A核和M核同時輸出了信息。

A核和M核程序控制UART3打印信息

A核和M核同時輸出信息

那么在實際應用中,當某個外設需要被指定的內核獨占或被多核同時使用時,該如何合理安排時序才能避免外設輸出異常呢?接下來,小編就以飛凌嵌入式OKMX8MP-C開發板為例,將多核異構處理器對共享外設和資源的調配方法介紹給大家。

iMX8MP支持Cortex-A53多任務核和1個Cortex-M7實時核

飛凌嵌入式OKMX8MP-C開發板所搭載的NXP i.MX8MPlus處理器具備強悍的性能,集成4個主頻最高可達1.8GHz (工業級主頻為1.6GHz)的Arm Cortex-A53多任務核和1個Cortex-M7實時核,不管是對數據的高速吞吐、處理,還是復雜的人機交互界面處理,都能從容應對。

一、A核獨占外設

這種情況比較簡單,在設備樹中定義設備節點,編譯新的設備樹,將生成的OK8MP-C.dtb和Image拷貝至以下目錄:開發板/run/media/mmcblk2p1/ ,重啟iMX8MP開發板,同時M核程序中不初始化UART3即可。以UART3為例:

拷貝目錄

二、M核獨占外設 

對于NXP i.MX8M Plus處理器而言,由于A核和M核對內存和外設的訪問都是共享且平等的,為了確保不產生資源沖突會通過資源域(resource domains)控制器從硬件層面來對指定內存和外設的訪問權限進行保護。

i.MX8M Plus處理器允許定義最多4個資源域并將不同的內存和外設資源指定到這些資源域中。默認情況下,A核和相關外設被指定于域0;當M核程序運行后,M核以及相關外設最初也是域0,但馬上被重新指定于域1。

因此若一個外設需要被M7內核單獨使用,首先要修改A核設備樹,刪除外設節點;其次在M核程序中將域0改為域1;最后再將外設初始化,這樣就可以單獨控制了。域轉換代碼如下:

域轉換代碼

三、多核共享外設

如果多核想共享某個外設,但在某段時間又需要獨占,后續再釋放;或者多核的開發人員不是同一人,為了避免出錯,在自己的程序中強制獨占某個核,是否可以實現呢?答案是肯定的——使用RDC功能即可。RDC全程為Resource Domain Controller,即資源域控制器,可以通過寄存器和信號量兩種方式實現某個域對外設的獨占和釋放。

1. 寄存器RDC_PDAPn

寄存器RDC_PDAPn

由于i.MX8M Plus處理器最多支持4個域,因此對寄存器后8比特位寫入不同數值,將允許相應的域對某個管腳和內存的讀寫使能,如禁止A核域0讀寫某個管腳,則設置寄存器為0xFC即可,后兩個比特位為0,表示禁止域0讀寫此外設;其他六個比特位為1,表示允許從域1到域3讀寫此外設。

每個共享外設在RDC資源表中均有一個序號,用于區別其他外設,如UART3在RDC中定義如下:kRDC_Periph_UART3 = 104U, /**< UART3 RDC Peripheral */

在M核程序中可如下修改程序,實現M核獨占UART3的目的。

M核程序編輯修改

修改程序驗證,此時只有M核控制UART3打印信息。

僅M核輸出信息

僅M核輸出信息

注意:

因為在設備樹中沒有刪除UART3,所以在A核啟動內核解析設備樹生成設備文件時,需對UART3操作。因M核程序中禁止A核的訪問UART3,此時內核將無法正常啟動。可以加10秒延時等待內核啟動完成,也可在A核啟動后,通過雙核通信告知M核啟動RDC外設獨占。

2. 信號量RDCSEMA42

RDC SEMA42是一個專門配合RDC功能的信號量,當某個域獲取某個外設的SEMA42鎖后,其他的域將無法訪問此外設,只能等待域釋放該外設鎖,才能再訪問。RDC SEMA42數據鎖的開啟配置如下:

RDC SEMA42數據鎖的開啟配置

M核對UART3上鎖,獲取管腳的使用權:

獲取管腳的使用權

M核釋放UART3的RDC SEMA42鎖,放棄管腳的使用權:

放棄管腳的使用權

修改程序后驗證,發現和RDC寄存器一樣,M核上鎖后獲取UART3使用權,僅可獨自發送,A核訪問UART3會出錯。釋放SEMA42鎖后,A核和M核就均能訪問UART3了。

以上就是小編基于OKMX8MP-C開發板為大家帶來的多核異構處理器對外設和內存資源的使用方法,各位工程師小伙伴可以根據自己的需求靈活設置策略,以滿足不同場景的需要。

點擊索取產品資料

擴展閱讀:《MPU進化,多核異構處理器有多強?A核與M核通信過程解析》




相關產品 >

  • OKMX8MP-C開發板

    內置NPU、ISP,AI計算能力高達2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發板 基于高性能低功耗工業級iMX8MP核心板設計,支持多種多種高速通信接口。iMX8MP開發板內置NPU,AI計算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統的iMX8MP開發板。

    了解詳情
    OKMX8MP-C開發板
  • FETMX8MP-C核心板

    iMX8MP核心板基于 NXP  i.MX 8M Plus 處理器設計,  采用4核Cortex-A53 和 Cortex-M7架構。支持雙千兆網口,iMX8MP性能強勁最高運行速率可達2.3TOPS,并且i.MX8MP功耗更低≤2W 。iMX 8M Plus系列專注于機器學習和視覺、高級多媒體以及具有高可靠性的工業自動化。它旨在滿足智慧家庭、樓宇、城市和工業4.0應用的需求。飛凌iMX8MP核心板提供用戶手冊,iMX8MP原理圖,引腳定義等。
    了解詳情
    FETMX8MP-C核心板

推薦閱讀 換一批 換一批