看门狗
可以在CCS的syscfg的ui中配置,如下图
如果想看相关例程,可以电极最顶部watchdog旁边的问号
相关问题:
- 例程中没有添加hw_wdt的头文件,需要#include <ti/devices/cc13x2_cc26x2/inc/hw_wdt.h>,否则在获取当前DWT计数值的时候显示没有WDT_O_VALUE这个定义;
- 在配置为Watchdog_RESET_OFF的时候,Watchdog_clear没有用;
- 单步仿真的时候Watchdog_clear了,WDT的计数器还是在累减,全速仿真的时候就clear成功了;
- Watchdog_close后还会进入中断;
- 如果不指定看门狗回调函数,会自动复位;
- 相关参考在/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52/docs/drivers/doxygen/html/_watchdog_8h.html
- 看门狗一旦打开,无法关闭
- 注意缩写DWT和WDT的区别
代码:
// 看门狗配置,非异常复位用
Watchdog_Params params;
Watchdog_init();
Watchdog_Params_init(¶ms);
params.resetMode = Watchdog_RESET_ON; //Watchdog_RESET_ON会溢出复位
params.callbackFxn = (Watchdog_Callback) DOGCallbackFxn;
watchdogHandle = Watchdog_open(CONFIG_WATCHDOG_0, ¶ms);
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, ¶ms);//打开测试
CPUdelay(1000);
wdt_val = HWREG(wdt_reg_value);
系统时钟
- SysTick 计数器在系统时钟上运行。如果此时钟信号在低功耗模式下停止,则 SysTick 计数器将停止;
- 当处理器停止进行调试时,计数器不会递减;
- 没有提供立即重载当前计数值的函数,需要自己控制,即强制写入NVIC_ST_CURRENT;
- 在48M情况下,30ns系统时钟自加一个单位
代码:
SysTickEnable(); //SysTick测试
SysTickIntEnable();
SysTickPeriodSet(0);
while(1)
{
wdt_val = SysTickValueGet();
nsdelay(800000); //30ns一个值
HWREG(NVIC_ST_CURRENT) = 0;//强制重载测试
nsdelay(800000);
}