您的位置 首页 报告

ARM 学习笔记六 (看门狗中止实验)

什么是看门狗呢?我也不是很清楚,网上资料说看门狗的作用就是防止程序发生死循环,或者说程序跑飞。工作原理:在系统运行以后也就启动了看…

什么是看门狗呢?我也不是很清楚,网上材料说看门狗的作用便是避免程序发生死循环,或者说程序跑飞。作业原理:在体系运转今后也就发动了看门狗的计数器,看门狗就开端主动计数,假如到了必守时刻,不给把看门狗的计数清0,就会引起计数好处中止,发生体系复位。

可是我知道S3c2440发动代码里一开端就制止看门狗了。所以,一般都用不上吧。除非你的应用程序实时性比较高,那就得考虑用看门狗来看门了。

#define GLOBAL_CLK 1

#include “def.h”
#include “2440addr.h”
#include “mmu.h”
#include “option.h”

#define LED1 (1<<5) // rGPB[5] =1 ;
#define LED2 (1<<6) // rGPB[6] =1 ;
#define LED3 (1<<7) // rGPB[7] =1 ;
#define LED4 (1<<8) // rGPB[8] =1 ;

static int index=0;

void Delay1(int time)
{
unsigned int i,j;
for(i=1;i<100;i++)
for(j=1;j ;
}

void LightLED(void){

rGPBDAT = 0xfff;

if ( index==1 )
rGPBDAT=rGPBDAT & ~LED1;

if ( index==2 )
rGPBDAT=rGPBDAT & ~LED2;

if ( index==3)
rGPBDAT=rGPBDAT & ~LED3;

if ( index==4 )
rGPBDAT=rGPBDAT & ~LED4;

Delay1( 20000 ) ;


}
void __irq WatchDog_ISR(void){

rSUBSRCPND = BIT_SUB_WDT; //留意用到子中止源寄存器
rSRCPND = BIT_WDT_AC97;
rINTPND = BIT_WDT_AC97;


if (index >4 ){
index=1;
}
else{
index++;
}
LightLED();


}

void EINT_Init(void){

ClearPending(BIT_WDT_AC97);

pISR_WDT_AC97=(unsigned int)WatchDog_ISR;
//Prescaler value=100; lock dividion factor=128;PCLK=67.5MHz
//t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002
//disable watchdog
rWTCON=0x6418; //01100100 00 0 11 0 0 0
//周期T=WTCNT*t_watchdog=3S
rWTDAT=15000;
rWTCNT=15000;

rINTMSK &= (~BIT_WDT_AC97);
rINTSUBMSK &= (~BIT_SUB_WDT); //这个要用子中止屏蔽寄存器

rWTCON=0x643c; //01100100 00 1 11 1 0 0

}

void Main(void){
rGPBCON = 0x015550;
rGPBUP = 0x7ff;

ChangeClockDivider(3,1);
ChangeMPllValue(127,2,1);

MMU_Init();


EINT_Init();
while (1);

}

上面的程序每隔3秒会主动点亮一个LED.完成守时跑马灯的作用。

这个比如我本想参阅按键的比如来写代码,可是半途发现按键的比如不适用于看门狗。

由于看门狗是内部中止,按键是外部中止。别的最让我不明白的是,书上或是网上许多比如都用

pISR_WDT_AC97作为看门狗中止服务的向量地址。尝试用TIME0,TIME1都不可。古怪啊

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/264276.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部