你好
我正在研究 i.MX8ULP,并尝试在 WDOG32 触发信号 RESET 之前在中断模式下使用它。
尽管我已将监视程序配置为启用中断,但它仍然像普通的监视器一样运行——它直接RESET系统而不会产生中断。
void WDOG0_IRQHandler(void)
{
PRINTF("Watchdog IRQ triggered! Count = %u\r\n", wdog_irq_count);
/* Clear interrupt flag */
WDOG32_ClearStatusFlags(WDOG0, kWDOG32_InterruptFlag);
wdog_irq_count++;
SDK_ISR_EXIT_BARRIER;
}
/* Get default configuration */
WDOG32_GetDefaultConfig(&config);
/* Enable interrupt mode */
config.enableInterrupt = true;
config.timeoutValue = WDOG_TIMEOUT_VALUE;
NVIC_EnableIRQ(WDOG0_IRQn);
for (temp = 0; temp < DELAY_TIME; temp++)
{
__NOP();
}
/* Initialize WDOG32 with config */
WDOG32_Init(WDOG0, &config);
while(1)
{
}
我附上了完整的 wdog32.c文件也在那个看门狗 IRQ 里我已经刷新了看门狗但是超时后它仍在RESET。
WDOG32 中断模式是否需要额外的初始化,在这种情况下,我只需要中断而不是 RESET 可能吗?
你好,@Bio_TICFSL 看门狗 RESET 时你
有没有用 EVK 在 0.9V 下启动?
你好,@Bio_TICFSL
我使用 EVK 测试了看门狗示例代码的默认高频率,启动正常。但是,当我将电压降至0.9V时(如我前面的代码片段所示),看门狗超时后,内核在启动过程中会卡住。
如果您已经在0.9V 的 EVK 上进行了测试。能否请您分享一下您在 EVK 上用于该测试的确切代码/配置?
谢谢、
您好,
代码没问题我只是看能降低电压的东西,因为 EVK 可以启动大约 9.0 伏特。
此致
你好,@Bio_TICFSL
status = UPOWER_ChngRTDDomBias(DRIVE_MODE_UD);
assert(status == 0);
status = UPOWER_ChngPmicVoltage(PMIC_BUCK2, PMIC_VOLTAGE_0_9V);
if (status == 0)
{
status = UPOWER_GetPmicVoltage(PMIC_BUCK2, &voltage);
if (status == 0 && voltage == PMIC_VOLTAGE_0_9V)
{
// success
}
else
{
assert(false);
}
}
else
{
assert(false);
}在调试过程中,我发现
当 PMIC 在 ARBB 模式下设置为 0.9V 时,看门狗 RESET 后,内核在启动期间会卡住。
如果我将 PMIC 电压增加到 1.0V 或 1.1V,即使在较低的频率下,RESET 和启动也能正常工作。
我需要将PMIC电压保持在 0.9V 以节省功耗,但是使用这种设置,系统在看门狗 RESET 后无法可靠地启动。
如能得到任何帮助或指导,将不胜感激。
在 i.MX8ULP 的 Cortex-M33 上,我将 M33 内核配置为ARBB 模式运行。当监视程序超时时,它会尝试 RESET 内核。但是,在重启过程中,内核似乎卡住了,因为在RESET之前,代码已将M33切换到ARBB模式,该模式以较低的频率运行。
需要进行哪些修改才能使内核在 ARBB 模式下运行并且监视程序 RESET,它才能成功再次启动?
你好,@Bio_TICFSL
我能够在非中断模式下使用看门狗,它正在按预期重置系统。
但是,我需要看门狗中断模式,而且我不确定启用和处理中断的正确配置步骤。
你能否指导我如何在中断模式下启用 WDOG32,这样我的代码才能在 RESET 之前真正进入 WDOG32 IRQ 处理程序?
你好
是的,根据参考手册应该是可能的,请看第 9.1.7 章电源模式详情(实时功能域):
如你所见,在 ARBB 模式下,WDOG0 的所有必要元器件都可用,但也许 uPower 正在控制这个 WDOG 或整个 PBRIDGE0 的门控时钟。
请参阅《uPower 固件用户指南》。
此致