【阿福的隨筆】淺談 LPC55S69 雙核應用

1 LPC55S69 是什麼?

LPC55S69 是 NXP Cortex-M33 雙核架構的 MCU ,此次討論是有關雙核要如何啟動和使用的流程,還有若是要啟用兩個 程序的關聯設定,需要注意的事項。

1.1 雙核方塊圖

雙核啟用方塊圖,如圖1.1.1

圖1.1.1

2 雙核模式使用說明

  • 如何從無到有

不管是使用  MCUxpresso 或是 Keil ,都是需要開兩個 project 分別是使用 Core0 和 Core1

並且 先將 Core1  的 code 從 Flash 放在 要起始 RAM 上,在 Core0 將 CPUCFG 設成 Core1 要使用,並且將 Core1 的起始位址放在 RAM 上,最後再將 CPUCTRL 的 Core1 的 Clock 啟動之後 Reset Core1,如『圖2.1』( 註1 ) 

SYSCON->CPUCFG |= SYSCON_CPUCFG_CPU1ENABLE_MASK;

/* Boot source for Core 1 from RAM */

    SYSCON->CPBOOT = SYSCON_CPBOOT_CPBOOT((uint32_t)(char *)bootAddress);

圖2.1( 註1 )

詳細可以參考 mcmgr_start_core_internal()  這個 function code,其中的方式,也是直接控制這些 register 來打開 Core1,所以要做到上面的步驟 Core0 需要知道 Core1 放置的 Flash 的起始位置,或者是要使用 link來做。

若是需要兩邊的程式有需要傳輸 ( 例如取值 ),就需要啟動 Mailbox 和 share memory。

主要是使用  Mailbox 的中斷 ( MBOXIRQ ),來傳送和接收 share memory 的 address ,再透過此位址,來取得要溝通的資料,可使用 MAILBOX_GetValue() ,MAILBOX_SetValue() 或 用Mailbox 的 IRQ0 register來設定 Core0要給 Core1 的中斷並放入一個 32 bits 資料過去,而 IRQ1 register 是反相的,用來設定 Core1要給 Core0 的中斷,如『圖2.2』( 註1 )。

 

 
圖2.2( 註1 )
  • 直接使用關連
以 MCUxpresso 來說,內部是可以直接使用關聯,設定是將 Core1 產生的 output 檔,直接放入 Core 0 一起再次編輯,所以使用關聯方式的需要先 Compiler Core1 ,再 Compiler Core0,才會是 Core1修改之後的程式,設定方式是在  Setting 下的 multi-core ,需要規劃參考的 output 檔和 使用的 RAM ,此 Core0 RAM size 需大於 Core1 程序的 Flash 的使用量,而且不能被 Core1 程序所使用到的範圍,因為 關聯方式  Core0 會直接做 Core1 的Flash to Core0 RAM 的動作,並在此記憶體範圍執行,所以若是小於 所需,在 Core 0 Compiler 的過程之中,就會出現錯誤的情形,這時就需要再加大 Master Memory Region 中的 RAM size ,設定畫面如圖2.3。



圖2.3

RAM size 的修改就會是在 MCU settings 內去修改了。

3 參考資料

註1 : 作者: NXP;出處 : https://www.mouser.com/pdfDocs/NXP_LPC55S6x_UM.pdf

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論