Thread 中讨论的其他器件:TMS320F28035、 C2000WARE
工具/软件:
您好:
我尝试在 TMS320F28035 上实施看门狗测试。 目标是启用看门狗、提供大于配置的超时周期的延迟、并检查看门狗是否会使系统复位。 我还想通过寄存器检查确认复位是由看门狗引起的、而不是上电复位引起的。
在测试中、我添加了一个while循环。 系统复位(我的 LED 在和看门狗测试循环之间切换,因此我可以看到复位的发生)main()。 不过、 WDFLAG 中的哪个位 WDCR 寄存器从不置位。 如果 ((SysCtrlRegs.WDCR & 0x0080)!= 0) 绝不会变为 true、则看门狗测试始终会失败。
在调试期间检查时、WDCR 值始终为0x0046。 即使我明确写SysCtrlRegs.WDCR = 0x002E;,读回它仍然显示0x0046.
下面是我的代码
void CPU_EnableWatchDog (void)
{
// WDPS(预分频):110 (512/32)
// WDCHK(第 3-5 位):101.
// WDDIS(位 6):0(启用看门狗)
// WDFLAG(位 7):0(忽略写入 0)
EALLOW;
SysCtrlRegs.WDCR = 0x002E;
EDIS;
}
void cpu_configurewatchdog()
{
// WDENINT = 0 μ s 复位→
// WDOVERRIDE = 1→允许 WDDIS 更改
EALLOW;
SysCtrlRegs.SCSR = 0x0005;
EDIS;
}
静态 UINT8 bit_pbitWDTTest (void)
{
UINT8 WDTTestPassed = 0;
//检查上次复位是否是 WDT 导致的
if ((SysCtrlRegs.WDCR & 0x0080)!= 0)// WDFLAG
{
WDTTestPassed = 1;
}
暴露
{
while (1)
{
GpioDataRegs.GPBSET.bit.GPIO33 = 1;// LED
}
}
返回 WDTTestPassed;
}
这里的问题是什么?
