移植 S32K144 軟件復(fù)位代碼到 S32K344 如下:
void SystemSoftwareReset(void)
{
uint32 regValue;
/* 讀取中斷和復(fù)位控制寄存器 */
regValue = S32_SCB->AIRCR;
/* 清除寄存器 */
regValue &= ~( SCB_AIRCR_VECTKEYSTAT_Msk);
/* 配置系統(tǒng)復(fù)位請求位 */
/* 寫寄存器數(shù)值 */
}
但卻工作不正常。檢查 Contex M7 內(nèi)核的 SCB寄存器和 Cortex M4 是一致的,為什么在 S32K144上可以工作,卻在 S32K344上不能工作呢?因?yàn)檫@并沒有在 S32K3上實(shí)現(xiàn),S32K3 RM 參考手冊中列出了所有的復(fù)位源。
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)”
以觸發(fā)軟件中的功能復(fù)位。它基本上按預(yù)期工作。每次調(diào)用此函數(shù)后,可以看到S32K3被復(fù)位(MCU PC被設(shè)置為復(fù)位處理程序起始地址),復(fù)位計(jì)數(shù)器寄存器MC_RGM[FRIC]增加1(假設(shè)MC_RGM[DES]破壞性復(fù)位標(biāo)志在第一次POR復(fù)位后被清除,軟件中需要配置驅(qū)動初始化代碼RTD MCU_Init )??梢钥吹?,功能復(fù)位計(jì)數(shù)器閾值MC_RGM[FRET]是15。預(yù)計(jì)15次功能復(fù)位后將發(fā)生破壞性復(fù)位。但實(shí)際結(jié)果是,當(dāng)功能復(fù)位計(jì)數(shù)器RGM[FRIC]達(dá)到8時(shí),MCU PC被設(shè)置為RAM地址0x20427F2C,而不是像之前的7個(gè)復(fù)位事件那樣被設(shè)置為復(fù)位處理器地址。在0x20427F2C,它是一個(gè)分支到自身的無限循環(huán)。為什么功能復(fù)位計(jì)數(shù)器達(dá)到8會導(dǎo)致這種情況 PCC被復(fù)位為“0x20427F2C”而不是reset_handler。
根據(jù) S32K3參考手冊的"31.12 Recovery mode sequence"",在 8次功能復(fù)位后,安全 sBAF 將執(zhí)行復(fù)位序列——也就是說,應(yīng)用程序內(nèi)核可能被在某個(gè)RAM地址中無限循環(huán)。
根據(jù)參考手冊 "31.15.2 DCM Register DCMRWP1", DCMRWP1 位23 應(yīng)當(dāng)能夠控制這個(gè)表現(xiàn)。如果該位設(shè)置為 1, 禁止恢復(fù)模式。即便設(shè)置為1,恢復(fù)模式序列仍然被 sBAF執(zhí)行。
當(dāng)應(yīng)用問題大于 8次功能復(fù)位的時(shí)候,設(shè)置 DCMRWP1[22] 位,這個(gè)位禁止應(yīng)用恢復(fù)模式。當(dāng)應(yīng)用問題大于 8次破壞性復(fù)位的時(shí)候,設(shè)置DCMRWP1[23]位, 這個(gè)位禁止應(yīng)用恢復(fù)模式。
嘗試過操作 DCMRWP1[22] ,但是沒有效果。根據(jù)參考手冊,DCMRWP1[16~20] 和 DCMRWP1[11~14] 也執(zhí)行 sBAF控制的復(fù)位計(jì)數(shù)器,但是這些寄存器沒有變化,可能是sBAF版本的問題,新版本應(yīng)該沒有這個(gè)問題。在 MCU應(yīng)用初始化時(shí),手動清除功能復(fù)位計(jì)數(shù)寄存器 RGM FRET。
IP_MC_RGM->FRET= 0xFF;
//寫 1 來清除FREC寄存器
臨時(shí)解決方案是:MCU_Init() 代碼調(diào)用驅(qū)動函數(shù)Power_Ip_MC_RGM_ResetInit() 中添加如下判斷條件即可。
Mcu Reset Type配置調(diào)用Mcu_PerformReset();接口時(shí)是執(zhí)行Functional Reset還是Destructive Reset
唯一不復(fù)位的操作選項(xiàng)是,在 DCF中,禁用復(fù)位引腳功能。設(shè)置 Reset pad dedicated為 0,使用GPIO口功能,而不是復(fù)位功能引腳。默認(rèn)是1表示作為復(fù)位引腳功能。
審核編輯:湯梓紅
regValue |=(((uint32)(((uint32)(0x05FAU))<
S32_SCB->AIRCR = regValue; ? 注意:使用? Power_Ip_MC_ME_SocTriggerResetEvent(POWER_IP_FUNC_RESET_MODE) 復(fù)位 MCU, 該函數(shù)會復(fù)位 PTA5 (Reset_B 復(fù)位引腳)。在代碼里面做一個(gè)100ms 周期性的代碼復(fù)位操作,可以看到?PTA5有這個(gè)復(fù)位波形。在RTD里面配置關(guān)閉 Functional reset escalation 函數(shù),設(shè)置如下。
Mcu Functional Reset Escalation Threshold (0 -> 15)配置Functional Reset的閾值,0表示關(guān)閉此功能,若配置為n,則n次Functional Reset后會自動執(zhí)行一次Destructive Reset
Mcu Destructive Reset Escalation Threshold (0 -> 15)配置Destructive Reset的閾值,0表示關(guān)閉此功能,若配置為n,則n次Functional Reset后會保持在Reset狀態(tài),直到下一次power-on reset后重啟。如下表中復(fù)位源,會導(dǎo)致 Reset腳發(fā)生復(fù)位。
-
寄存器
+關(guān)注
關(guān)注
31文章
5435瀏覽量
124600 -
移植
+關(guān)注
關(guān)注
1文章
401瀏覽量
28704 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2291瀏覽量
96442 -
Cortex
+關(guān)注
關(guān)注
2文章
203瀏覽量
47386 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70794
原文標(biāo)題:S32K344 復(fù)位操作
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
零死角帶你玩轉(zhuǎn)S32K344之實(shí)時(shí)時(shí)鐘RTC

Lockstep core in S32K344即使有2個(gè)內(nèi)核也不能同時(shí)處理雙重任務(wù)?
S32K344 mcu的生產(chǎn)/調(diào)試建議使用哪種硬件/軟件?
S32K344 GPIO復(fù)位狀態(tài):MDM是什么意思?
如何在s32k344微控制器上使用SBC FS6500?
求分享S32K344的統(tǒng)一引導(dǎo)加載程序?
如何為s32k344板構(gòu)建裸機(jī)?
S32K344 MCU待機(jī)模式如何配置?
如何通過CAN與S32K344通信?
請問S32K344支持的最大SPI速率是多少?
如何將S32K344示例修改為S32K312?
基于 NXP S32K344 的 BCM 方案

評論