欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

基于mini2440的看门狗(裸机)

发布时间:2025/3/21 编程问答 70 豆豆
生活随笔 收集整理的这篇文章主要介绍了 基于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。每次中断蜂鸣器响起,并用串口显示相关信息。程序如下:

主程序部分:

#define GLOBAL_CLK 1#include<string.h> #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) {int i, j, k;for(i=0;i<num;i++)for(j=0;j<1000;j++)for(k=0;k<1000;k++); }void Main(void) {rGPBCON = (1<<0);//GPIOB[0]设为输出rGPBDAT = (0<<0);//关闭蜂鸣器MMU_Init();//地址的重映射watchdog_set(50000);while (1){if (1 == watchdog_flag){rGPBDAT = 1;//打开蜂鸣器delay(50);Uart_Printf("\nwatchdog on\n");}watchdog_flag = 0;rGPBDAT = 0;//关闭蜂鸣器} }


看门狗部分:

 

 

#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的看门狗(裸机)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。