我尝试使用示例程序“Sbc_fs26_Example_DS”将 FS26 置于正常模式,但失败了。似乎初始化期间的第一个看门狗提要已经失败了。这是我的代码和 UART 打印输出。我注意到,每当它退出调试模式时,它都会导致整个 FS26 重置,反复循环执行此代码。
eReturnValue = Sbc_fs26_Init(&sbcConfig_BOARD_InitPeripherals);
Sbc_fs26_ReadRegister(TRUE, SBC_FS26_FS_STATES_ADDR, &rxData);
printf("SBC_FS26_FS_STATES_ADDR: DevStatus:%x, FS_status:%xrn",rxData.u8DeviceStatus,rxData.u16ReadData);
Sbc_fs26_ReadRegister(TRUE, SBC_FS26_FS_WD_TOKEN_ADDR, &rxData);
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("开始标记:%xrn",rxData.u16ReadData);
eReturnValue |= Sbc_fs26_InitDevice();
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("Sbc_fs26_InitDevice:%srn",OKtoSTR(eReturnValue));
eReturnValue = Sbc_fs26_WdChangeToken(new_token);
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("Sbc_fs26_WdChangeToken:%srn",OKtoSTR(eReturnValue));
T_sbc_fs26_
timeDelay(500U);
/* 检查函数 Sbc_fs26_ReadRegister() 读取寄存器 SBC_FS26_FS_WD_TOKEN_ADDR */
eReturnValue = Sbc_fs26_ReadRegister(TRUE, SBC_FS26_FS_WD_TOKEN_ADDR, &rxData);
if((eReturnValue != E_OK) || (rxData.u16ReadData != new_token))
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("new_token/real_token:%x/%xrn",new_token,rxData.u16ReadData);
/* 调用函数 WDG 刷新 */
eReturnValue = Sbc_fs26_WdRefresh();
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("Sbc_fs26_WdRefresh:%srn",OKtoSTR(eReturnValue));
/* 检查 SBC 错误计数器 */
eReturnValue = Sbc_fs26_GetFaultErrorCounterValue(&errorCounter);
if((eReturnValue != E_OK) || (errorCounter != 0U))
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("fs26_GetFaultErrorCounterValue:%xrn",errorCounter);
/* 退出调试模式。*/
eReturnValue = Sbc_fs26_WriteRegister(TRUE, SBC_FS26_FS_STATES_ADDR, 0X4000, NULL_PTR);
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("退出调试模式:%srn",OKtoSTR(eReturnValue));
/* 使用 SBC_FS26_FS_BOTH 调用函数 fs26_FsxbRelease() 来设置 FS0B 和 FS1B */
eReturnValue = Sbc_fs26_FsxbRelease(SBC_FS26_FS_BOTH);
如果(eReturnValue != E_OK)
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("fs26_FsxbRelease:%srn",OKtoSTR(eReturnValue));
/* 读取内存中SBC FS26中的数据 0XB = 正常模式 */
eReturnValue = Sbc_fs26_ReadRegister(TRUE, SBC_FS26_FS_STATES_ADDR, &rxData);
if((eReturnValue != E_OK) || ((rxData.u16ReadData & 0xFF) != SBC_FS26_NORMAL_MODE))
{
b通过=假;/* 初始化过程中发生错误。*/
}
printf("读取 SBC_FS26_FS_STATES_ADDR:%srn",OKtoSTR(eReturnValue));
printf("SBC_FS26_FS_STATES_ADDR: DevStatus:%x, FS_status:%xrn",rxData.u8DeviceStatus,rxData.u16ReadData);
#S32K3-T-BOX #FS26