11个帖子/ 0个新帖子
最后发表
DrNick1
离线
最后看到:4年8个月前
加入:11 2014-07-01 55
测试机构

如何使用Keil内部的看门狗检查代码的正确操作。
我可以通过NMI处理程序来处理所有的事情,但是当它到达例程的末尾时,它会执行软件重置
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
然后报告说无法启动核心。我假设软件重置已经发生,但我没有办法获得控制回来,而不断开开发板。

如果我尝试在调试器之外运行程序(通过在它到达这一点之前停止调试器),它仍然不能正确重置。

因此,我如何运行我的程序与WDOG启用重置设备,并检查其工作正常,而不烧OTP。是可能的吗?

我用beacon3。40.6作为基础。

它直接使用WDOG强制设备重置吗?

设备:
DrNick1
离线
最后看到:4年8个月前
加入:11 2014-07-01 55
看门狗失火的时候

当看门狗触发时,它最终到达NMI处理程序例程中的以下行(Beacon3.40.6)
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
这是重置系统的指令。执行此代码后,不会发生任何事情。
~REMAP_ADR0到底是什么意思?在数据表中有4个可能的值-默认值是00 (ROM),这意味着它将从ROM中的位置0开始执行。
我有限的理解告诉我应该从系统RAM中重新启动,因为我的程序驻留在这里(假设我没有失去电源或进入深度睡眠模式)。
有人能确认我需要改变REMAP_ADR0从它的默认设置,我什么时候不需要这样做?

DrNick1
离线
最后看到:4年8个月前
加入:11 2014-07-01 55
SetWord16 (SYS_CTRL_REG

SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
因此,这一行的目的是有效地使与REMAP_ADR0对应的位为零,即强制使用默认值。
如果我把线路换成
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);
并在此调用之前使REMAP_ADR0 =0x02 (SysRAM),然后看门狗定时器过期导致“正确的”复位,代码重新开始运行。
我还可以设置断点的工作,所以一切似乎都很好!

我还是不确定当我和看门狗去OTP时会发生什么。默认设置是否适合该场景?

MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨DrNick1,

嗨DrNick1,

是的,正确的REMAP_ADR0是为了确保REMAP_ADR0被设置为默认地址。默认设置应该强制引导加载程序运行,并最终从OTP读取数据。

由于MT_dialog

kobyfr_mag
离线
最后看到:5年3个月前
加入:2015-06-02 12:48
你好。

你好。
我尝试使用sdk_driver看门狗API来初始化看门狗。
1.我已经启用了看门狗/ / # undef CFG_WDOG
2.我试过了wdg_init (1)wdg_init (0)
我的软件似乎没有重新启动,即使我没有重置看门狗:
1.它不会再点亮LED(我有一个LED闪烁启动)
2.我的Keil IDE调试会话没有命中NMI_HandlerC
添加代码来测试看门狗计数器,表示它卡在0x00FF

MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨kobyfr_mag,

嗨kobyfr_mag,

您是否模拟了最终会使软件崩溃并触发看门狗(例如,意味着陷入无尽的循环中)的情况?你在睡眠模式时使用看门狗,看门狗重置每次你从睡眠中醒来。你不需要显式地启用它,只需定义它,SDK会负责初始化。除此之外,当处于睡眠模式时,看门狗会在每次唤醒时重新加载main_func()函数底部的arch_main.c文件,你可以注释掉下面的代码片段并测试它:

如果(USE_WDOG)
wdg_reload (WATCHDOG_DEFAULT_PERIOD);

由于MT_dialog

kobyfr_mag
离线
最后看到:5年3个月前
加入:2015-06-02 12:48
1.是的,我想要

1.是的,我在试着让一只看门狗开火,以测试它是否可行。我不知道我是否做了所有需要激活它。
2.我注释掉了arch_main.cwdg_reload (WATCHDOG_DEFAULT_PERIOD)
3.我的init序列是3个快速LED闪烁。(总持续时间600 mSec)
4.我的无尽循环是缓慢的LED闪烁(应该会导致看门狗在~2秒后着火)
5.我从uVision加载我的程序到RAM,通过JLink调试器。
6.我让它自由奔跑
7.我观察了快速LED闪烁序列一次,然后慢速LED闪烁序列不间断。==> no SW reset ==> no watchdog occurred

我还需要做什么才能让看门狗开火,复位吗?

MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨kobyfr_mag,

嗨kobyfr_mag,

我刚刚注意到第5篇文章,你把看门狗的定义注释掉了吗?尝试#define CFG_WDG不要注释出来,如果你注释出来SDK将不会启用它。

请尝试禁用睡眠模式,并留下wdg_reload(WATCHDOG_DEFAULT_PERIOD)注释,在一个新的模板中使用keil环境运行它。如果您这样做,您的代码将转到NMI_Handler()。

由于MT_dialog

kobyfr_mag
离线
最后看到:5年3个月前
加入:2015-06-02 12:48
谢谢你!

谢谢你!
添加#定义CGF_WDOG起了作用。
由于而(1)我插入,我点NMI_Handler看门狗会每2。5秒发射一次。

chen123
离线
最后看到:4个月,3个星期前
加入:2021-01-07 01:43
你能告诉我怎么做吗
  • 你能告诉我DA14580的软件复位操作是怎么做的吗
PM_Dialog
离线
最后看到:1天9小时前
工作人员
加入:2018-02-08 11:03
嗨chen123,

嗨chen123,

谢谢你的评论。这个论坛的帖子很旧,也很封闭,所以你能再发一个新的吗?

谢谢,PM_Dialog