深圳市航顺芯片技术研发有限公司
直播中

张强

7年用户 1345经验值
私信 关注
[问答]

如何利用S32K144去测试看门狗模块呢

如何利用S32K144去测试看门狗模块呢?测试过程是怎样的?

回帖(1)

安瑞娟

2021-11-2 14:31:33
  S32K144测试看门狗模块
  看门狗的测试采用初始化看门狗定时器及超时计数器后,在一个较长时间不喂狗,看芯片是否复位。测试的难度在于时钟的选择以及复位效果的观察。
  S32K144看门狗计数器是16位的,也就是最大计数可以到65532。如果选择一个较高的时钟会导致芯片很快复位,无法观察实际效果。所以建议选择低速LPO时钟,将LPO时钟配置成1K,最大喂狗时间可以设置到63s左右。
  LPO时钟配置成1K
  
  看门狗选择LPO时钟
  
  生成的看门狗通用代码如下:
  wdog_user_config_t watchdog1_Config0 = {
  .clkSource = WDOG_LPO_CLOCK,
  .opMode = {
  false, /* Wait Mode*/
  false, /* Stop Mode*/
  false /* Debug Mode*/
  },
  .updateEnable = true,
  .intEnable = false,
  .winEnable = false,
  .windowValue = 0,
  .timeoutValue = 64000,
  .prescalerEnable = false
  };
  提供初始化及测试接口
  /***********************************************************************************
  Function: void watchdog_init(uint16_t timems)
  Description: 初始化看门狗
  Input: time 配置看门狗超时计数值,最大为65532
  Output: NONE
  Return: NONE
  Others: NONE
  ************************************************************************************/
  void watchdog_init(uint16_t timems)
  {
  //配置看门狗超时计数值,最大为65532
  uint16_t timeval = timems*WDG_MS_PERIOD;
  if(timeval》65532)
  timeval=65532;
  watchdog1_Config0.timeoutValue = timeval;
  //初始化看门狗
  WDOG_DRV_Init(INST_WATCHDOG1, &watchdog1_Config0);
  //启动看门狗
  WDOG_DRV_Trigger(INST_WATCHDOG1);
  }
  //喂狗接口
  void feed_dog_hal(void)
  {
  //重置看门狗定时器
  WDOG_DRV_Trigger(INST_WATCHDOG1);
  }
  测试过程,由于看门狗生效后芯片会重启,所以无法仿真,设计了一段代码,通过打印来观察实际的芯片重启效果。连续打印10次后,进入while等待,直到喂狗计数器溢出,芯片重启,再次进行打印…
  int main()
  {
  //。..。..
  //看门狗测试 1s后超时
  watchdog_init(1000);
  while(1)
  {
  //测试看门狗
  count++;
  my_printf(“The current testvalue is %dn”, count);
  if(count%10==0){
  //让程序超时不喂狗
  my_printf(“I will make a default to stop this process!! rn”);
  while(1)
  {
  //尝试喂狗
  //feed_dog_hal();
  }
  }
  }
  }
  如果在while等待中加入喂狗程序,可以发现打印10次之后,程序一直在while中等待,没有再次打印,如果在线仿真,可以发现仿真没有断开。完成测试。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分