講解下看門狗的定時(shí)中斷功能。既然提到了定時(shí)功能,那就需要先介紹下看門狗的時(shí)鐘系統(tǒng)。
看門狗定時(shí)器模塊使用兩個(gè)時(shí)鐘:PCLK和WDCLK。PCLK由系統(tǒng)時(shí)鐘生成,供APB 訪問(wèn)看門狗寄存器使用。WDCLK由看門狗時(shí)鐘振蕩器中的wdt_clk生成,供看門狗定時(shí)器計(jì)數(shù)使用。wdt_clk時(shí)鐘可以從IRC和看門狗振蕩器中選擇一個(gè)作為時(shí)鐘源。
這兩個(gè)時(shí)鐘源之間存在一些同步邏輯。當(dāng)MOD和TC寄存器通過(guò)APB操作更新時(shí),新的值將由WDCLK時(shí)鐘設(shè)定并生效。當(dāng)看門狗定時(shí)器處于WDCLK時(shí)鐘周期時(shí),同步邏輯會(huì)先鎖定WDCLK上計(jì)數(shù)器的值,然后使其與PCLK同步,以作為TV寄存器的值供 CPU 讀取。
2、看門狗中斷
首先介紹下看門狗警告中斷比較值寄存器(WDWARNINT寄存器),它決定產(chǎn)生看門狗警告中斷的看門狗定時(shí)器值。當(dāng)計(jì)數(shù)器的低10位與WARNINT的10位具有相同值,且計(jì)數(shù)器其余高位均為0時(shí),便觸發(fā)看門狗警告中斷。如例圖所示,設(shè)置看門狗中斷比較值寄存器的定時(shí)值位0x3FF,當(dāng)看門狗計(jì)數(shù)器到03FF時(shí),看門狗中斷觸發(fā)。

圖1 看門狗中斷
除了看門狗警告中斷之外,還有看門狗超時(shí)中斷。這個(gè)是通過(guò)看門狗模式寄存器的WDRESET位置1,來(lái)選擇看門狗超時(shí)引發(fā)中斷。模式寄存器的WDTOF位就是看門狗超時(shí)標(biāo)志位。在看門狗超時(shí)、發(fā)生喂狗錯(cuò)誤或當(dāng) WDPROTECT=1 且嘗試向 WDTC 寄存器寫入時(shí),便會(huì)設(shè)置看門狗超時(shí)標(biāo)志。通過(guò)軟件向此位寫入 0 可將該標(biāo)志清零。 WDTOF 位置 1,都可以觸發(fā)中斷。在任何情況下,非看門狗超時(shí)引起的看門狗超時(shí)標(biāo)志置位都不會(huì)觸發(fā)系統(tǒng)復(fù)位。
3、看門狗中斷例程
接下來(lái)寫個(gè)小例程來(lái)測(cè)試下看門狗定時(shí)中斷功能的運(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è)置看門狗超時(shí)時(shí)間4秒
WDT-》WARNINT_b.WARNINT = 0x3FF;//警告中斷定時(shí)值設(shè)置為最大值,方便演示
NVIC_EnableIRQ(WDT_IRQn);//設(shè)置看門狗NVIC中斷
WDT_Enable_Timer;//啟動(dòng)看門狗
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)//超時(shí)中斷
{
WDT_Feed();
UART_PutString(UART0,“WDT Timeout Int.。?!保?
UART_ByteWrite(UART0,‘\n}
WDT_ClearIntFlag();//清除看門狗中斷
return;
}
例程首先對(duì)串口進(jìn)行初始化,然后串口輸出提示系統(tǒng)復(fù)位。隨后就是看門狗的初始化。將看門時(shí)間設(shè)置為4秒鐘,并且為中斷模式。并且使能看門狗中斷。在看門狗中斷服務(wù)程序中,根據(jù)觸發(fā)的中斷不同,輸出相應(yīng)的提示信息。
程序編譯無(wú)誤后,便可以下載仿真調(diào)試了。首先全速運(yùn)行,看下串口輸出的信息。根據(jù)輸出的信息我們發(fā)現(xiàn)只有看門狗警告中斷信息輸出,并沒(méi)有超時(shí)中斷信息。這是因?yàn)樵诰嬷袛喟l(fā)生后及時(shí)進(jìn)行了喂狗操作。所以看門狗并不會(huì)超時(shí)。

圖2 看門狗中斷實(shí)例1
接下來(lái)我們可以把看門狗警告中斷的喂狗函數(shù)WDT_Feed()屏蔽掉,然后再下載仿真看看效果。這時(shí)候我們就會(huì)看到看門狗超時(shí)中斷的信息輸出。因?yàn)榫嬷袛嗪鬀](méi)有及時(shí)喂狗操作,導(dǎo)致看門狗超時(shí)發(fā)生。

圖3 看門狗中斷實(shí)例2
責(zé)任編輯人:CC
-
看門狗
+關(guān)注
關(guān)注
10文章
611瀏覽量
73175 -
定時(shí)中斷
+關(guān)注
關(guān)注
0文章
19瀏覽量
8829
發(fā)布評(píng)論請(qǐng)先 登錄
STM32中的獨(dú)立看門狗和窗口看門狗是什么
STM32看門狗定時(shí)器的工作原理和作用 看門狗定時(shí)器的特性
看門狗定時(shí)器的設(shè)計(jì)、工作原理及看門狗定時(shí)器的操作
看門狗喂狗時(shí)間及程序
看門狗定時(shí)器的作用
STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG)
基于VxWorks的看門狗定高效定時(shí)機(jī)制設(shè)計(jì)實(shí)現(xiàn)
軟件看門狗和硬件看門狗的作用和區(qū)別
看門狗定時(shí)器的相關(guān)問(wèn)題和實(shí)驗(yàn)說(shuō)明
arduino看門狗
arduino看門狗的使用
STM32中的獨(dú)立看門狗和窗口看門狗
STM32中的獨(dú)立看門狗和窗口看門狗
MCU如何集成看門狗的功能
什么是看門狗,工業(yè)路由器看門狗技術(shù)的功能優(yōu)勢(shì)
看門狗定時(shí)中斷功能的運(yùn)行情況分析
評(píng)論