mini2440裸机试炼之——看门狗中断和复位操作

2020-07-04来源: eefocus关键字:mini2440  看门狗中断  复位操作

看门狗的工作原理:

设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器将在Ti时刻溢出,引发系统复位,使系统得以又一次执行,从而起到监控的作用。


看门狗具有两个功能:

1、当做常规时钟,能够产生中断;


2、当看门狗定时器使用,当计数器WTCNT为0时,产生复位;


看门狗的功能方框图:

我程序中PCLK为50MHz,预分频值=77,时钟除数因子选128,


时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]


=1/[50*1000000/(77+1)/128]=0.0002


t_watchdog表示的是看门狗计数计时器WTCNT每降低1所用的时间,WTCNT又相当于一个节拍的作用,当WTCNT为0时,假设看门狗控制寄存器WTCON[0]开启复位功能,则复位;假设看门狗控制寄存器WTCON[0] 禁止复位,开启中断,则中断操作,并数据(WTDAT)寄存器又一次赋值到计数(WTCNT)寄存器内,循环中断操作(这里的中断就类似RTC的闹钟中断)。


所谓的喂狗:就是使WTCNT在为0之前又一次赋值,不使之发生中断或者复位。


引用赵老师的一段话:


s3c2440的看门狗定时器不仅能够引起系统复位,还能够引起一般的中断,因此s3c2440的看门狗定时器能够当作一般的定时器使用。


看门狗中断结果:

每四秒一个中断,LED点亮并串口提示


看门狗复位结果:

AXD调试执行到看门狗计数器rWTCNT为零时,进入复位,CPU停止工作,也就不产生中断。


复位关闭axd后,u-boot串口初始化提示(没能及时在第一次蜂鸣器响按下按键停止autoboot):

复位关闭axd后,u-boot串口初始化提示(及时在第一次蜂鸣器响按下按键停止autoboot):

这里就是复位到用uboot初始化开发板的时候,可是不明确为什么必需要在第一次蜂鸣器就按下按键才干进到uboot


附:

硬件环境:J-link v8、mini2440、J-link转接板、串口转USB线


软件环境:windows7(32位)、开发板uboot(NandFlash)、J-link驱动(J-Link ARM V4.10i)、SecureCRT、ADS1.2


 


代码块


//====================================================================

//  实现功能:

//           看门狗中断和复位操作

//       当WTCON[0] 开启复位功能;                实现复位

//       当WTCON[0] 禁止复位,WTCON[2]开启中断;  实现中断

//                                                   by:梁惠涌

//====================================================================

#include "2440addr.h" 

#include "def.h"

#include "2440lib.h"

 

static U8 led_flag=0;

/**************************************************************

                   看门狗初始化函数

**************************************************************/

void watchdog_init(){

    rWTCON=((77<<8)|(1<<5)|(3<<3)|(1<<2)); //预分频值=77;看门狗定时器使能;时钟除数因子=128 ;看门狗中断使能;

    //时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]=1/[50*1000000/(77+1)/128]=0.0002

    //t_watchdog表示的是看门狗计数计时器WTCNT每降低1所用的时间

    rWTDAT=20000; //WTDAT看门狗数据寄存器,看门狗定时器重载的计数值  

    rWTCNT=20000; //WTCNT看门狗计数寄存器,看门狗定时器当前计数值

}

 

/**************************************************************

                        看门狗中断函数

**************************************************************/

void __irq watchdog_isr(){

    rSUBSRCPND |=1<<13; //清除次级中断挂起状态

    rSRCPND|=0x1<<9;    //清除中断挂起状态

    rINTPND|=0x1<<9;

   

   //中断LED点亮 

    led_flag++;

    Uart_Printf("n    -----看门狗中断,点亮LED %dn",led_flag);

    rGPBCON=0x015400;

    switch(led_flag){

    case 1: rGPBDAT=0xe<<5 ;break;

    case 2: rGPBDAT=0xd<<5 ;break;

    case 3: rGPBDAT=0xb<<5 ;break;

    case 4: rGPBDAT=0x7<<5 ;break;

    }

    if(led_flag==4) led_flag=0;  

    

    rSUBSRCPND &=(~0x1<<13);

    rSRCPND &=(~0x1<<9);   //开中断

    rINTPND &=(~0x1<<9);

}

 

/**************************************************************

                       看门狗子函数  

**************************************************************/    

void watchdog(){

    

    watchdog_init(); //初始化看门狗寄存器

    

    //选择是否开启复位

    //rWTCON |= (1<<0);//开启复位

    rWTCON |= (0<<0);//禁止复位

    

    rINTSUBMSK &=~(1<<13);//开看门狗次级中断  

    rINTMSK &=~(1<<9);    //开看门狗中断    

    pISR_WDT_AC97=(unsigned)watchdog_isr;

    

    while(1){

    } 

}


关键字:mini2440  看门狗中断  复位操作 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic502131.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:arm-linux-gcc 裸机程序开发(一)
下一篇:mini2440裸机试炼之——IIC控制EEPROM数据传输

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

mini2440之ads下dma测试
在网上找到一个dma的ads工程,将其dma功能整到了原来的ads工程TQ2440_Test里面用下面的main.c换下原来TQ2440_Test的main.chttp://download.csdn.net/detail/songqqnew/3636198之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具体见Datasheet。这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。Atomic transfer:指的是DMA的单次原子操作,它可以是Uni
发表于 2020-07-19
mini2440裸机试炼之--myled
///**********************************************************//*****************此函数为实现***************************//**led1亮>>>led1灭>>>                                    //**>>>led1、led2亮>>>
发表于 2020-07-06
<font color='red'>mini2440</font>裸机试炼之--myled
mini2440裸机试炼之--按键控制蜂鸣器和LED
根据用户手册和数据手册得到***************************************************************************************************************************************************************                      ***************************************************
发表于 2020-07-06
<font color='red'>mini2440</font>裸机试炼之--按键控制蜂鸣器和LED
mini2440裸机试炼之——PWM定时器按键更改频率
资料:《s3c2440中文数据手册(完整版)》 第九章:输入输出端口  ;第十章:PWM蜂鸣器//按按键k1蜂鸣器频率降低,//按按键k2蜂鸣器频率升高,//按按键k3退出蜂鸣器测试//按按键k4开启蜂鸣器测试 #define GPBCON    (*(volatile unsigned long*)0x56000010)  //rGPBCON是指向0x56000010这个地址空间的一个宏#define GPBDAT    (*(volatile unsigned long*)0x56000014)  //led GPIO 
发表于 2020-07-06
mini2440裸机试炼之--A/D模拟信号转换
/ (49+1) = 1 MHzA/D 转换的时间 = 1 /(1MHz / 5cycles)=5 uS由此可知当PRSCVL的值越小,A/D 转换的时间越短,A/D 转换的频率也就越大。注意:当从待机模式中变换到正常工作模式时,ADC的预分频器必须在最后的3个ADC时钟前使能????SEL_MUX是模拟输入通道选择控制器READ_START要使能A/D转换启动,就必须禁止READ_ STARTENABLE_START 使能A/D转换控制位ADCDAT0由于只是通过AIN0模拟信号输入。并没使用触摸屏功能,所以,ADCDAT0只考虑普通ADC转换数值(模拟信号转换的数字数值存于XPDATA)W1可调电位器mini2440上有一个可调电位器
发表于 2020-07-06
<font color='red'>mini2440</font>裸机试炼之--A/D模拟信号转换
mini2440裸机试炼之—RTC闹钟中断,节拍中断
环境搭建    硬件环境:J-link v8、mini2440、J-link转接板、串口转USB线    软件环境:windows7(32位)、开发板uboot(NandFlash)、J-link驱动(J-Link ARM V4.10i)、SecureCRT、ADS1.2    其中ADS里的AXD设置:加载JlinkRDI.dll+Options->Configure Interface...,在Session File一页中选择“Run Configuration Script”,将该name.txt文本文件作为一个脚本加进来,确定。name.txt内容
发表于 2020-07-06
<font color='red'>mini2440</font>裸机试炼之—RTC闹钟中断,节拍中断
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved