講解下看門狗的定時中斷功能。既然提到了定時功能,那就需要先介紹下看門狗的時鐘系統(tǒng)。
看門狗定時器模塊使用兩個時鐘:PCLK和WDCLK。PCLK由系統(tǒng)時鐘生成,供APB 訪問看門狗寄存器使用。WDCLK由看門狗時鐘振蕩器中的wdt_clk生成,供看門狗定時器計數(shù)使用。wdt_clk時鐘可以從IRC和看門狗振蕩器中選擇一個作為時鐘源。
這兩個時鐘源之間存在一些同步邏輯。當(dāng)MOD和TC寄存器通過APB操作更新時,新的值將由WDCLK時鐘設(shè)定并生效。當(dāng)看門狗定時器處于WDCLK時鐘周期時,同步邏輯會先鎖定WDCLK上計數(shù)器的值,然后使其與PCLK同步,以作為TV寄存器的值供 CPU 讀取。
2、看門狗中斷
首先介紹下看門狗警告中斷比較值寄存器(WDWARNINT寄存器),它決定產(chǎn)生看門狗警告中斷的看門狗定時器值。當(dāng)計數(shù)器的低10位與WARNINT的10位具有相同值,且計數(shù)器其余高位均為0時,便觸發(fā)看門狗警告中斷。如例圖所示,設(shè)置看門狗中斷比較值寄存器的定時值位0x3FF,當(dāng)看門狗計數(shù)器到03FF時,看門狗中斷觸發(fā)。
圖1 看門狗中斷
除了看門狗警告中斷之外,還有看門狗超時中斷。這個是通過看門狗模式寄存器的WDRESET位置1,來選擇看門狗超時引發(fā)中斷。模式寄存器的WDTOF位就是看門狗超時標(biāo)志位。在看門狗超時、發(fā)生喂狗錯誤或當(dāng) WDPROTECT=1 且嘗試向 WDTC 寄存器寫入時,便會設(shè)置看門狗超時標(biāo)志。通過軟件向此位寫入 0 可將該標(biāo)志清零。 WDTOF 位置 1,都可以觸發(fā)中斷。在任何情況下,非看門狗超時引起的看門狗超時標(biāo)志置位都不會觸發(fā)系統(tǒng)復(fù)位。
3、看門狗中斷例程
接下來寫個小例程來測試下看門狗定時中斷功能的運(yùn)行情況,程序源碼如下。
int main(void)
{
//初始化串口
PA_2_INIT(PA_2_TX0);
UART_Open(UART0,9600,UART_NO_PARITY,0);
UART_PutString(UART0,“System Reset.。。”);//Send System Inital String
WDT_Init ();//看門狗初始化
WDT_SetIntervalinMiliSec(4000);//設(shè)置看門狗超時時間4秒
WDT-》WARNINT_b.WARNINT = 0x3FF;//警告中斷定時值設(shè)置為最大值,方便演示
NVIC_EnableIRQ(WDT_IRQn);//設(shè)置看門狗NVIC中斷
WDT_Enable_Timer;//啟動看門狗
WDT_Feed();//喂狗
while(1);
}
void WDT_IRQHandler(void)//看門狗中斷服務(wù)子程序
{
if(WDT-》MOD_b.WDINT == 1)//警告中斷
{
WDT_Feed();
UART_PutString(UART0,“WDT Warning Int.。。”);
UART_ByteWrite(UART0,‘\n’);
}
if(WDT-》MOD_b.WDTOF == 1)//超時中斷
{
WDT_Feed();
UART_PutString(UART0,“WDT Timeout Int.。。”);
UART_ByteWrite(UART0,‘\n}
WDT_ClearIntFlag();//清除看門狗中斷
return;
}
例程首先對串口進(jìn)行初始化,然后串口輸出提示系統(tǒng)復(fù)位。隨后就是看門狗的初始化。將看門時間設(shè)置為4秒鐘,并且為中斷模式。并且使能看門狗中斷。在看門狗中斷服務(wù)程序中,根據(jù)觸發(fā)的中斷不同,輸出相應(yīng)的提示信息。
程序編譯無誤后,便可以下載仿真調(diào)試了。首先全速運(yùn)行,看下串口輸出的信息。根據(jù)輸出的信息我們發(fā)現(xiàn)只有看門狗警告中斷信息輸出,并沒有超時中斷信息。這是因為在警告中斷發(fā)生后及時進(jìn)行了喂狗操作。所以看門狗并不會超時。
圖2 看門狗中斷實例1
接下來我們可以把看門狗警告中斷的喂狗函數(shù)WDT_Feed()屏蔽掉,然后再下載仿真看看效果。這時候我們就會看到看門狗超時中斷的信息輸出。因為警告中斷后沒有及時喂狗操作,導(dǎo)致看門狗超時發(fā)生。
圖3 看門狗中斷實例2
責(zé)任編輯人:CC
-
看門狗
+關(guān)注
關(guān)注
10文章
583瀏覽量
71825 -
定時中斷
+關(guān)注
關(guān)注
0文章
19瀏覽量
8707
發(fā)布評論請先 登錄
STM32中的獨(dú)立看門狗和窗口看門狗是什么

什么是看門狗?
看門狗定時器的設(shè)計、工作原理及看門狗定時器的操作

看門狗喂狗時間及程序
看門狗定時器的作用
STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG)

基于VxWorks的看門狗定高效定時機(jī)制設(shè)計實現(xiàn)

軟件看門狗和硬件看門狗的作用和區(qū)別
看門狗定時器的相關(guān)問題和實驗說明

arduino看門狗

arduino看門狗的使用

STM32中的獨(dú)立看門狗和窗口看門狗
STM32中的獨(dú)立看門狗和窗口看門狗

MCU如何集成看門狗的功能

什么是看門狗,工業(yè)路由器看門狗技術(shù)的功能優(yōu)勢

評論