[G32R] G32R501产品调试经验分享之二-“写寄存器保护与CAP的渊源”

[复制链接]
 楼主| IT-ZTP 发表于 2025-8-2 22:03 | 显示全部楼层 |阅读模式
G32R501产品调试经验分享之二-“写寄存器保护与CAP的渊源”


大家好,最近在研究极海G32R501的产品,书接上回:分享G32R501产品调试经验“系统启动(BOOT)”,今天来跟大家一起分享之二-“写寄存器保护与CAP的渊源”。
上个主题链接地址:https://bbs.21ic.com/icview-3475818-1-1.html?fromuser=IT-ZTP
现在进入今天的主题分享了:
一、 WRPRT是什么?
1.1 WRPRT保护机制概述
WRPRT(Write Register Protection)是一种硬件保护机制,用于防止CPU对系统中关键寄存器进行错误的写操作。该机制通过协处理器指令控制,提供对特定寄存器的访问权限管理。
1.2 主要特性
- 访问控制:由CP12寄存器中的WRPRT位决定
- 指令控制:
  - `WRPRT`指令:禁用保护(允许写入)
  - `WRPRTDIS`指令:启用保护(禁止写入)
- 多核独立:CPU0和CPU1有各自独立的WRPRT位
- 中断处理:
  - ISR开始时WRPRT位自动清零
  - 当前WRPRT值保存在影子寄存器中
  - ISR结束时可从影子寄存器恢复
1.3 功能描述
1.3.1 WRPRT保护机制
10419688e1a4029bd4.png
21869688e1a46de20e.png
注意:
- JTAG/SWD调试端口不受WRPRT限制
- 系统启动时默认启用寄存器保护
- 多核系统中各CPU的WRPRT位相互独立
1.3.2 ISR中的WRPRT保护
54050688e1a4ec4c53.png
1.3.3 使用注意事项
1 由于协处理器指令的延迟特性,建议:
   - 在寄存器访问和WRPRT/WRPRTDIS指令之间添加DSB/ISB屏障指令
   - 写入后执行读操作验证
2.寄存器只能通过协处理器指令访问,不能通过总线访问
二、 WRPRT软件如何实现?
2.1 软件实现指南
2.1.1 基本操作流程
1 禁用保护(允许写入):
   ```assembly
   WRPRT      ; 禁用保护
   DSB        ; 数据同步屏障
   ISB        ; 指令同步屏障
   ```
2 写入受保护寄存器
3 启用保护(禁止写入):
   ```assembly
   WRPRTDIS   ; 启用保护
   DSB        ; 数据同步屏障
   ISB        ; 指令同步屏障
   ```
2.2 中断服务程序中的处理
```assembly
ISR_Handler:
    ; WRPRT位自动清零,保护自动启用
    ; 影子寄存器保存了之前的WRPRT状态
   
    ; 如需修改受保护寄存器
    WRPRT      ; 禁用保护
    DSB
    ISB
    ; ... 修改寄存器操作 ...
   
    ; ISR结束前恢复WRPRT状态
    ; (硬件自动从影子寄存器恢复)
    BX LR
```
2.3 C语言封装示例
```c
// 写入受保护寄存器
void write_protected_reg(uint32_t reg_addr, uint32_t value)
{
    // 禁用保护
    asm volatile("WRPRT");
    asm volatile("DSB");
    asm volatile("ISB");
   
    // 写入寄存器
    (volatile uint32_t )reg_addr = value;
   
    // 等待写入完成
    uint32_t read_back = (volatile uint32_t )reg_addr;
    while(read_back != value) {
        read_back = (volatile uint32_t )reg_addr;
    }
   
    // 启用保护
    asm volatile("WRPRTDIS");
    asm volatile("DSB");
    asm volatile("ISB");
}
```
2.4 寄存器映射
35782688e1a5e90174.png
三、 WRPRT与哪些外设强相关?
3.1 WRPRT保护功能与捕获器(CAP)为何强相关
27107688e1aa01e04e.png
3.1.1 在G32R501数据手册中有说明:WRPRT保护功能与捕获器(CAP)有如下关系:G32R501捕获器(CAP):类型 1 CAP 比类型 0 CAP 增加了WRPRT 保护(已添加到关键寄存器)功能,每个 CAP 通道具有WRPRT 保护功能跟资深工程师请教后,他告诉我有如下的因素考虑:
1)捕获器(CAP)通常用于高精度信号采集(如PWM、定时器输入捕获等),其配置寄存器(如预分频值、触发模式、中断使能等)一旦被意外修改会导致:
1. 时序错误:错误的配置可能改变采样频率或触发条件
2. 数据丢失:误写可能清除未读取的捕获数据
3. 系统失控:例如错误关闭中断使能可能导致信号丢失
WRPRT的作用:正是通过硬件级写保护,防止CPU/DMA在运行时意外覆盖这些寄存器,确保配置的稳定性。
3.1.2多核系统中的安全隔离
类型1 CAP支持多核操作(如G32R501的CPU0/CPU1),WRPRT提供:
1)核间独立保护:CPU0的误操作不会影响CPU1的CAP通道配置
2)调试安全性:防止一个核的调试代码干扰另一个核的捕获任务
示例场景:
CPU0负责CAP通道1的PWM捕获,CPU1负责CAP通道2的脉冲计数。WRPRT可确保两核的配置互不干扰。

四、 总结&建议
4.1 总结,其实最本质的原因是:CAP模块的实时性和可靠性要求与WRPRT的硬件级保护特性高度匹配,尤其在复杂系统(多核、高中断频率、DMA参与)中,这种保护成为类型1 CAP的核心增强功能。

4.2 安全建议
1. 在关键代码段尽量保持WRPRT保护启用
2. 修改受保护寄存器后应立即恢复保护
3. 在中断处理程序中谨慎处理WRPRT状态
4. 重要寄存器修改后应进行读验证
5. 多核系统中需注意各CPU的WRPRT状态独立
好了,如上是跟大家分享G32R501产品“写寄存器保护与CAP的渊源”
,大家看了有什么启发,可以文章下方留言,谢谢大家!!!


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

本版积分规则

7

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部