關(guān)于CC2652的看門狗和系統(tǒng)時鐘
看門狗
可以在CCS的.syscfg的ui中配置,如下圖

如果想看相關(guān)例程,可以點(diǎn)擊上圖最頂部watchdog旁邊的問號。
相關(guān)問題:
例程中沒有添加hw_wdt的頭文件,需要#include <ti/devices/cc13x2_cc26x2/inc/hw_wdt.h>,否則在獲取當(dāng)前DWT計數(shù)值的時候顯示沒有WDT_O_VALUE這個定義;
在配置為Watchdog_RESET_OFF的時候,Watchdog_clear沒有用;
單步仿真的時候Watchdog_clear了,WDT的計數(shù)器還是在累減,全速仿真的時候就clear成功了;
Watchdog_close后還會進(jìn)入中斷;
如果不指定看門狗回調(diào)函數(shù),會自動復(fù)位;
相關(guān)參考在/ti/simplelink_cc13x2_26x2_sdk_5_20_00_52/docs/drivers/doxygen/html/_watchdog_8h.html;
看門狗一旦打開,無法關(guān)閉;
注意縮寫DWT和WDT的區(qū)別;
代碼:
? ? // 看門狗配置,非異常復(fù)位用
? ? Watchdog_Params params;
? ? Watchdog_init();
? ? Watchdog_Params_init(¶ms);
? ? params.resetMode = Watchdog_RESET_ON; //Watchdog_RESET_ON會溢出復(fù)位
? ? 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);//關(guān)閉測試 無法關(guān)閉
? ? 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);
系統(tǒng)時鐘
SysTick 計數(shù)器在系統(tǒng)時鐘上運(yùn)行。如果此時鐘信號在低功耗模式下停止,則 SysTick 計數(shù)器將停止;
當(dāng)處理器停止進(jìn)行調(diào)試時,計數(shù)器不會遞減;
沒有提供立即重載當(dāng)前計數(shù)值的函數(shù),需要自己控制,即強(qiáng)制寫入NVIC_ST_CURRENT;
在48M情況下,30ns系統(tǒng)時鐘自加一個單位
代碼:
? ? SysTickEnable(); //SysTick測試
? ? SysTickIntEnable();
? ? SysTickPeriodSet(0);
? ? while(1)
? ? {
? ? ? ? wdt_val = SysTickValueGet();
? ? ? ? nsdelay(800000); //30ns一個值
? ? ? ? HWREG(NVIC_ST_CURRENT) = 0;//強(qiáng)制重載測試
? ? ? ? nsdelay(800000);
? ? }
