基於mini2440的看門狗(裸機)

2021-06-18 09:22:08 字數 1152 閱讀 6148

在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器程式執行狀態的晶元,俗稱"看門狗",s3c2440中也整合了看門狗,在受到干擾或者系統錯誤時是晶元復位。s3c2440的看門狗有兩個特點:1、提供16bit的時間間隔的中斷。2、128個pclk的週期復位訊號。看門狗的結構:

看門狗定時器頻率計算如下:

分頻值從0到2的8次方減1,分頻係數可選:16、32、64、128。s3c2440看門狗操作需要三個暫存器:wtcon、wtdat、wtcnt。分別是看門狗控制、限時、計數。在啟動時候wtdat不會自動裝載到wtcnt,所以初始化時一定要寫定時值到wtcnt中。

測試程式:

測試中我們將分頻值設定為249,分頻係數設定為16。可計算看門狗時間間隔t_watchdog為0.00008s,設定4秒中斷一次的話那麼wtdat的值應設定為50000。每次中斷蜂鳴器響起,並用串列埠顯示相關資訊。程式如下:

主程式部分:

#define  global_clk 1

#include#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "profile.h"

#include "mmu.h"

extern void watchdog_set(unsigned int wtcnt);

extern void feed_watchdog(unsigned int wtcnt);

extern unsigned char watchdog_flag;

void delay(int num)

/*餵狗操作*/

void feed_watchdog(unsigned int wtcnt)

/*看門狗中斷服務函式*/

void __irq watchdog_interrupt(void)

執行結果:

基於mini2440的看門狗(裸機)

在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器...

mini6410 實現 看門狗移植

寫在移植前的 在mini6410中看門狗驅動檔案為linux2.6.38 drivers watchdog s3c2410 wdt.c 在mini6410中linux系統預設看門狗是不開機啟動,但是我們可以向 dev watchdog寫入資料來啟動或關閉看門狗。如 echo 0 dev watchd...

基於mini2440的RTC讀寫(裸機)

很多處理器都有rtc實時時鐘功能,s3c2440也提供了這個功能,其功能主要是 實時時鐘 鬧鐘 tick中斷等。rtc的操作比較簡單。讀寫時rtccon最低位應設定為1,不讀寫時設定為0以免誤修改rtc相應暫存器。bcdsec,bcdmin,bcdhour,bcdday,bcddate,bcdmon...