【英飞凌 Edgi Talk评测】5. 一心二用----双核独立运行
2026/7/21 11:02:38 网站建设 项目流程

PSoC™ E84 Edgi-Talk 开发板搭载了三核架构:Secure M33(安全核)M33(非安全核)M55(应用处理器)。其中 Secure M33 负责系统安全引导,而 M33(NS)和 M55 两个内核可以独立运行各自的 RT-Thread 固件,分别控制不同的 LED,实现真正的双核并行。

本篇文章将介绍如何配置并烧录两个独立的示例工程(Edgi_Talk_M33_Blink_LEDEdgi_Talk_M55_Blink_LED),让蓝灯和绿灯分别由 M33 和 M55 控制,同时闪烁。

一、双核架构与启动顺序

开发板的启动遵循严格的顺序:

+------------------+ | Secure M33 | | (安全内核引导) | +------------------+ | v +------------------+ | M33 | | (非安全核启动) | +------------------+ | v +------------------+ | M55 | | (应用处理器启动) | +------------------+

关键点

  • M33(NS)必须先启动,因为它负责初始化时钟、外设以及使能 M55 内核
  • M55 不能独立启动,它的复位释放由 M33 控制
  • 烧录顺序必须遵守:先烧录 M33 工程,再烧录 M55 工程

二、LED 硬件资源

在 多LED控制 中已确认,三颗用户 LED 的引脚定义为:

LED引脚颜色控制核
LED1P16_7
LED2P16_6绿M55
LED3P16_5M33

两个示例工程分工明确:

  • M33 工程:控制蓝色 LED3(P16_5)
  • M55 工程:控制绿色 LED2(P16_6)

三、M33 工程:使能 M55 内核

1. 新建 M33 工程

参考 开发环境搭建 的步骤,在 RT-Thread Studio 中新建一个基于Edgi_Talk_M33_Blink_LED示例的工程。

2. 开启 CM55 支持

这是双核运行的核心配置。在 M33 工程中,需要打开 RT-Thread 设置,启用 M55 内核的启动支持:

  1. 右键 M33 工程 →RT-Thread Settings

  2. 在左侧导航树中,依次展开:硬件 → select SOC Multi Core Mode

  3. 勾选Enable CM55 Core

注意:该配置决定了 M33 启动时是否释放 M55 的复位信号。如果未勾选,即使 M55 固件已烧录,M55 内核也不会启动。

  1. 保存配置(Ctrl+S),系统会自动重新生成代码。

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)映射到蓝色 LED3
  • rt_pin_mode()配置为输出模式
  • 主循环以 1Hz 频率(周期 2s)闪烁蓝灯

4. 编译并烧录 M33

点击工具栏的编译按钮编译工程,编译成功后点击下载按钮将固件烧录到开发板。

四、M55 工程:独立运行 LED 闪烁

1. 新建 M55 工程

在 RT-Thread Studio 中,再次新建一个 RT-Thread 项目,配置如下:

配置项设置值
项目类型基于开发板
开发板PSOC_E84-EDGI-TALK
BSP 版本1.2.1
类型示例工程
示例Edgi_Talk_M55_Blink_LED
RT-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("It's 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 同时交替亮灭两个核独立运行,互不影响

如果只看到蓝灯闪烁而绿灯不亮,请检查:

  1. M33 工程中是否勾选了Enable CM55 Core
  2. 烧录顺序是否为 M33 → M55
  3. M33 工程是否已正确烧录(可单独烧录 M33 Blink_LED 验证)

六、双核独立运行的本质

从代码层面看,M33 和 M55 的工程结构几乎完全相同:

对比项M33 工程M55 工程
示例模板Edgi_Talk_M33_Blink_LEDEdgi_Talk_M55_Blink_LED
控制 LEDLED3(蓝,P16_5)LED2(绿,P16_6)
打印信息This core is cortex-m33It's cortex-m55
启动职责使能 M55 内核无(等待 M33 释放复位)

两个核拥有独立的程序空间、独立的栈、独立的中断向量表,可以独立运行,也可以通过共享内存区域进行潜在的核间通信。
在本篇文章中,它们只是最简单的独立运行,各自闪烁自己的 LED,验证双核硬件和软件环境均正常。

七、总结

通过本篇文章,完成了以下目标:

  1. 理解了三核启动顺序:Secure M33 → M33(NS)→ M55
  2. 掌握了 M55 使能配置:在 M33 工程的 RT-Thread Settings 中勾选 Enable CM55 Core
  3. 创建了两个独立工程:分别控制蓝灯和绿灯
  4. 明确了烧录顺序:必须先 M33、后 M55。
    ---------------------
    作者:HonestQiao
    链接:https://bbs.21ic.com/icview-3515209-1-1.html
    来源:21ic.com
    此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询