作者:英飛凌 張馳
在默認的狀態下,大部分RAM在上電復位後都會被清零。如果需要在上電復位後不清零RAM,則需要配置UCB_DFLASH中的下面區域:
這個區域在復位後會自動load到DMU_HF_PROCONRAM寄存器中, DMU_HF_PROCONRAM中的RAMIN位域決定了冷上電復位和熱上電復位是否會清零RAM,默認的設置是所有復位都會清零RAM,但清零的RAM區域由RAMINSEL和LMUINSEL決定。
RAMINSEL選擇復位後是否清零各個CPU的PSPR/DSPR/PACHE/DCACHE:
LMUINSEL選擇復位後是否清零各個CPU的DLMU:
基於TASKING編譯器的復位後不初始化DLMU0的示例程序
如果現在把變量放在DLMU0的區域,且不想復位影響DLMU0區域,則可以如下操作。這裡復位指除冷上電復位之外的其他復位,例如軟體復位。
Step 1:UCB_DFLASH的PROCONRAM區域可以配置不初始化的RAM區域,例如需要不初始化DLMU0,則把LMUINSEL的bit0設為1。
#if defined(__GNUC__) #pragma section #pragma section ".dflash_orig" a #endif #if defined(__TASKING__) #pragma section farrom "dflash_orig" #endif #if defined(__DCC__) #pragma section CONST ".dflash_orig" far-absolute R #endif constIfx_DFlash_Config dflash_orig = { 0x00000000, // PROCONUSR 0x00000000, // PROCONDF 0x01000000, // PROCONRAM { 0x00000000, // RSV1 },
{ 0x00000000, // PW0 0x00000000, // PW1 0x00000000, // PW2 0x00000000, // PW3 0x00000000, // PW4 0x00000000, // PW5 0x00000000, // PW6 0x00000000, // PW7 },
{ 0x00000000, // RSV2 },
0x43211234, /**< \brief 0x1F0: .confirmation: 32-bit CODE, (always same)*/ { 0x00000000, // RSV3 } };
|
在TASKING的link文件中加入下面段:
group (ordered) { group dflash_orig (run_addr=mem:ucb[0x2200]) { select".rodata.dflash_orig"; } }
|
Step 2:在cold power on reset後在程序中清零DLMU0區域,判斷上電復位代碼:
uint8 IsPowerOnReset(void) { uint8 ret; Ifx_SCU_RSTSTAT RstStat; Ifx_SCU_RSTCON2 RstCon2;
RstStat.U = MODULE_SCU.RSTSTAT.U;
if((RstStat.B.PORST == 1) && (RstStat.B.STBYR == 1)) { RstCon2.U = MODULE_SCU.RSTCON2.U; RstCon2.B.CLRC = 1; Mcal_WriteCpuEndInitProtReg(&MODULE_SCU.RSTCON2.U, RstCon2.U); ret = 1; } else { ret = 0; }
return ret; }
|
清零DLMU0代碼如下,注意在清零時需要64bit對齊訪問,否則可能會用RMW方式訪問,出現ECC error,因為在上電後RAM的內容是隨機的。
void DLMU0_Init(void) { for(uint32 i=0; i<0x10000; i=i+8) { *(uint64*)(0xB0000000 + i) = 0; } }
|
Step 3:在程序中訪問DLMU區域,不能用pragma 的方式把變量放在data或者bss區域,可以用直接地址訪問的方式,否則變量依然會在startup文件中的C_Init()函數中初始化這個區域。
volatileuint32* run_cnt1_dlmu0 = (uint32*)0xB0000000;
(*run_cnt3_dlmu0)++;
|
該文章來源於“英飛凌汽車電子生態圈”官方微信,英飛凌汽車電子生態圈對該內容擁有最終解釋權。如需轉載,請註明來源,英飛凌保留所有權利。
QR Code. (英飛凌汽車電子生態圈)官方微信公眾號
評論