欢迎光临散文网 会员登陆 & 注册

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

2023-08-24 18:35 作者:大饼酱人  | 我要投稿


看门狗

可以在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);

    }


关于CC2652的看门狗和系统时钟的评论 (共 条)

分享到微博请遵守国家法律