This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于WDCHK寄存器写非101来实现系统复位的问题



我配置的是进入中断的看门狗模式,在中断中再写

EALLOW;

WdRegs.WDCR.bit.WDCHK=0x0018;

EDIS;

  即我给WDCHK了一个非101的值,为何还是没有发生系统复位呢

  • 请注意,执行以下语句之前需要先关闭看门狗中断,使能看门狗复位功能(Watchdog interrupt enable对应的位为0)。

    同时,写入非101的值产生的是软件复位,你是如何判定没有产生系统复位的?建议可以查看XRS复位信号和一些寄存器的初始值确定。

  • 大哥你好, 我按之前配置的是当看门狗计数器溢出的时候进入看门狗中断,在看门狗中断中写语句来复位系统,因为我通过示波器观察检测板子上的TP2引脚,并没有产生低电平,按照你的意思,是要在看门狗中断中先关闭看门狗中断,使能看门狗复位功能同时,写入非101的值  才可以吗?

    就是说       WdRegs.SCSR.all =0;

                      WdRegs.WDCR.all = 0x0019;

    把这两句  写到看门狗中断复位子程序吗?    注意:我是一定要在看门狗中断服务子程序写语句来实现系统复位的大哥!

  • 是的,先关闭看门狗中断,也即配置为产生复位,再写入非法KEY值就能复位。关闭中断不影响当前中断的执行(复位了是否再执行中断本也无所谓),且你只是关闭看门狗复位,并不关闭其它中断,也不关闭PIE。复位后,看门狗恢复为初始状态,你只需要在下一次计数溢出前重新初始化看门狗为中断模式即可。

  • haha   谢谢  10# 大哥了   貌似是复位了    大大赞!

  • 请确保在main函数的初始化代码里将WD使能,并且配置为中断模式,这样只要进入中断就可以通过软件产生复位了。

    如果你需要一定条件下才产生,即之前还是需要多次中断执行,你可以在关闭看门狗中断/使能复位代码之前,加入条件判断。

    如果问题解决了,麻烦点击“是”按钮结帖。谢谢!