6180|4

87

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

先楫官方干货:HPM6750双核例程体验和多核调试 [复制链接]

 

先楫半导体的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的各种资源。为实时性要求高,控制内容多样的应用提供更为友好的体验。

最新回复

tuu
按照这个步骤操作 并不能实现core1运行 还是我操作有问题?  详情 回复 发表于 2022-12-10 14:22
点赞 关注
 
 

回复
举报

5263

帖子

239

TA的资源

管理员

沙发
 

论坛有3块供网友免费玩,想玩:

>>前往板卡流动分站:先楫800MHz RISC-V HPM6750开发板上线

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

7048

帖子

11

TA的资源

版主

板凳
 

HPM6750 采用双RISC-V 内核,可以方便的适配主核和从核的各种接口,能够充分灵活地利用soc的各种资源。为实时性要求高,控制内容多样的应用提供更为友好的体验。

可以跑ubuntu吗?

点评

肯定不能啊  详情 回复 发表于 2022-10-28 22:51
 
 
 

回复

115

帖子

0

TA的资源

一粒金砂(高级)

4
 
lugl4313820 发表于 2022-10-28 20:46 HPM6750 采用双RISC-V 内核,可以方便的适配主核和从核的各种接口,能够充分灵活地利用soc的各种资源。为实 ...

肯定不能啊

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
按照这个步骤操作 并不能实现core1运行 还是我操作有问题?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表