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 %d\n",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裸机试炼之——看门狗中断和复位操作,布布扣,bubuko.com

时间: 2024-08-03 11:21:15

mini2440裸机试炼之——看门狗中断和复位操作的相关文章

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

mini2440裸机试炼之IIS——音乐播放器

IIS 信号频率设置 IIS(Inter-IC Sound)由飞利浦公司开发,是一种常用的音频设备接口,主要用于CD.MD.MP3等设备. s3c2440一共有5个引脚用于IIS:IISDO.IISDI.IISSCLK.IISLRCK和CDCLK.前两个引脚用于数字音频信号的输出和输入,另外三个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确. IISSCLK为串行时钟,每一个时钟信号传送一位音频信号.因此IISSCLK的频率=声道数×采样频率×采样位数,如采样频率fs为44

mini2440裸机试炼之——Uart与pc端实现文件、字符传输

1.  波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号. 2.  非FIFO模式,即传输数据不利用FIFO缓存,一个字节一个字节地传输. 3.  接收到的数据是放到接收缓存器URXHn中,要发送数据时,是把数据放入发送缓存器UTXHn中.由于UART是通过字节方式传输数据的,因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所在的地址是不同.为了了解当前数据传输的各种状态,还需要一些状态寄存器.传输状态寄存器UTRSTATn非常有用,它的第0位可以用来判断

mini2440裸机试炼之——整合

mini2440裸机试炼系列先在这里落尾了,写了一个裸机整合的系统,各功能的代码在之前都有介绍的 目录视图: 整合的bin文件下载

第三十七天:Tiny驱动开发之看门狗中断

1.    看门狗原理 Watchdog原理上就是一个定时器.定时器timer对时钟进行计数,当定时器溢出时,产生复位信号,使得整个系统复位.在程序或嵌入式系统中,需要 定期的对看门狗timer进行复位重新计数,定时器不会溢出复位系统,从而保证系统的正常运行.当某种原因(例如干扰)引起程序跑飞或者进入死循环时,程 序不能定期的复位看门狗timer, 计数溢出产生复位信号,导致系统复位. 设本系统程序完整运行一周期的时间是T1,看门狗的定时周期为T2,T2>T1,在程序运行一周期后就修改定时器的计

mini2440裸机试炼之—计算器(LCD显示,触摸屏中断)

基于T35 TFT LCD屏实现功能: 1. 在屏幕上画一个计算器界面,包括0-9,+,-,*,/: 2. 实现触摸选择界面上的数字和运算符, 3. 并计算出结果显示在显示框内. 注意,只实现整数功能,没涉及小数,只实现一次运算,不保存上次运算结果. 实现界面: 实现过程: 开启LCD电源,初始化LCD>>>LCD填充界面图片>>>开启触摸屏中断>>>获取键值>>>区分数字和功能来调用数字图片显示.   数字图片: 空白图: 除数为零

mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

这个只能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.数据传输完后,DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于CPU与慢速及中速外设之间的数据交换.但当高速外设要与系统内存或者要在系统内存的不同区域之间进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率.直接存储器存取(DMA)就是为解决这个问题提出的,采

mini2440裸机试炼之——IIC控制EEPROM数据传输

内容: 向EEPROM(AT24C02)内部地址0x00-0xff,依次写入0x00-0xff,然后再读出数据. IIC总线介绍: IIC(Inter-IntegratedCircuit,I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微处理器及其外围设备.在iic总线上,只需要两条线:串行数据线SDA和串行时钟线SCL,便可完成通信 IIC要点 1.  清IIC中断标志语句rIICCON&= ~0x10;一定要在读写寄存器IICDS的后面,中断是读写寄存器后发生的: 2. 

linux内核中断之看门狗

一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog Timer Support /S3C2410 Watchdo 在内核中,我们处理一个中断,必须先注册一个中断号,注册中断的函数是: 132 request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 133 c