“狂飙!来感受先楫芯高速双引擎的澎湃动力”

先楫半导体的hpm6750集成2个risc-v 处理器,主频高达816mhz。既然有两个cpu,岂可让它白白浪费?本文来带你一起尝试双核例程,体验双引擎带来的风驰电掣般的感觉。
hpm6750双核采用主从结构,cpu0 和cpu1 采用相同配置:
● 支持相同指令集
● 相同容量的l1 指令和数据缓存
● 相同容量的指令和数据本地存储器:256 kb ilm 和256 kb dlm
cpu0 和cpu1 采用相同的存储器映射,以下为例外:
● cpu 自身的指令/数据本地存储器ilm / dlm 为私有;
● fgpio 为私有
● 平台中断控制器plic 为私有
● 软件中断控制器plicsw 为私有
● 机器定时器mchtmr 为私有
cpu0 和cpu1 采用相同的特权模式设置。
cpu0 为主cpu,cpu1 为从cpu,当复位发生时,系统总是由cpu0 启动,而cpu1 处于待机状态。需要时,由cpu0 装载cpu1 的程序镜像,之后释放cpu1,步骤如下:
1. cpu0 将cpu1 的代码镜像地址写入sysctl_cpu1_gpr0 寄存器
2. cpu0 将cpu1 启动代号写入sysctl_cpu1_gpr1 寄存器,代号为0xc1bef1a9
3. cpu0 将sysctl_cpu1_lp [halt] 位清0,即可释放cpu1
双核应用程序的开发步骤如下:
根据
“e:\sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello”中readme_zh.md文件如下:
多核示例工程在core0上运行hello word示例,在core1上运行rgb_led示例。
在本工程中:
 - 串口输出 hello world; 键盘手动输入字符串信息,通过串口打印出来
 - rgb led会在红、绿、蓝三色中依次切换
## 硬件设置
  boot_pin 应该设置为:0-off, 1-off
## 生成和编译多核工程
本示例中:core0示例在flash中原地执行, core1工程在ilm里执行。
用户必须先生成和编译__core1__工程
用户必须在生成和编译完core1工程后再生成和编译__core0__工程
### 生成core1工程
__cmake_build_type__ 必须是 下列选项中的一种:
- *sec_core_img*
- *sec_core_img_release*
若通过sdk env 包来生成工程,需要用 *-t sec_core_img*
### 生成core0工程
__cmake_build_type__ 无限制
## 运行现象
- 下载core0示例到设备并运行
- 下载core1示例到设备并运行
本文参照以上说明将在core0和core1中分别新建freertos相关程序,即在双核上各自运行rtos。
新建core1程序的ses工程
复制hpm 6750的sdk文件夹“sdk_env_v0.9\hpm_sdk\samples\rtos”下面的freertos_hello实例工程,复制到“sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello\”并重新命名成“freertos_riscv1”。
修改cmakelists.txt文件中的配置,增加core1的链接文件,如下图所示:
然后根据sdk 开发指南文档《hpm6750evkmini_ug》中的工程生成步骤,来生成segger embedded studio的工程文件。sdk env 包来生成工程,需要增加-t sec_core_img*
新建core0程序的ses工程
复制hpm 6750的sdk文件夹“sdk_env_v0.9\hpm_sdk\samples\rtos”下面的freertos_hello实例工程,复制到“sdk_env_v0.9.0\hpm_sdk\samples\multicore\hello\”并重新命名成“freertos_riscv”。
修改cmakelists.txt文件中的配置,增加core0的链接文件,如下图所示:
然后根据sdk 开发指南文档《hpm6750evkmini_ug》中的工程生成步骤,来生成segger embedded studio的工程文件。
编译core1程序的ses工程
因为core0程序中依赖core1工程编译并转换的源文件,因此,在编译core0程序前,必须先将core1工程编译好。
sdk会生成工程文件freertos_riscv在freertos_riscv\hpm6750evkmini_build\segger_embedded_studio文件路径下面,通过双击该文件可以直接进入ses(segger embedded studio),并打开该工程,然后编译。
在core1的工程编译完成会生成文件“sec_core_img.c”,并被自动拷贝到core0的工程路径freertos_riscv/src/。在core1的freertos例程中主要完成rgbled的依次点亮运行。
编译core0程序的ses工程
在core0的freertos例程中主要完成rtos多任务运行。
先在core0的工程增加从核镜像加载处理接口。
并将该接口放置在board_init之后
多核调试
在进行双核程序调试时,先下载并启动core0的程序。
先在core0的ses工程中按f5,让core0主核的程序运行;再在core1的ses工程中按f5,让core1的程序运行。
可以看出core0的程序任务1和任务2,能够轮流执行,并且idle任务在他们休眠的间隙能够被调度执行。
对上面的代码稍作调整,调整任务1和任务2的延时时间,其中task2不再延时。
 结论
hpm6750 采用双risc-v 内核,可以方便的适配主核和从核的各种接口,能够充分灵活地利用soc的各种资源。为实时性要求高,控制内容多样的应用提供更为友好的体验。

如何迅速找到小电机的噪音源,并让它安静下来
轻松看护老人,毫米波雷达走进生活
赛灵思与戴姆勒达成合作 联手解决AI在汽车应用领域的可能性
土壤养分快速检测仪的测试方法说明
别克平滑度测定仪的技术参数具体是怎样的
“狂飙!来感受先楫芯高速双引擎的澎湃动力”
5种降低PCBA成本的方法
向着阳光的华为 淬火而行的哪吒 三头九眼八臂 全都指向行业
基于FPS200传感器和DSP的指纹识别系统设计
英特尔因与芯片制造相关专利侵权中败诉而提起上诉
kubernetes是什么 关于K8S架构原理的硬核干货分享
高端音频应用电阻器选择
三思“多杆合一”解决方案助力城市新建设
小型气象站可提高农业生产产量,它的应用有哪些
RFID技术智能交通信息化的四大应用
华为P10怎么样?加强版的自拍镜头不比OPPO差 拍出更美的你
用万用表判别扬声器相位
三星传真机使用方法
如何自己制造物联网传感器测噪音
芝奇幻锋戟Z5 RGB DDR5内存评测分析