TI中文支持网
TI专业的中文技术问题咨询交流网站

CC2640R2F Watchdog

SDK版本:simplelink_cc2640r2_sdk_2_30_00_28

工程:aoa_sender_cc2640r2lp_app示例工程

问题:1、看门重装载值设置,设置值和实际值不匹配

  2、看门狗不能正常工作

问题描述:

在AoASender_init()初始化中对看门狗进行了初始化操作(代码参照“..examples\rtos\CC2640R2_LAUNCHXL\drivers\watchdog”)编写的,在初始化过程中通过Util_constructClock()函数创建了几个不同周期的软件定时器;

初始化代码如下:

void WDT_init()
{

uint32_t time_count = 0;
Watchdog_Params params;

Watchdog_init();

//创建看门狗
Watchdog_Params_init(&params);
// params.callbackFxn = (Watchdog_Callback)watchdogCallback;
params.resetMode = Watchdog_RESET_ON;
params.debugStallMode = Watchdog_DEBUG_STALL_ON;

//打开看门狗
watchdogHandle = Watchdog_open(Board_WATCHDOG0, &params);
if (watchdogHandle == NULL) {
/* Error opening Watchdog */
SystemReset();
}

Watchdog_setReload(watchdogHandle, 65536);

}

1、首先验证看门狗初始化是否成功以及是否正常运行,此时调用Watchdog_clear()函数进行喂狗操作

      现象:看门狗正常运行,当超时时可以复位;但是通过Watchdog_setReload()设置的重新装载值与实际超时时间不符合;

                1->查找资料获取到,看门狗时钟为48M / 32 = 1.5M,即当设置为 Watchdog_setReload(1500000),则计时为1s;但实际测量时比1s大很多。

                 2->猜想,是否由于在无任务时,进入了睡眠导致的,进入睡眠后系统时钟应为32.768KHz;当设置为Watchdog_setReload(32768)时,确实看门狗计时为1s,但当设置为Watchdog_setReload(2*32768)时,实际计时值并没有改变还是1s左右。

                 3->猜想,是否是通过Util_constructClock()创建的软定时与看门狗有冲突导致的;将所有的软定时器创建代码屏蔽掉,发现看门狗不能正常工作。

      请问,这是由于什么原因导致的。

2、在计时值不正确的情况下,是可以产生看门狗复位的。

      但当加入Watchdog_clear()喂狗函数后,发现看门狗又不能正常工作了(不会产生超时复位)。 

      其喂狗,是通过一个周期性的软定时器定期产生一个事件,事件产生后进行喂狗操作。

if(events & AOA_FREQ_EVT)
{
      Watchdog_clear(watchdogHandle); //喂狗
}

     

Viki Shi:

需要跟同事讨论一下,稍后再来回复

Viki Shi:

回复 Viki Shi:

请尝试下下面的方式去设置WDT的装载值:

// set timeout period to 100 ms
tickValue = Watchdog_convertMsToTicks(handle, 100);
Watchdog_setReload(handle, tickValue);
Watchdog_clear()是清除WDT以防止出现复位信息,因此如果没有设备挂起或者其他原因时看门狗不会复位

user5968824:

回复 Viki Shi:

这种方法也测试过,但问题并没有解决。

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F Watchdog
分享到: 更多 (0)