关于CC2652的看门狗和系统时钟的问题

看门狗

可以在CCS的syscfg的ui中配置,如下图

 如果想看相关例程,可以电极最顶部watchdog旁边的问号

相关问题:

  1. 例程中没有添加hw_wdt的头文件,需要#include <ti/devices/cc13x2_cc26x2/inc/hw_wdt.h>,否则在获取当前DWT计数值的时候显示没有WDT_O_VALUE这个定义;
  2. 在配置为Watchdog_RESET_OFF的时候,Watchdog_clear没有用;
  3. 单步仿真的时候Watchdog_clear了,WDT的计数器还是在累减,全速仿真的时候就clear成功了;
  4. Watchdog_close后还会进入中断;
  5. 如果不指定看门狗回调函数,会自动复位;
  6. 相关参考在/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52/docs/drivers/doxygen/html/_watchdog_8h.html
  7. 看门狗一旦打开,无法关闭
  8. 注意缩写DWT和WDT的区别

代码:

    // 看门狗配置,非异常复位用
    Watchdog_Params params;
    Watchdog_init();
    Watchdog_Params_init(&params);
    params.resetMode = Watchdog_RESET_ON; //Watchdog_RESET_ON会溢出复位
    params.callbackFxn = (Watchdog_Callback) DOGCallbackFxn;
    watchdogHandle = Watchdog_open(CONFIG_WATCHDOG_0, &params);
    if (watchdogHandle == NULL) {
       // Error opening Watchdog
       while (1);
    }

     // 看门狗测试程序
    uint32_t wdt_reg_value = WDT_BASE + WDT_O_VALUE;

    CPUdelay(800000);//基本功能测试
    wdt_val = HWREG(wdt_reg_value);
    Watchdog_clear(watchdogHandle);//清除测试 Watchdog_RESET_ON时可以
    wdt_val = HWREG(wdt_reg_value);
    CPUdelay(1000);
    wdt_val = HWREG(wdt_reg_value);
    Watchdog_close(watchdogHandle);//关闭测试 无法关闭
    wdt_val = HWREG(wdt_reg_value);
    CPUdelay(1000);
    wdt_val = HWREG(wdt_reg_value);
    Watchdog_open(CONFIG_WATCHDOG_0, &params);//打开测试
    CPUdelay(1000);
    wdt_val = HWREG(wdt_reg_value);

系统时钟

  1. SysTick 计数器在系统时钟上运行。如果此时钟信号在低功耗模式下停止,则 SysTick 计数器将停止;
  2. 当处理器停止进行调试时,计数器不会递减;
  3. 没有提供立即重载当前计数值的函数,需要自己控制,即强制写入NVIC_ST_CURRENT;
  4. 在48M情况下,30ns系统时钟自加一个单位

代码:

    SysTickEnable(); //SysTick测试
    SysTickIntEnable();
    SysTickPeriodSet(0);
    while(1)
    {
        wdt_val = SysTickValueGet();
        nsdelay(800000); //30ns一个值
        HWREG(NVIC_ST_CURRENT) = 0;//强制重载测试
        nsdelay(800000);
    }

猜你喜欢

转载自blog.csdn.net/Fei_Yang_YF/article/details/132479886