基于mini2440的看门狗(裸机)
在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于監測單片機程序運行狀態的芯片,俗稱"看門狗",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。每次中斷蜂鳴器響起,并用串口顯示相關信息。程序如下:
主程序部分:
看門狗部分:
?
?
#include "2440addr.h"unsigned char watchdog_flag = 0;//看門狗中斷標志 void __irq watchdog_interrupt(void);/*看門狗初始化*/ void watchdog_set(unsigned int wtcnt) {/*開始時不自動裝載因此需先設置計數值*/rWTDAT = wtcnt;rWTCNT = wtcnt;/*使用中斷但不復位CPU*/rWTCON |= (249<<8 | 1<<5 | 1<<2 | 0);rINTSUBMSK &= ~(1<<13);//允許看門狗中斷rINTMSK &= ~(1<<9);/*設置中斷向量*/pISR_WDT_AC97 = (unsigned)watchdog_interrupt; }/*喂狗操作*/ void feed_watchdog(unsigned int wtcnt) {rWTCNT = wtcnt; }/*看門狗中斷服務函數*/ void __irq watchdog_interrupt(void) {rSUBSRCPND |= 1<<13;//清除中斷rSRCPND |= 1<<9;rINTPND |= 1<<9;watchdog_flag = 1;//設置用戶中斷標志 }
運行結果:
?
源代碼地址:http://download.csdn.net/detail/a16839678/6272069
?
總結
以上是生活随笔為你收集整理的基于mini2440的看门狗(裸机)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAS 之 集成RESTful API
- 下一篇: 我的github