主题中讨论的其他器件:HALCOGEN
您好!
我想测试"主 SRAM 硬错误缓存和活锁"机制。
以下是我对该机制的理解:
(1)如果存在 ECC 活锁故障、将设置 ESM 组2通道16。
(2)只要 ESM 2.16被置位、处理器就会进入"FIQ void esmHighInterrupt (void)"。 "HALCoGen v 04.06.01生成"Fiq void esmHighInterrupt (void)"。
问题1:我的理解是否正确?
我在 安全 TI 诊断库 v 2.3.1中找到了一些示例代码。
SRAM_LIVELOCK_DIAGNOSTICS 案例:
(void) sl_FLAG_SET (testType);
TP =(volatile uint64 *) 0x08000004u;/*未对齐访问的起始地址*/
eccb1 =(易失 uint64 *) 0x08000000u;/* bank1基字*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
eccb1 = eccb1 +(0x00400000u/sizeof (uint64));/*指向 bank1基字 ECC 的指针*/
eccB2 =(易失 uint64 *) 0x08000008u;/* bank2基字*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
eccB2 = eccB2 +(0x00400000u/sizeof (uint64));/*指向 bank2基字 ECC 的指针*/
/*启用对 ECC RAM 的写入*/
/*SAFETYMCUSW 9 S MR:12.2. 注释_10*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
bit_set (tcram1REG->RAMCTRL、TCRAM_RAMCTRL_ECCWREN);
/*SAFETYMCUSW 9 S MR:12.2. 注释_10*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
bit_set (tcram2REG->RAMCTRL、TCRAM_RAMCTRL_ECCWREN);
regBkupRamTh1 = tcram1REG->RAMTHRESHOLD;
regBkupRamTh2 = tcram2REG->RAMTHRESHOLD;
/*将阈值设置为1 */
tcram1REG->RAMTHRESHOLD = 0x1u;
tcram2REG->RAMTHRESHOLD = 0x1u;
_sl_Barrier 数据访问();
/*导致1位 ECC 错误*/
* eccB1 ^= TCRAM_SYN_1bit_DATA_ECC;
* eccB2 ^= TCRAM_SYN_1bit_DATA_ECC;
/*从位置读取以生成错误*/
_sl_Barrier 数据访问();
ramread64 =(* tp);/*未对齐的读取*/
_sl_Barrier 数据访问();
sl_FLAG_CLEAR (testType);
中断;
但是, 当我在调试模式中逐步测试上述代码时,我只能看到生成1位 ECC 错误 ,但 ESM 2.16未设置。
Q2:出什么问题了吗?