久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開發(fā)工具包  2.20
WDT

WDT(看門狗,WatchDog Timer)是一個APB從外設(shè),可以用來防止由于SiFli芯片中的部件或程序沖突而導(dǎo)致的系統(tǒng)死機。 HCPU 和 LCPU 都有專用的WatchDog定時器。它可以生成中斷作為不可屏蔽中斷 (NMI) 或為子系統(tǒng)復(fù)位。WatchDog可以以獨立復(fù)位 LCPU 或 HCPU 子系統(tǒng)。芯片還提供一個系統(tǒng)級別的Watchdog(IWDT),可以復(fù)位整個芯片。

1.1 計數(shù)器
WatchDog有 2 個計數(shù)(count1 和 count2),從預(yù)設(shè)的超時值降序到零。計數(shù)器基于 32K 時鐘,每 1/32768 秒減一。 1。當計數(shù)器 count1 達到零時,根據(jù)選擇的輸出響應(yīng)模式,系統(tǒng)復(fù)位或中斷發(fā)生。用戶可以重新啟動計數(shù)器到其初始值,或停止它。重新啟動看門狗計數(shù)器的過程有時被稱為喂狗(Pet Watchdog)。

1.2 中斷
可以對WatchDog進行編程,使watchdog在count1 超時時產(chǎn)生中斷, 同時count2開始計數(shù)。如果中斷不被清理,在count2 超時的時候系統(tǒng)復(fù)位;如果它在第二次超時(count2 達到 0)之前清除中斷,count1被復(fù)位,同時count2復(fù)位,重新開始計數(shù)。

Note
IWDT不會產(chǎn)生中斷,直接復(fù)位芯片

1.3 系統(tǒng)復(fù)位
WatchDog也可以被編程為直接產(chǎn)生系統(tǒng)復(fù)位。 HCPU 或 LCPU 子系統(tǒng)在計數(shù)器count1減為 0后復(fù)位。

Note
SF32LB55X 有三個WDT, HCPU WDT1, LCPU WDT2以及一個系統(tǒng)IWDT. 其中WDT1/2提供中斷功能,觸發(fā)時只能reset HCPU/LCPU子系統(tǒng)。 IWDT不能提供中斷功能,不過觸發(fā)時可以reset整個芯片。55X的WDT時鐘可以在RC10K/32K LXT中選擇。 SF32LB56X/58X WDT1/WDT2 增加了功能,可以觸發(fā)reset 整個芯片,SF32LB56X/58X的時鐘來源于RC10K,不再從32K低功耗時鐘獲取。

使用WDT

以下代碼將啟動WatchDog定時器而不產(chǎn)生中斷。

// Initialize Watchdog timer.
{
WdtHandle.Init.Reload = (uint32_t)g_tmout * 32768 ; // Counter is based on 32K clock, g_tmout is in seconds
HAL_WDT_Init(&WdtHandle); // Initialize the counter
__HAL_WDT_INT(&WdtHandle, 0); // Set to reset only, do not generate interrupt
}
__HAL_WDT_START(&WdtHandle); // Start watchdog timer.
...
HAL_WDT_Refresh(&WdtHandle); // Kick watchdog
HAL_Delay(g_tmout+1); // If do not kick watchdog befre g_tmout, reset will happen.
HAL_WDT_Refresh(&WdtHandle); // This will not reach, as watchdog reset system.
...
__HAL_WDT_STOP(&WdtHandle); // Stop watchdog timer.

以下代碼將啟動WatchDog定時器并在第一個計數(shù)器達到 0 后產(chǎn)生中斷。

// Watchdog interrupt, It is a non-maskable interrupt
void WDT_IRQHandler(void)
{
__HAL_WDT_CLEAR(&WdtHandle); //cLear interrupt will reset timer 1.
}
// Initialize Watchdog timer.
{
WdtHandle.Init.Reload = (uint32_t)g_tmout1 * 32768 ; // Counter 1, counter is based on 32K clock, g_tmout1 is in seconds.
WdtHandle.Init.Reload2 = (uint32_t)g_tmout2 * 32768; // Counter 2, counter is based on 32K clock, g_tmout2 is in seconds.
HAL_WDT_Init(&WdtHandle); // Initialize the counter
__HAL_WDT_INT(&WdtHandle, 1); // Generate interrupt when g_tmout1 times out before you kick interrupt
}
__HAL_WDT_START(&WdtHandle); // Start watchdog timer.
...
HAL_WDT_Refresh(&WdtHandle); // If kick before g_tmout1, it will NOT generate interrupt
HAL_Delay(g_tmout1+g_tmout2+1); // If kick after g_tmout1, interrupt will generate.
HAL_WDT_Refresh(&WdtHandle); // This could reach if you kick watchdog in interrupt.
...
__HAL_WDT_STOP(&WdtHandle); // Stop watchdog timer.
WDT_HandleTypeDef
WDT Handle Structure definition.
Definition: bf0_hal_wdt.h:94
WDT_InitTypeDef::Reload
uint32_t Reload
Definition: bf0_hal_wdt.h:83
HAL_WDT_Init
HAL_StatusTypeDef HAL_WDT_Init(WDT_HandleTypeDef *wdt)
Initialize Watchdog timer.
WDT_InitTypeDef::Reload2
uint32_t Reload2
Definition: bf0_hal_wdt.h:85
__HAL_WDT_INT
#define __HAL_WDT_INT(__HANDLE__, INT)
WDT generate interrupt or reset only.
Definition: bf0_hal_wdt.h:170
__HAL_WDT_CLEAR
#define __HAL_WDT_CLEAR(__HANDLE__)
Clear interrupt.
Definition: bf0_hal_wdt.h:162
__HAL_WDT_START
#define __HAL_WDT_START(__HANDLE__)
Start the WDT count down.
Definition: bf0_hal_wdt.h:132
WDT_HandleTypeDef::Init
WDT_InitTypeDef Init
Definition: bf0_hal_wdt.h:97
HAL_WDT_Refresh
HAL_StatusTypeDef HAL_WDT_Refresh(WDT_HandleTypeDef *wdt)
Kick Watchdog timer.
HAL_Delay
void HAL_Delay(uint32_t Delay)
This function provides minimum delay (in milliseconds) based on variable incremented.