0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

看門狗定時中斷功能的運行情況分析

h1654155282.3538 ? 來源:老馬識途單片機 ? 作者:老馬識途單片機 ? 2021-05-01 16:08 ? 次閱讀

1、看門狗時鐘

講解下看門狗的定時中斷功能。既然提到了定時功能,那就需要先介紹下看門狗的時鐘系統(tǒng)。

看門狗定時器模塊使用兩個時鐘:PCLK和WDCLK。PCLK由系統(tǒng)時鐘生成,供APB 訪問看門狗寄存器使用。WDCLK由看門狗時鐘振蕩器中的wdt_clk生成,供看門狗定時器計數(shù)使用。wdt_clk時鐘可以從IRC和看門狗振蕩器中選擇一個作為時鐘源。

這兩個時鐘源之間存在一些同步邏輯。當MOD和TC寄存器通過APB操作更新時,新的值將由WDCLK時鐘設定并生效。當看門狗定時器處于WDCLK時鐘周期時,同步邏輯會先鎖定WDCLK上計數(shù)器的值,然后使其與PCLK同步,以作為TV寄存器的值供 CPU 讀取。

2、看門狗中斷

首先介紹下看門狗警告中斷比較值寄存器(WDWARNINT寄存器),它決定產(chǎn)生看門狗警告中斷的看門狗定時器值。當計數(shù)器的低10位與WARNINT的10位具有相同值,且計數(shù)器其余高位均為0時,便觸發(fā)看門狗警告中斷。如例圖所示,設置看門狗中斷比較值寄存器的定時值位0x3FF,當看門狗計數(shù)器到03FF時,看門狗中斷觸發(fā)。

o4YBAGB5RkSADT-pAACp82p43B4151.png

圖1 看門狗中斷

除了看門狗警告中斷之外,還有看門狗超時中斷。這個是通過看門狗模式寄存器的WDRESET位置1,來選擇看門狗超時引發(fā)中斷。模式寄存器的WDTOF位就是看門狗超時標志位。在看門狗超時、發(fā)生喂狗錯誤或當 WDPROTECT=1 且嘗試向 WDTC 寄存器寫入時,便會設置看門狗超時標志。通過軟件向此位寫入 0 可將該標志清零。 WDTOF 位置 1,都可以觸發(fā)中斷。在任何情況下,非看門狗超時引起的看門狗超時標志置位都不會觸發(fā)系統(tǒng)復位。

3、看門狗中斷例程

接下來寫個小例程來測試下看門狗定時中斷功能的運行情況,程序源碼如下。

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);//設置看門狗超時時間4秒

WDT-》WARNINT_b.WARNINT = 0x3FF;//警告中斷定時值設置為最大值,方便演示

NVIC_EnableIRQ(WDT_IRQn);//設置看門狗NVIC中斷

WDT_Enable_Timer;//啟動看門狗

WDT_Feed();//喂狗

while(1);

}

void WDT_IRQHandler(void)//看門狗中斷服務子程序

{

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;

}

例程首先對串口進行初始化,然后串口輸出提示系統(tǒng)復位。隨后就是看門狗的初始化。將看門時間設置為4秒鐘,并且為中斷模式。并且使能看門狗中斷。在看門狗中斷服務程序中,根據(jù)觸發(fā)的中斷不同,輸出相應的提示信息。

程序編譯無誤后,便可以下載仿真調(diào)試了。首先全速運行,看下串口輸出的信息。根據(jù)輸出的信息我們發(fā)現(xiàn)只有看門狗警告中斷信息輸出,并沒有超時中斷信息。這是因為在警告中斷發(fā)生后及時進行了喂狗操作。所以看門狗并不會超時。

pIYBAGB5RkyAfiD_AABOlQ0FzjI048.png

圖2 看門狗中斷實例1

接下來我們可以把看門狗警告中斷的喂狗函數(shù)WDT_Feed()屏蔽掉,然后再下載仿真看看效果。這時候我們就會看到看門狗超時中斷的信息輸出。因為警告中斷后沒有及時喂狗操作,導致看門狗超時發(fā)生。

pIYBAGB5RlKAQ4RoAABeOt6_SXM488.png

圖3 看門狗中斷實例2
責任編輯人:CC

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 看門狗
    +關注

    關注

    10

    文章

    558

    瀏覽量

    70707
  • 定時中斷
    +關注

    關注

    0

    文章

    19

    瀏覽量

    8541
收藏 人收藏

    評論

    相關推薦

    STM32中的獨立看門狗和窗口看門狗是什么

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗功能。但是
    的頭像 發(fā)表于 02-20 17:47 ?2639次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>是什么

    STM32看門狗定時器的工作原理和作用 看門狗定時器的特性

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般來說都是向下計數(shù)的,給看門狗一個數(shù)字,程序開始運行
    的頭像 發(fā)表于 07-27 16:30 ?5769次閱讀
    STM32<b class='flag-5'>看門狗</b><b class='flag-5'>定時</b>器的工作原理和作用 <b class='flag-5'>看門狗</b><b class='flag-5'>定時</b>器的特性

    看門狗定時器的設計、工作原理及看門狗定時器的操作

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般給看門狗一個數(shù)字,程序開始運行看門狗
    發(fā)表于 05-23 09:14 ?7612次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時</b>器的設計、工作原理及<b class='flag-5'>看門狗</b><b class='flag-5'>定時</b>器的操作

    看門狗喂狗時間及程序

    什么是看門狗定時看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般給看門狗一個數(shù)字
    發(fā)表于 10-16 09:19 ?1.7w次閱讀

    看門狗定時器的作用

    看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般給看門狗一個數(shù)字,程序開始運行看門狗
    發(fā)表于 10-20 14:41 ?6659次閱讀

    STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當計數(shù)器達到給定的超時值時,觸發(fā)一個
    發(fā)表于 11-09 17:17 ?8386次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

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

    VxWorks提供了一個看門狗定時器(watchDog timer),它由以下四個函數(shù)維護: wdCreate( ) 創(chuàng)建并初始化一個看門狗定時器;wdDelete( ) 終止并
    發(fā)表于 03-06 09:22 ?4736次閱讀
    基于VxWorks的<b class='flag-5'>看門狗</b>定高效<b class='flag-5'>定時</b>機制設計實現(xiàn)

    軟件看門狗和硬件看門狗的作用和區(qū)別

    ?! 」ぷ髟恚涸谙到y(tǒng)運行以后也就啟動了看門狗的計數(shù)器,看門狗就開始自動計數(shù),如果到了一定的時間還不去清看門狗,那么看門狗計數(shù)器就會溢出從而
    的頭像 發(fā)表于 10-15 17:29 ?3.9w次閱讀

    看門狗定時器的相關問題和實驗說明

    進入中斷。在定時中斷中執(zhí)行一些復位操作,使系統(tǒng)恢復正常的工作狀態(tài),即在程序沒有正常運行期間,如期復位看門狗以保證所選擇
    的頭像 發(fā)表于 10-06 12:59 ?4457次閱讀
    <b class='flag-5'>看門狗</b><b class='flag-5'>定時</b>器的相關問題和實驗說明

    arduino看門狗

    簡介??看門狗定時器是單片機的一個組成部分,在單片機程序的調(diào)試和運行中都有著重要的意義。看門狗定時器(WDT,Watch Dog Timer
    發(fā)表于 11-15 19:06 ?18次下載
    arduino<b class='flag-5'>看門狗</b>

    arduino看門狗的使用

    簡介??看門狗定時器是單片機的一個組成部分,在單片機程序的調(diào)試和運行中都有著重要的意義。??看門狗定時器(WDT,Watch Dog Tim
    發(fā)表于 12-09 09:36 ?7次下載
    arduino<b class='flag-5'>看門狗</b>的使用

    STM32中的獨立看門狗和窗口看門狗

    一、前言 在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗功能
    的頭像 發(fā)表于 12-22 16:58 ?2031次閱讀

    STM32中的獨立看門狗和窗口看門狗

    在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗功能。但是
    的頭像 發(fā)表于 01-30 14:38 ?1309次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>

    MCU如何集成看門狗功能

    一、前言 在早期的MCU中是沒有看門狗這種東西的,所以產(chǎn)品就很容易出現(xiàn)死機,跑飛的情況。為了避免這種情況的出現(xiàn),后期的MCU都集成了看門狗功能
    的頭像 發(fā)表于 06-22 09:09 ?1652次閱讀
    MCU如何集成<b class='flag-5'>看門狗</b>的<b class='flag-5'>功能</b>

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

    工業(yè)路由器大多都會配備看門狗技術,它是保證工業(yè)路由器傳輸過程中連續(xù)24小時不宕機的重要保護技術,那么,什么是看門狗呢?▍看門狗功能看門狗,又叫watchdog,從本質(zhì)上來說就是一個
    的頭像 發(fā)表于 03-27 10:16 ?1742次閱讀
    什么是<b class='flag-5'>看門狗</b>,工業(yè)路由器<b class='flag-5'>看門狗</b>技術的<b class='flag-5'>功能</b>優(yōu)勢