11个帖子/ 0新
最后一篇
Drnick1.
离线
最后一次露面:4年8个月前
加入:2014-07-01 11:55
测试看门狗

如何使用Keil内部的看门狗检查代码的正确操作。
我可以通过NMI处理程序来处理所有的事情,但是当它到达例程的末尾时,它会执行软件重置
setword16(sys_ctrl_reg,(getword16(sys_ctrl_reg)&reswap_adr0)| sw_reset);
然后它报告它无法启动核心。我假设已经发生了软件重置,但我无法断开开发板的连接控制。

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

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

我正在运行beacon3.40.6作为一个基础。

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

设备:
Drnick1.
离线
最后一次露面:4年8个月前
加入:2014-07-01 11:55
当看门狗火灾时,它

当看门狗触发时,它最终将在NMI Handler例程中进入以下行(BeaCon3.40.6)
setword16(sys_ctrl_reg,(getword16(sys_ctrl_reg)&reswap_adr0)| sw_reset);
这是重置系统的指令。执行此代码后,没有任何反应。
〜remap_adr0实际上是什么意思。在数据表中提供的4个可能的值 - 默认值为00(ROM),这意味着它将从ROM中的位置0开始执行。
我有限的理解说,我应该从系统RAM重新启动,因为这是我的程序所在的位置(假设我没有丢失电源或进入深度睡眠模式。)
任何人都可以确认我需要将remap_adr0从其默认设置更改,何时不需要这样做?

Drnick1.
离线
最后一次露面:4年8个月前
加入:2014-07-01 11:55
setword16(sys_ctrl_reg,

setword16(sys_ctrl_reg,(getword16(sys_ctrl_reg)&reswap_adr0)| sw_reset);
因此,此行的目的是有效地使对应于REMAP_ADR0的比特为零,即它强制默认值。
如果我改变了线
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG)) | SW_RESET);
在调用此命令之前,使REMAP_ADR0 = 0x02(SYSRAM)出现,然后看门狗定时器到期导致“正确”重置,并且代码再次从开头运行。
我还可以设置工作的断点,所以一切看起来都很好!

我仍然不确定与看门狗一起去OTP时会发生什么。是该方案的默认设置确定吗?

mt_dialog.
离线
最后一次露面:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨drnick1,

嗨drnick1,

是的,remap_adr0是为了确保remap_adr0设置为默认地址。默认设置应强制引导加载程序运行,并且可能会从OTP读取。

谢谢mt_dialog.

Kobyfr_mag.
离线
最后一次露面:5年3个月前
加入:2015-06-02 12:48
你好。

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

mt_dialog.
离线
最后一次露面:三个月三个星期前
职员
加入:2015-06-08 11: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.是的,我正试图导致看门狗着火,以便测试它是运作的。我不知道是否确实尽一切才能激活它。
我评论了Arch_Main.cwdg_reload(watchdog_default_period)
3.我的init序列是3个快速LED闪烁。(600毫秒总持续时间)
4.我的无尽循环是缓慢的LED闪烁(应该会导致看门狗在~2秒后着火)
5.通过JLINK调试器将我的程序加载到UVISION中的RAM。
6.我让它自由奔跑
7.我观察了一次快速的LED闪光序列,然后慢慢LED闪光序列不间断。==>没有SW RESET ==>没有发生看门狗

我有什么需要做的,以便看门狗射击,并导致重置?

mt_dialog.
离线
最后一次露面:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨Kobyfr_mag,

嗨Kobyfr_mag,

我刚刚注意到第5号帖子,你评论了看门狗的定义吗?尝试#define cfg_wdg不要发表评论,如果你用sdk发表评论它不会启用它。

请尝试禁用睡眠模式并留下WDG_RELOAD(WATKDOG_DEFAULT_PERIOD)注释,通过在新鲜模板中使用KEIL ENVIROMENT来运行它。如果您这样做,您的代码将转到NMI_Handler()。

谢谢mt_dialog.

Kobyfr_mag.
离线
最后一次露面:5年3个月前
加入:2015-06-02 12:48
谢谢你。

谢谢你。
添加#定义CGF_WDOG做了诀窍。
因为而(1)我插入,我点NMI_Handler看门狗会每2。5秒发射一次。

chen123
离线
最后一次露面:4个月2周前
加入:2021-01-07 01:43
你能告诉我如何
  • 你能告诉我DA14580的软件复位操作是怎么做的吗
PM_DIALOG.
离线
最后一次露面:16小时27分钟前
职员
加入:2018-02-08 11:03
嗨Chen123,

嗨Chen123,

谢谢你的评论。这个论坛线程非常古老和关闭,所以你可以提出一个新的吗?

谢谢,PM_DIALOG.