大家好、
我将使用以下代码在 RM42L432上测试 VIM 奇偶校验。 奇偶校验结果可以通过几次(ESM 通道15被标记)、但在经过数百次之后、ESM 通道15不能被标记。
我还发现、如果 VIMRAMLOC 设置为0xFFF82000、则中断可能会受到 VIM 奇偶校验的影响、尽管 0xFFF82000 与幻象矢量相关!
帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define VIMRAMPARLOC (*(volatile UINT32 *) 0xFFF82578U)
#define VIMRAMLOC (*(volatile UINT32 *) 0xFFF82178U)
void vimParityCheck (空)
{
易失性 uint32 vimramread = 0U;
uint32 vimparctl_bk = VIM_PARCTL;
/*用户代码开始(49)*/
/*用户代码结束*/
/*启用奇偶校验和奇偶校验测试模式*/
VIM_PARCTL = 0x0000010AU;
/*翻转 VIM RAM 奇偶校验位置中的一个位*/
VIMRAMPARLOC ^= 0x1U;
/*禁用奇偶校验测试模式*/
VIM_PARCTL = 0x0000000AU;
/*导致奇偶校验错误*/
vimramread = VIMRAMLOC;
/*检查 ESM 组1通道15是否被标记*/
如果((esmREG->SR1[0U]和0x8000U)=0U)
{
/* VIM RAM 奇偶校验错误未被标记为 ESM。 *
自测故障通知(VIMPARITYCHECK_FAIL1);
vRedunLedOn();/*LED 指示灯*/
}
其他
{
/*清除 VIM 中的 VIM RAM 奇偶校验错误标志*/
VIM_PARFLG = 0x1U;
/*清除 ESM 组1通道15标志*/
esmREG->SR1[0U]= 0x8000U;
/*启用奇偶校验和奇偶校验测试模式*/
VIM_PARCTL = 0x0000010AU;
/*恢复到正确的数据,翻转奇偶校验位置的位0 */
VIMRAMPARLOC ^= 0x1U;
}
/*恢复奇偶校验控制寄存器*/
VIM_PARCTL = vimparctl_Bk;
/*用户代码开始(50)*/
/*用户代码结束*/
}