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.

[参考译文] TMS320F28335:当看门狗计数器溢出时、WDFLAG 在复位时为0。

Guru**** 2587345 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1298919/tms320f28335-wdflag-is-0-on-a-reset-when-watchdog-counter-overflows

器件型号:TMS320F28335

我初始化看门狗、以便在计数器溢出时执行复位:

void watchdog_init_dog()
{
   EALLOW;
   SysCtrlRegs.SCSR |= 0x0001;//禁用 WD intr、启用 WD 复位
   SysCtrlRegs.WDCR = 0x00AF;// 10                 10 1         111
                            //清除、启用复位、PGM reg、将 WD 频率设置为90m/512/64 = 2747Hz。
   EDIS;
   返回;

并在以下函数中检查复位:  
void watchdog_check_bitten ()
{
  ///查看我们为何重新启动
  WD_bitten_BY_HW_DOG_FLAG = SysCtrlRegs.WDCR 和0x0080;

我还使用时钟对在 app.cfg 中设置的看门狗计数器进行复位。

var clock5Params = new Clock.Params ();
clock5Params.instance.name ="看门狗_CTR_reset_hndl";
clock5Params.period = 82;//将0.082周期设置为默认值。 WDCTR 每秒约耗尽12次。 1000/12=83.33。 通过使周期变小、使其速度加快一点。
clock5Params.startFlag = true;
program.global.watchdog_reset_hndl = Clock.create ("&watchdog_CTR_reset"、82、clock5Params);

上述函数都在 main()中调用:

int main()

{

  WATCHDOG_CHECK_BITTEN ();

公司名称: (其他初始化函数)


  watchdog_init_dog ();//必须在 BIOS 启动前立即运行
  ServiceDog ();
  BIOS_start();/*不返回*/
  返回(0);

为了测试看门狗是否正常工作、我在其中一个 ISR 例程中触发无限循环。  处理器确实会复位、但 WDCR WDFLAG 始终为0。  它不应该在 WD 复位后为1吗?