电子说
移植 S32K144 软件复位代码到 S32K344 如下:
void SystemSoftwareReset(void)
{
uint32 regValue;
/* 读取中断和复位控制寄存器 */
regValue = S32_SCB->AIRCR;
/* 清除寄存器 */
regValue &= ~( SCB_AIRCR_VECTKEYSTAT_Msk);
/* 配置系统复位请求位 */
/* 写寄存器数值 */
}
但却工作不正常。检查 Contex M7 内核的 SCB寄存器和 Cortex M4 是一致的,为什么在 S32K144上可以工作,却在 S32K344上不能工作呢?因为这并没有在 S32K3上实现,S32K3 RM 参考手册中列出了所有的复位源。
Table 153. Destructive reset sources
Table 155. Functional reset sources
通过读取 DCMROF20[DCF_DEST_RST_ESC]寄存器可以确定是否使能成功。
使用RTD API
“Power_Ip_MC_ME_SocTriggerResetEvent(Power_Ip_FUNC_RESET_MODE)”
以触发软件中的功能复位。它基本上按预期工作。每次调用此函数后,可以看到S32K3被复位(MCU PC被设置为复位处理程序起始地址),复位计数器寄存器MC_RGM[FRIC]增加1(假设MC_RGM[DES]破坏性复位标志在第一次POR复位后被清除,软件中需要配置驱动初始化代码RTD MCU_Init )。可以看到,功能复位计数器阈值MC_RGM[FRET]是15。预计15次功能复位后将发生破坏性复位。但实际结果是,当功能复位计数器RGM[FRIC]达到8时,MCU PC被设置为RAM地址0x20427F2C,而不是像之前的7个复位事件那样被设置为复位处理器地址。在0x20427F2C,它是一个分支到自身的无限循环。为什么功能复位计数器达到8会导致这种情况 PCC被复位为“0x20427F2C”而不是reset_handler。
根据 S32K3参考手册的 " 31.12 Recovery mode sequence"",在 8次功能复位后,安全 sBAF 将执行复位序列——也就是说,应用程序内核可能被在某个RAM地址中无限循环。
根据参考手册 "31.15.2 DCM Register DCMRWP1", DCMRWP1 位23 应当能够控制这个表现。如果该位设置为 1, 禁止恢复模式。即便设置为1,恢复模式序列仍然被 sBAF执行。
当应用问题大于 8次功能复位的时候,设置 DCMRWP1[22] 位,这个位禁止应用恢复模式。当应用问题大于 8次破坏性复位的时候,设置 DCMRWP1[23] 位, 这个位禁止应用恢复模式。
尝试过操作 DCMRWP1[22] ,但是没有效果。根据参考手册,DCMRWP1[16~20] 和 DCMRWP1[11~14] 也执行 sBAF控制的复位计数器,但是这些寄存器没有变化,可能是sBAF版本的问题,新版本应该没有这个问题。在 MCU应用初始化时,手动清除功能复位计数寄存器 RGM FRET。
IP_MC_RGM->FRET= 0xFF;
//写 1 来清除 FREC 寄存器
临时解决方案是:MCU_Init() 代码调用驱动函数Power_Ip_MC_RGM_ResetInit() 中添加如下判断条件即可。
注意:使用 Power_Ip_MC_ME_SocTriggerResetEvent(POWER_IP_FUNC_RESET_MODE) 复位 MCU, 该函数会复位 PTA5 (Reset_B 复位引脚)。在代码里面做一个100ms 周期性的代码复位操作,可以看到 PTA5有这个复位波形。在RTD里面配置关闭 Functional reset escalation 函数,设置如下。
Mcu Reset Type 配置调用Mcu_PerformReset();接口时是执行Functional Reset还是Destructive Reset
唯一不复位的操作选项是,在 DCF中,禁用复位引脚功能。设置 Reset pad dedicated为 0,使用GPIO口功能,而不是复位功能引脚。默认是1表示作为复位引脚功能。
审核编辑:汤梓红
regValue |=(((uint32)(((uint32)(0x05FAU))<
S32_SCB->AIRCR = regValue;
Mcu Functional Reset Escalation Threshold (0 -> 15) 配置Functional Reset的阈值,0表示关闭此功能,若配置为n,则n次Functional Reset后会自动执行一次Destructive Reset
Mcu Destructive Reset Escalation Threshold (0 -> 15) 配置Destructive Reset的阈值,0表示关闭此功能,若配置为n,则n次Functional Reset后会保持在Reset状态,直到下一次power-on reset后重启。如下表中复位源,会导致 Reset脚发生复位。
全部0条评论
快来发表一下你的评论吧 !