1. 程式人生 > >嵌入式開發第47天(看門狗定時器的原理)

嵌入式開發第47天(看門狗定時器的原理)

看門狗定時器有兩個作用:

1、看門狗復位

可以設定看門狗定時器的計數值,計數值在看門狗的工作頻率下不斷的減1,當計數值減到0,看門狗就會產生一個復位訊號,造成了整個系統的復位。

例如:

看門狗的工作頻率設定成1000Hz,看門狗的計數值設定成10000;這樣計數值每1ms減一次1,當10秒後計數值減到0。系統就會產生復位訊號,系統重啟。

系統正常工作的時候,我們應該10秒鐘內(計數值減到0之前)重新給計數值賦一個初始值,防止系統重啟,這個過程叫“喂狗”。

當系統執行出錯,程式“跑飛”的時候,“喂狗”程式也停止工作,這樣會出現10s之內不能喂狗,系統就會重啟,讓系統重新開始工作,恢復到正常工作狀態。

簡述:當系統受到干擾而產生宕機(後者程式跑飛)的時候,看門狗可以讓系統重啟,重新開始工作。

2、普通的定時器(51微控制器的定時器)

普通的定時器主要是用來計時。會產生週期性的中斷,我們可以設定定時器的週期。

例:

我們可以設定定時器的工作頻率1000HZ,定時器的計數值設定成1000;這樣當開啟定時器中斷,並開啟定時器後,計數值就每1ms減一次1,當計數值減到0,就會生成一箇中斷,會執行一箇中斷服務程式,在中斷服務程式中開始計時。計數值會自動的恢復到1000,開始下一個週期,周而復始.....

=========================================================

一、看門狗的框圖

 

分頻有什麼用?

上章講到時鐘源的由來,他是由晶片外的晶振產生時鐘源

,通過倍頻器,使得24mhz頻率提高到1000MHZ,然後通過分頻,分到的看門狗的 PCLK_PSYS=66MHZ.

然後經過看門狗的分頻器二次分頻 得到一個基準頻率。

這個所謂的基準頻率,指的就是看門狗的基準週期,也就是現實生活中的一秒等於頻率的多少mhz

這裡得到的 2022就代表著 生成2022頻率的時間代表1秒。

WTCON =(0xfe<<8);// 設定第一次分頻值255

WTCON |=(0x3<<3); //設定第二次分頻值128 , 66000000/(254+1)/128 = 2022

程式設計

1、看門狗的復位功能

我們設定看門狗的復位時間10s,觀察10s內沒有喂狗,系統復位......

//看門狗

#define WTCON (*(volatile unsigned int *)0xE2700000)

#define WTDAT (*(volatile unsigned int *)0xE2700004)

#define WTCNT (*(volatile unsigned int *)0xE2700008)

#define WTCLRINT (*(volatile unsigned int *)0xE270000C)

1)看門狗的初始化

WTCON =(0xfe<<8);// 設定第一次分頻值255

WTCON |=(0x3<<3); //設定第二次分頻值128 , 66000000/(254+1)/128 = 2022

WTCON &=~(1<<2); //設定看門狗中斷 關

WTCON |=(1<<0); //設定復位開關 開

WTCNT  =20220;//設定時間量,20220 代表10s ,10秒內若不喂狗。就會產生復位

WTDAT  =20220;  //復位時間10s.

2)開啟看門狗

WTCON |=(1<<5); //設定看門狗使能位

3)喂狗

WTCNT=WTDAT;  //喂狗

看門狗的復位時間一般都是秒級的。

--------------------------------------------------------------------------------

2、普通定時器功能

設定看門狗定時器的週期是10ms,利用看門狗定時器進行計時,使LED1400ms翻轉一次。

1)中斷控制器的初始化

int_init();

2)看門狗中斷的初始化

 intc_setvectaddr(NUM_WDT, isr_wdt);  //看門狗中斷的安裝

3)看門狗定時器的初始化

void wdt_init(void)

{

WTCON =(0xfe<<8);// 設定第一次分頻值255

WTCON |=(0x3<<3); //設定第二次分頻值128 , 66000000/(254+1)/128 = 2022

WTCON |=(1<<2); //設定看門狗中斷 開

WTCON &=~(1<<0); //設定復位開關 關

WTCNT  =20;

WTDAT  =20;  //定時週期10ms.

}

4)開啟看門狗中斷

intc_enable(NUM_WDT);

5)啟動看門狗

WTCON |=(1<<5); //設定看門狗使能位

當定時週期到了的時候,會執行中斷服務程式:

void isr_wdt(void)

{

sum++; //10mssum=sum+1

if(sum==40) //400ms

{

GPJ2DAT ^= (0x1<<0); //翻轉LED1

sum=0; //0,準備下一次400ms的計數

}

WTCLRINT=1; //清看門狗的中斷

intc_clearvectaddr(); //清中斷控制器的中斷

}

相關推薦

嵌入式開發47看門定時原理

看門狗定時器有兩個作用: 1、看門狗復位 可以設定看門狗定時器的計數值,計數值在看門狗的工作頻率下不斷的減1,當計數值減到0,看門狗就會產生一個復位訊號,造成了整個系統的復位。 例如: 看門狗的工作頻

嵌入式開發42ARM的體系結構

一、ARM的工作狀態 CPU執行的是彙編編譯後的機器碼。ARM處理器支援兩套匯編指令,一套是ARM彙編指令,另外一套THUMB彙編指令。 ARM彙編 ----> 32bits(預設) THUMB

嵌入式開發9結構體,列舉,共同體,typedef

複合資料型別自定義型別,由基本的型別構成 結構體 結構體型別定義struct 名字{基本的型別; }; 結構體的大小是怎麼算出來的? struct student_info{char name[19

s3c6410硬體WATCHDOG TIMER看門定時

  先簡述看門狗的工作過程,看門狗實際是一個定時器,內部有個計數器,每當時鐘訊號到來時,計數器暫存器減一。如果減到0,則重新啟動系統;如果在減到0之前,系統又設定計數器為一個較大的值,則系統不會重啟。系統正常時,就不會重啟;當系統發生故障時,不能設定計數暫存器,系統重新啟

走入計算機的關於操作系統的內容

swap kill 將他 正在 錯誤 ide 默認 監控系統 空間 1 監控系統的一些命令 top:是linux中常用的性能分析工具,用來查看系統中各個資源的占用空間的數據。 第一行是任務信息,從中到右分別是(當前時間),(系統運行時間,以時:分的格式),

MySQL增量備份和增量恢復

sfdsday05一、數據備份與恢復-增量備份和增量恢復a.binlog日誌介紹(二進制文件):使用Mysql數據庫服務日誌文件類型的一種。記錄除查詢之外的sql命令。默認沒啟用 查詢的sql包括:select desc show 不是查詢的命令:insert update delete create dr

LinuxCentOS 學習22018年6.5日

putty1、使用putty軟件遠程Linux系統,百度搜索下載putty軟件,https://www.putty.org/ 官方網站下載,紅色的64位版本,這個軟件是一個綠色版本,下載解壓後,直接打開Putty.exe文件出現以下畫面,遠程服務器的名字,端口是22,保存為一個遠程的設備名字,最後點擊保存,其

02_Java基礎_2變量、運算符_講義

long static 單元 前置 否則 fin demo 計算 位與 今日內容介紹 1、變量 2、運算符 01變量概述 * A: 什麽是變量? * a: 變量是一個內存中的小盒子(小容器),容器是什麽?生活中也有很多容器, * 例如水杯是容器,用來裝載

11_Java面向對象_11接口、多態_講義

類型判斷 call 參考 特殊 接口實現類 彌補 ace exc class 今日內容介紹 1、接口 2、多態 01接口的概念 * A:接口的概念 接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。 接口只描述所應該具備的方法,並沒

OpenGL學習——2還在環境搭建VS2017

學習來源:https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/ 還是老話吧,為了學過就忘,準備寫點東西,或者摘抄點東西。 目錄 建立視窗 GLFW OpennCV Cmake 建立視窗

接觸C#的9for&while迴圈語句

“最後一點就是堅持,有時候寫這些東西真的很痛苦,很讓人抓狂,但是你一旦你堅持下去,久而久之,你會看到自己的進步,某一天你回過頭去看自己以前寫的文章,當你能夠說出:“寫得真他媽菜”,那麼恭喜你,已經你升級了“。           &nb

接觸C#的今天沒有Python回鍋

“最後一點就是堅持,有時候寫這些東西真的很痛苦,很讓人抓狂,但是你一旦你堅持下去,久而久之,你會看到自己的進步,某一天你回過頭去看自己以前寫的文章,當你能夠說出:”寫得真他媽菜”,那麼恭喜你,你已經level up了。”         &nbs

2440裡面有個看門 定時Watch Dog Timer

我怕連結會失效,故轉載此篇文章。。。 情境: 我們編寫的程式程式碼是先點亮led1,然後延時一會,再點亮led2,進入死迴圈。但在開發板上的實際效果是led1先亮,延時一會,led2再亮,然後一會之後,led1再次亮了。 這和我們的設計的程式碼流程不吻合,這是因為2

Python學習變數、集合和字串

上一篇沒有儲存傷心 變數在賦值時即被建立===賦值會讓變數自動生成 變數在表示式中使用以前 必須被賦值 ———————————————————————————————————————————————— 集合 集合中的一個項無論新增多少次,只能出現一次 集合是無序的、唯一的、不

leetcode47binary-tree-level-order-traversal

題目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).  For example

Exynos4412裸機開發 —— 看門定時

一、看門狗定時器概述      看門狗(WatchDog Timer) 定時器和PWM的定時功能目的不一樣。它的特點是,需要不同的接收訊號(一些外接看門狗晶片)或重新設定計數器,保持計數值不為0。一旦一些時間接收不到訊號,或計數值為0,看門狗將發出復位訊號復位系統或產生

Linux裝置驅動字元裝置驅動、cdev

裝置號的分配 靜態分配: 動態分配: /** * 功能:動態申請裝置號 * dev:存放返回的裝置號的結構體 * firstminor:指定次裝置號 * count:連續編號範圍 * name:編號相關聯的裝置名稱. (/proc/devices)

STM32之獨立看門和視窗看門定時

STM32F10系列晶片內建了2個看門狗,提高了更高的安全性等好處。獨立看門狗(IWDG)是由專門的40KHz的低速時鐘驅動,即使主時鐘發生故障也仍然有效。 IWDG的主要特徵有自由執行的遞減計數器,時鐘由獨立的RC振盪器提供,看門狗被啟用後,則在計數器計數至0x000時產

2440中使用看門定時作為普通定時

好吧,看s3c2440的看門狗看了好長時間,因為看門一般很少使用,所以我就想讓看門狗作為一般的定時器來觸發中斷,簡單一點,就做一個LED燈的定時閃爍。看了好多資料,百度、資料手冊中英文版、學習板光碟資料。。。。。。確實是一個糾結的過程,但是最後懂了收穫到的也是滿滿的快樂。

msp430看門定時

  看門狗定時器用來防止程式因供電電源、空間電磁干擾或其它原因引起的強烈干擾噪聲而跑飛的事故。在很多微控制器中都內建了看門狗,看門狗本身是一個定時器,當定時器溢位時即進行系統復位,因此需要在程式中對看門狗定時器進行清零,即常說的喂狗。 由於我用過AVR的微控制器,和AVR的相比,MSP4