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

如何我可以检查正确的操作,我的代码使用看门狗从凯尔。
我可以一步一步地把所有事情都交给NMI处理程序,但是当它到达例程的末尾时,它会执行软件重置
SetWord16(SYS_CTRL_REG, (GetWord16(SYS_CTRL_REG) & ~REMAP_ADR0) | SW_RESET);
然后报告说无法启动核心。我假设软件复位已经发生,但我没有办法在不断开开发板的情况下重新获得控制。

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

所以我如何运行我的程序与WDOG启用重置设备和检查它的工作ok没有燃烧的OTP。是可能的吗?

我以beacon3.40.6为基础。

使用WDOG强制设备重置是否简单?

设备:
DrNick1
离线
最后看到:4年9个月前
加入: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年9个月前
加入: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的时候会发生什么。对于该场景,默认设置ok吗?

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

嗨DrNick1,

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

由于MT_dialog

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

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

MT_dialog
离线
最后看到:5个月5天前
工作人员
加入: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年4个月前
加入:2015-06-02 12:48
1.是的,我想引起

1.是的,我正试图让看门狗开火,以测试它是否正常运行。我不知道我是否做了激活它所需的一切。
2.我注释掉了arch_main.cwdg_reload (WATCHDOG_DEFAULT_PERIOD)
3.我的初始序列是3个快速LED闪烁。(总时长600毫秒)
4.LED闪烁(应该导致看门狗在~2秒后起火)
5.我通过JLink调试器从uVision加载我的程序到RAM。
6.我让它自由奔跑
7.我观察了快速的LED闪光序列一次,然后缓慢的LED闪光序列不间断。==>无SW复位==>无看门狗发生

我还需要做些什么才能让看门狗开火,造成重置?

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

嗨kobyfr_mag,

我刚刚注意到在第五篇文章中,你是否注释掉了看门狗的定义?尝试#define CFG_WDG不要注释掉它,如果你注释掉它,SDK将不会启用它。

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

由于MT_dialog

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

谢谢你!
添加#定义CGF_WDOG起了作用。
由于而(1)我插入,我击中NMI_Handler,看门狗继续每2.5秒发射一次。

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

嗨chen123,

谢谢你的评论。这个论坛帖子很旧,已经关闭了,所以你能不能重新发一个?

谢谢,PM_Dialog