先楫半導(dǎo)體的HPM6750集成2個(gè)RISC-V 處理器,主頻高達(dá)816MHz。既然有兩個(gè)CPU,豈可讓它白白浪費(fèi)?本文來帶你一起嘗試雙核例程,體驗(yàn)雙引擎帶來的風(fēng)馳電掣般的感覺。
HPM6750雙核采用主從結(jié)構(gòu),CPU0 和CPU1 采用相同配置:
●支持相同指令集
●相同容量的L1 指令和數(shù)據(jù)緩存
●相同容量的指令和數(shù)據(jù)本地存儲(chǔ)器:256 KB ILM 和256 KB DLM
CPU0 和CPU1 采用相同的存儲(chǔ)器映射,以下為例外:
● CPU 自身的指令/數(shù)據(jù)本地存儲(chǔ)器ILM / DLM 為私有;
●FGPIO 為私有
●平臺(tái)中斷控制器PLIC 為私有
●軟件中斷控制器PLICSW 為私有
●機(jī)器定時(shí)器MCHTMR 為私有
CPU0 和CPU1 采用相同的特權(quán)模式設(shè)置。
CPU0 為主CPU,CPU1 為從CPU,當(dāng)復(fù)位發(fā)生時(shí),系統(tǒng)總是由CPU0 啟動(dòng),而CPU1 處于待機(jī)狀態(tài)。需要時(shí),由CPU0 裝載CPU1 的程序鏡像,之后釋放CPU1,步驟如下:
1. CPU0 將CPU1 的代碼鏡像地址寫入SYSCTL_CPU1_GPR0 寄存器
2. CPU0 將CPU1 啟動(dòng)代號(hào)寫入SYSCTL_CPU1_GPR1 寄存器,代號(hào)為0xC1BEF1A9
3. CPU0 將SYSCTL_CPU1_LP [HALT] 位清0,即可釋放CPU1
雙核應(yīng)用程序的開發(fā)步驟如下:
根據(jù)
“E:\sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello”中README_zh.md文件如下:
多核示例工程在Core0上運(yùn)行"hello word"示例,在core1上運(yùn)行"rgb_led"示例。
在本工程中:
- 串口輸出 "hello world"; 鍵盤手動(dòng)輸入字符串信息,通過串口打印出來
- RGB LED會(huì)在紅、綠、藍(lán)三色中依次切換
## 硬件設(shè)置
BOOT_PIN 應(yīng)該設(shè)置為:0-OFF, 1-OFF
## 生成和編譯多核工程
本示例中:core0示例在FLASH中原地執(zhí)行, core1工程在ILM里執(zhí)行。
用戶必須先生成和編譯__Core1__工程
用戶必須在生成和編譯完core1工程后再生成和編譯__Core0__工程
### 生成core1工程
__CMAKE_BUILD_TYPE__ 必須是 下列選項(xiàng)中的一種:
- *"sec_core_img"*
- *"sec_core_img_release"*
若通過SDK env 包來生成工程,需要用 *"-t sec_core_img"*
### 生成core0工程
__CMAKE_BUILD_TYPE__ 無限制
## 運(yùn)行現(xiàn)象
- 下載core0示例到設(shè)備并運(yùn)行
- 下載core1示例到設(shè)備并運(yùn)行
本文參照以上說明將在core0和core1中分別新建FreeRTOS相關(guān)程序,即在雙核上各自運(yùn)行RTOS。
新建Core1程序的SES工程
復(fù)制HPM 6750的SDK文件夾“sdk_env_v0.9\hpm_sdk\samples\rtos”下面的freertos_hello實(shí)例工程,復(fù)制到“sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello\”并重新命名成“FreeRTOS_RISCV1”。
修改CMakeLists.txt文件中的配置,增加core1的鏈接文件,如下圖所示:
然后根據(jù)SDK 開發(fā)指南文檔《HPM6750EVKMINI_UG》中的工程生成步驟,來生成segger embedded studio的工程文件。SDK env 包來生成工程,需要增加"-t sec_core_img"*
新建Core0程序的SES工程
復(fù)制HPM 6750的SDK文件夾“sdk_env_v0.9\hpm_sdk\samples\rtos”下面的freertos_hello實(shí)例工程,復(fù)制到“sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello\”并重新命名成“FreeRTOS_RISCV”。
修改CMakeLists.txt文件中的配置,增加core0的鏈接文件,如下圖所示:
然后根據(jù)SDK 開發(fā)指南文檔《HPM6750EVKMINI_UG》中的工程生成步驟,來生成segger embedded studio的工程文件。
編譯Core1程序的SES工程
因?yàn)閏ore0程序中依賴core1工程編譯并轉(zhuǎn)換的源文件,因此,在編譯core0程序前,必須先將core1工程編譯好。
SDK會(huì)生成工程文件FreeRTOS_RISCV在FreeRTOS_RISCV\hpm6750evkmini_build\segger_embedded_studio文件路徑下面,通過雙擊該文件可以直接進(jìn)入SES(segger embedded studio),并打開該工程,然后編譯。
在core1的工程編譯完成會(huì)生成文件“sec_core_img.c”,并被自動(dòng)拷貝到core0的工程路徑FreeRTOS_RISCV/src/。在core1的FreeRTOS例程中主要完成RGBLED的依次點(diǎn)亮運(yùn)行。
編譯Core0程序的SES工程
在core0的FreeRTOS例程中主要完成RTOS多任務(wù)運(yùn)行。
先在core0的工程增加從核鏡像加載處理接口。
并將該接口放置在board_init之后
多核調(diào)試
在進(jìn)行雙核程序調(diào)試時(shí),先下載并啟動(dòng)core0的程序。
先在core0的SES工程中按F5,讓core0主核的程序運(yùn)行;再在core1的SES工程中按F5,讓core1的程序運(yùn)行。
可以看出core0的程序任務(wù)1和任務(wù)2,能夠輪流執(zhí)行,并且IDLE任務(wù)在他們休眠的間隙能夠被調(diào)度執(zhí)行。
對(duì)上面的代碼稍作調(diào)整,調(diào)整任務(wù)1和任務(wù)2的延時(shí)時(shí)間,其中task2不再延時(shí)。
結(jié)論
HPM6750 采用雙RISC-V 內(nèi)核,可以方便的適配主核和從核的各種接口,能夠充分靈活地利用soc的各種資源。為實(shí)時(shí)性要求高,控制內(nèi)容多樣的應(yīng)用提供更為友好的體驗(yàn)。
-
雙核
+關(guān)注
關(guān)注
0文章
37瀏覽量
15430
發(fā)布評(píng)論請(qǐng)先 登錄
國產(chǎn)“HPM芯”賦能機(jī)器人關(guān)節(jié),先楫半導(dǎo)體亮相松山湖IC創(chuàng)新論壇

先楫半導(dǎo)體HPM6E8Y:先楫實(shí)時(shí)控制芯片驅(qū)動(dòng)的機(jī)器人關(guān)節(jié)“芯”時(shí)代

人形機(jī)器人火爆背后,先楫半導(dǎo)體解構(gòu)運(yùn)動(dòng)控制芯片進(jìn)化密碼

600MHz RISC-V 雙核加持!先楫HPM6P00重新定義國產(chǎn)高性能混合信號(hào)MCU

600MHz RISC-V 雙核加持!先楫HPM6P00重新定義國產(chǎn)高性能混合信號(hào)MCU

先楫半導(dǎo)體CES 2025新品發(fā)布:解鎖機(jī)器人關(guān)節(jié)“芯”時(shí)代,精準(zhǔn)控制觸手可及!

先楫半導(dǎo)體CES 2025新品發(fā)布:解鎖機(jī)器人關(guān)節(jié)“芯”時(shí)代,精準(zhǔn)控制觸手可及!

怎么從零基礎(chǔ)入門先楫
先楫HPM6E00技術(shù)日 | 百人研討共話工業(yè)應(yīng)用創(chuàng)新及發(fā)展趨勢(shì)
戰(zhàn)略合作丨華秋商城攜手先楫半導(dǎo)體,共創(chuàng)新篇

評(píng)論