• 正文
  • 相关推荐
申请入驻 产业图谱

G32R501 IPC 底层技术、寄存器访问与双核启动机制

10/26 14:18
116
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. IPC 模块寄存器访问底层原理

绝大多数片上外设挂载 AHB、APB 总线,通过普通内存地址读写。G32R501 的 IPC 模块挂载在内核协处理器接口,协处理器编号 = 1,不能使用普通指针访问,只能使用 Arm 协处理器专用指令。

  • MCR / MRC:单次传输 32bit 数据;
  • MCRR / MRRC:单次传输 64bit 数据。

SDK 已经全部封装底层汇编指令,提供高层 API 函数,用户应用代码不需要手写 MCR/MRC 汇编,直接调用 IPC 驱动接口即可。

资料获取:AN1135 G32R501 IPC应用笔记

2. 协处理指令 MCR/MRC 参数解析

指令格式:MCR{cond} coproc, <opc1>, <Rt>, <CRn>, <CRm>, <opc2> 关键参数:

  1. cond:指令执行条件码,可以忽略;
  2. coproc:协处理器编号,IPC 固定为1;
  3. opc1:协处理器操作码;
  4. Rt:ARM 通用内核寄存器;
  5. CRn、CRm:协处理器目标寄存器;
  6. opc2:可选操作码,不需要时填 0。

MCR:把 ARM 寄存器数据写入协处理器 IPC 寄存器; MRC:把协处理器 IPC 寄存器数据读入ARM 内核寄存器。

3. 私有 RAM 与共享 SRAM 技术差异

  1. ITCM / DTCM(私有) CPU0、CPU1 的 ITCM/DTCM 逻辑地址完全一致,但物理存储相互独立。CPU0 只能访问自己的 ITCM/DTCM,无法读取修改 CPU1 的 ITCM/DTCM,反之亦然。不能用于双核数据交换,适合存放各个内核自己的局部变量、代码、堆栈。
  2. SRAM1 / SRAM2 / SRAM3(共享内存) 两颗 CPU 都具备读写权限,适合大批量数据缓存。但是共享内存本身不带硬件互斥保护,必须搭配 IPC 中断、软件互斥变量,防止双核同时读写同一块内存造成数据错乱。

4. 完整双核上电启动流程

上电复位(上电 / WDRSn/XRSn 复位)→ CPU0 执行 BOOTROM → BOOTROM 执行完毕,CPU0 跳转用户代码; CPU0 用户代码中判断BOOT_CTRL寄存器,如果配置值等于0x03,配置BOOT_ADDR1设置 CPU1 启动地址,开启 CPU1 时钟;CPU1 从指定地址开始运行用户程序。

工程编译约束:

  1. CPU1 工程需要先编译生成镜像文件;
  2. 将 CPU1 镜像编译嵌入 CPU0 主工程;
  3. 两颗内核共用同一片 Flash,需要修改 sct 链接脚本,完成 Flash 空间划分;SDK 示例默认 Flash 对半分配给 CPU0 与 CPU1。

5. IPC 三类功能底层技术原理

5.1 消息邮箱(Mailbox)

硬件提供 4 组独立 32bit 发送、接收寄存器。

  • 适合传递 32bit 短消息,也可以传递 “共享内存地址、数据长度、消息类型” 描述符,大块真实数据放在 SRAM 共享内存;
  • 两种工作模式:轮询标志位、中断触发;每个 CPU 最多支持 12 路 IPC 中断。

5.2 事件控制机制

由TASK任务寄存器、STATE状态寄存器构成硬件单元。

  1. CPU0 写 TASK 寄存器,可唤醒睡眠模式下的 CPU1;
  2. CPU1 读取 TASK,获取任务 ID,执行对应业务;读取动作硬件自动清空 TASK;
  3. CPU1 执行完任务写 STATE 寄存器上报状态;CPU0 读取 STATE 判断任务完成情况;
  4. TASK 为 0 时 CPU1 可以重新进入睡眠,实现事件驱动低功耗工作模式。

5.3 WRPRT 写寄存器保护

硬件机制,限制 CPU 对外设寄存器写权限,规避双核同时操作外设,其中一个内核误改写关键配置寄存器,造成系统异常。

相关推荐