移植 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腳發生復位。
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
移植
+關注
關注
1文章
379瀏覽量
28124 -
計數器
+關注
關注
32文章
2256瀏覽量
94477 -
Cortex
+關注
關注
2文章
202瀏覽量
46484 -
代碼
+關注
關注
30文章
4779瀏覽量
68524
原文標題:S32K344 復位操作
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論