嵌入式開發第47天(看門狗定時器的原理)
看門狗定時器有兩個作用:
1、看門狗復位
可以設定看門狗定時器的計數值,計數值在看門狗的工作頻率下不斷的減1,當計數值減到0,看門狗就會產生一個復位訊號,造成了整個系統的復位。
例如:
看門狗的工作頻率設定成1000Hz,看門狗的計數值設定成10000;這樣計數值每1ms減一次1,當10秒後計數值減到0。系統就會產生復位訊號,系統重啟。
系統正常工作的時候,我們應該10秒鐘內(計數值減到0之前)重新給計數值賦一個初始值,防止系統重啟,這個過程叫“喂狗”。
當系統執行出錯,程式“跑飛”的時候,“喂狗”程式也停止工作,這樣會出現10s之內不能喂狗,系統就會重啟,讓系統重新開始工作,恢復到正常工作狀態。
簡述:當系統受到干擾而產生宕機(後者程式跑飛)的時候,看門狗可以讓系統重啟,重新開始工作。
2、普通的定時器(51微控制器的定時器)
普通的定時器主要是用來計時。會產生週期性的中斷,我們可以設定定時器的週期。
例:
我們可以設定定時器的工作頻率1000HZ,定時器的計數值設定成1000;這樣當開啟定時器中斷,並開啟定時器後,計數值就每1ms減一次1,當計數值減到0,就會生成一箇中斷,會執行一箇中斷服務程式,在中斷服務程式中開始計時。計數值會自動的恢復到1000,開始下一個週期,周而復始.....
=========================================================
一、看門狗的框圖
分頻有什麼用?
上章講到時鐘源的由來,他是由晶片外的晶振產生時鐘源
然後經過看門狗的分頻器二次分頻 得到一個基準頻率。
這個所謂的基準頻率,指的就是看門狗的基準週期,也就是現實生活中的一秒等於頻率的多少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,利用看門狗定時器進行計時,使LED1每400ms翻轉一次。
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++; //每10ms,sum=sum+1
if(sum==40) //400ms
{
GPJ2DAT ^= (0x1<<0); //翻轉LED1
sum=0; //清0,準備下一次400ms的計數
}
WTCLRINT=1; //清看門狗的中斷
intc_clearvectaddr(); //清中斷控制器的中斷
}
相關推薦
嵌入式開發第47天(看門狗定時器的原理)
看門狗定時器有兩個作用: 1、看門狗復位 可以設定看門狗定時器的計數值,計數值在看門狗的工作頻率下不斷的減1,當計數值減到0,看門狗就會產生一個復位訊號,造成了整個系統的復位。 例如: 看門狗的工作頻
嵌入式開發第42天(ARM的體系結構)
一、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 學習第2天(2018年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#的第9天(for&while迴圈語句)
“最後一點就是堅持,有時候寫這些東西真的很痛苦,很讓人抓狂,但是你一旦你堅持下去,久而久之,你會看到自己的進步,某一天你回過頭去看自己以前寫的文章,當你能夠說出:“寫得真他媽菜”,那麼恭喜你,已經你升級了“。 &nb
接觸C#的第五天(今天沒有Python回鍋)
“最後一點就是堅持,有時候寫這些東西真的很痛苦,很讓人抓狂,但是你一旦你堅持下去,久而久之,你會看到自己的進步,某一天你回過頭去看自己以前寫的文章,當你能夠說出:”寫得真他媽菜”,那麼恭喜你,你已經level up了。” &nbs
2440裡面有個看門狗 定時器(Watch Dog Timer)
我怕連結會失效,故轉載此篇文章。。。 情境: 我們編寫的程式程式碼是先點亮led1,然後延時一會,再點亮led2,進入死迴圈。但在開發板上的實際效果是led1先亮,延時一會,led2再亮,然後一會之後,led1再次亮了。 這和我們的設計的程式碼流程不吻合,這是因為2
Python學習第四天(變數、集合和字串)
上一篇沒有儲存傷心 變數在賦值時即被建立===賦值會讓變數自動生成 變數在表示式中使用以前 必須被賦值 ———————————————————————————————————————————————— 集合 集合中的一個項無論新增多少次,只能出現一次 集合是無序的、唯一的、不
leetcode第47題(binary-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