【英飞凌 Edgi Talk评测】5. 一心二用----双核独立运行
PSoC™ E84 Edgi-Talk 开发板搭载了三核架构Secure M33安全核、M33非安全核、M55应用处理器。其中 Secure M33 负责系统安全引导而 M33NS和 M55 两个内核可以独立运行各自的 RT-Thread 固件分别控制不同的 LED实现真正的双核并行。本篇文章将介绍如何配置并烧录两个独立的示例工程Edgi_Talk_M33_Blink_LED与Edgi_Talk_M55_Blink_LED让蓝灯和绿灯分别由 M33 和 M55 控制同时闪烁。一、双核架构与启动顺序开发板的启动遵循严格的顺序------------------ | Secure M33 | | (安全内核引导) | ------------------ | v ------------------ | M33 | | (非安全核启动) | ------------------ | v ------------------ | M55 | | (应用处理器启动) | ------------------关键点M33NS必须先启动因为它负责初始化时钟、外设以及使能 M55 内核M55 不能独立启动它的复位释放由 M33 控制烧录顺序必须遵守先烧录 M33 工程再烧录 M55 工程二、LED 硬件资源在 多LED控制 中已确认三颗用户 LED 的引脚定义为LED引脚颜色控制核LED1P16_7红—LED2P16_6绿M55LED3P16_5蓝M33两个示例工程分工明确M33 工程控制蓝色 LED3P16_5M55 工程控制绿色 LED2P16_6三、M33 工程使能 M55 内核1. 新建 M33 工程参考 开发环境搭建 的步骤在 RT-Thread Studio 中新建一个基于Edgi_Talk_M33_Blink_LED示例的工程。2. 开启 CM55 支持这是双核运行的核心配置。在 M33 工程中需要打开 RT-Thread 设置启用 M55 内核的启动支持右键 M33 工程 →RT-Thread Settings在左侧导航树中依次展开硬件 → select SOC Multi Core Mode勾选Enable CM55 Core注意该配置决定了 M33 启动时是否释放 M55 的复位信号。如果未勾选即使 M55 固件已烧录M55 内核也不会启动。保存配置CtrlS系统会自动重新生成代码。3. M33 主程序LED 部分M33 示例工程的main.c中LED 相关代码如下#include rtthread.h #include rtdevice.h #include board.h #define LED_PIN_B GET_PIN(16, 5) /* 蓝色 LED3由 M33 控制 */ int main(void) { rt_kprintf(Hello RT-Thread\r\n); rt_kprintf(This core is cortex-m33\r\n); /* 将 LED 引脚设置为输出模式 */ rt_pin_mode(LED_PIN_B, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED_PIN_B, PIN_LOW); /* 点亮蓝灯 */ rt_thread_mdelay(1000); rt_pin_write(LED_PIN_B, PIN_HIGH); /* 熄灭蓝灯 */ rt_thread_mdelay(1000); } return 0; }代码要点GET_PIN(16, 5)映射到蓝色 LED3rt_pin_mode()配置为输出模式主循环以 1Hz 频率周期 2s闪烁蓝灯4. 编译并烧录 M33点击工具栏的编译按钮编译工程编译成功后点击下载按钮将固件烧录到开发板。四、M55 工程独立运行 LED 闪烁1. 新建 M55 工程在 RT-Thread Studio 中再次新建一个 RT-Thread 项目配置如下配置项设置值项目类型基于开发板开发板PSOC_E84-EDGI-TALKBSP 版本1.2.1类型示例工程示例Edgi_Talk_M55_Blink_LEDRT-Thread 版本5.0.2调试器KitProg3接口SWD注意M55 工程不需要额外开启 CM55 配置因为 M55 内核的使能开关在 M33 工程中。新建完成后项目资源管理器中应同时存在两个工程2. M55 主程序LED 部分M55 示例工程的main.c中LED 相关代码如下#include rtthread.h #include rtdevice.h #include board.h #define LED_PIN_G GET_PIN(16, 6) /* 绿色 LED2由 M55 控制 */ int main(void) { rt_kprintf(Hello RT-Thread\r\n); rt_kprintf(Its cortex-m55\r\n); /* 将 LED 引脚设置为输出模式 */ rt_pin_mode(LED_PIN_G, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED_PIN_G, PIN_LOW); /* 点亮绿灯 */ rt_thread_mdelay(1000); rt_pin_write(LED_PIN_G, PIN_HIGH); /* 熄灭绿灯 */ rt_thread_mdelay(1000); } return 0; }代码要点GET_PIN(16, 6)映射到绿色 LED2控制逻辑与 M33 完全一致只是控制的 LED 颜色不同两个核各自运行自己的main()函数互不干扰3. 编译并烧录 M55编译 M55 工程编译成功后再次点击下载按钮烧录。⚠️烧录顺序至关重要必须先烧录 M33使能 CM55 的那一份再烧录 M55。如果顺序颠倒M55 内核可能无法被正确释放复位导致绿灯不亮。五、运行效果两个工程都烧录完成后开发板重新上电或按 RST 复位观察 LED现象说明LED3蓝色以 1Hz 闪烁M33 内核运行正常LED2绿色以 1Hz 闪烁M55 内核运行正常两颗 LED 同时交替亮灭两个核独立运行互不影响如果只看到蓝灯闪烁而绿灯不亮请检查M33 工程中是否勾选了Enable CM55 Core烧录顺序是否为 M33 → M55M33 工程是否已正确烧录可单独烧录 M33 Blink_LED 验证六、双核独立运行的本质从代码层面看M33 和 M55 的工程结构几乎完全相同对比项M33 工程M55 工程示例模板Edgi_Talk_M33_Blink_LEDEdgi_Talk_M55_Blink_LED控制 LEDLED3蓝P16_5LED2绿P16_6打印信息This core is cortex-m33Its cortex-m55启动职责使能 M55 内核无等待 M33 释放复位两个核拥有独立的程序空间、独立的栈、独立的中断向量表可以独立运行也可以通过共享内存区域进行潜在的核间通信。在本篇文章中它们只是最简单的独立运行各自闪烁自己的 LED验证双核硬件和软件环境均正常。七、总结通过本篇文章完成了以下目标理解了三核启动顺序Secure M33 → M33NS→ M55掌握了 M55 使能配置在 M33 工程的 RT-Thread Settings 中勾选 Enable CM55 Core创建了两个独立工程分别控制蓝灯和绿灯明确了烧录顺序必须先 M33、后 M55。---------------------作者HonestQiao链接https://bbs.21ic.com/icview-3515209-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。