S3C2410看门狗watchdog寄存器介绍与使用

2019-10-17来源: 51hei关键字:S3C2410  看门狗  watchdog  寄存器

看门狗应用实验 

1、实验目的 

    了解watchdog 的作用 

    掌握S3C2410 的watchdog 定时器的使用方法 

2、实验内容 

     实现看门狗复位 

     编程实现看门狗喂狗 

3、实验设备 

    S3C2410 开发板 

    ADS1.2 集成开发环境,JTAG 调试器、串口连接线 

4、实验原理 

4.1 看门狗功能简述 

    嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗 (watchdog )电路。看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。 

4.2 看门狗的工作原理 

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

4.3S3C2410 的看门狗 

    S3C2410 的看门狗定时器有两个功能: 

     作为常规时钟,并且可以产生中断; 

     作为看门狗定时器使用,当时钟计数减为0  (超时)时,它将产生一个128 个时钟 

        周期(PCLK )的复位信号。 

    主要特性如下: 

     通用的中断方式的16bit 定时器。 

     当计数器减到0          (发生溢出),产生128 个PCLK 周期的复位信号。 

    下图为看门狗的电路示意图,看门狗时钟使用PCLK 作为他的时钟源,PCLK 通过预分频产生适合的看门狗时钟。 


    看门狗模块包括一个预比例因子放大器,一个是四分频器,一个16bit 计数器。看门狗的时钟源来自PCLK,为了得到较宽范围的看门狗信号,PCLK 先被预分频,之后再经过分 频器分频。预分频比例因子的分频值,都可以由看门狗控制器(WTCON )决定,预分频值 的有效范围从0 到256-1。分频因子可以选择16、32、64 或者128。 

看门狗定时器记数值的计算公式如下: 

        t_watchdog=1/ [PCLK/( prescaler value +1)/ Division_factor ] 

    实验中PCLK=50MHz;prescaler =WTCON[15:8]=100;clock division factor=128 

        t_watchdog= 0.00025856 

        看门狗的定时周期为T=WTCH ×t_watchdog 

    调试环境下的看门狗 

    当S3C2410 用嵌入式ICE 调试的时候,看门狗定时器的复位功能不能启动,看门狗定时器能从CPU 内核信号判断出当前CPU 是否处于调试状态,如果看门狗定时器确定当前模 式是调试模式,尽管看门狗能产生溢出信号,但是仍然不会产生复位信号。 


5、S3C2410 相关寄存器 

    WTCON――看门狗定时器控制寄存器 

    看门狗控制寄存器能够禁止或者允许看门狗时钟,从四个不同的时钟源中挑选时钟信号,允许或禁止中断,并且能允许或禁止看门狗时钟输出。如果用户想要使用看门狗作为普 通时钟,应该中断使能,禁止看门狗定时器复位。 

    WTDAT――看门狗定时器数据寄存器 

    WTDAT 用于设置看门狗定时器的超时时间值,在初始化看门狗过程中,WTDAT 的值不会自动加载到定时计数器中,首次使用定时器超时值为其初始值即0x8000,以后该寄存器的值会被自动加载到WTCNT 寄存器中。 

    WTCNT――看门狗定时器计数寄存器 

    WTCNT 为看门狗定时器工作的时间计数器的当前计数值,注意在初始化看门狗操作后,看门狗数据寄存器(WTDAT )的值不能自动装载到看门狗计数寄存器(WTCNT )中, 所以看门狗被允许之前应高初始化看门狗计数寄存器的值。 

6、看门狗应用编程实现 

    由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要对看门狗的寄存器组进行操作。即对看门狗的控制寄存器(WTCON )、 看门狗数据寄存器(WTDAT )、看门狗计数寄存器(WTCNT )的操作。 

     设计流程如下: 

      设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。 

      对看门狗控制寄存器(WTCON )的设置,包括设置预分频比例因子、分频器的分 


          频值、中断使能和复位使能等。 

      对看门狗数据寄存器(WTDAT )和看门狗技术寄存器(WTCNT )的设置。 

      启动看门狗定时器。 

6.1 主功能函数 

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

     Function name: Main 

     Parameter     : void 

     Description   : 主功能函数 

     Return           : void 

     Argument       : void 

     Autor & date : 

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

     int Main(void) 

     { 

          SetClockDivider(1, 1);//FLCK:HCLK:PCLK=1:2:4 

          SetSysFclk(DFT_FCLK_VAL);//Fout=200MHZ 

          Port_Init(); 

          Uart_Select(0); 

          Uart_Init(0, UART_BAUD); 

          Uart_Printf("watchdog test is beginningn"); 

          watchdog_test(); 

     } 

6.2  看门狗测试程序 

     void watchdog_test(void) 

     { 

       //initialize interrupt registers 

       ClearPending(BIT_WDT); 

       //建立WatchDog 中断 

       pISR_WDT=(unsigned)watchdog_int; 

       //Prescaler value=100、clock division factor=128 

       //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856 

       //disable watchdog 

                                                                                                      4 

----------------------- Page 5-----------------------

        rWTCON=((100<<8)|(3<<3)); 

        //看门狗时钟周期T=WTCNT*t_watchdog=4S 

        //看门狗喂狗 

        rWTDAT=15000; 

        rWTCNT=15000; 

        rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt 

        rWTCON|=((1<<5)|(1<<2)|1);//watchdog   复位,时间间隔为4S。 

        //rWTCON|=(1<<5)|(1<<2);//每4S watchdog     一次中断。 

        //设置watchdog 为IRQ 中断模式 

        rINTMOD&=0xFFFFFDFF; 

        //开中断 

        EnableIrq(BIT_WDT); 

        while(f_ucSencondNo<11); 

       } 

6.3  看门狗中断服务程序 

     /****   watchdog_init  ****/ 

     void __irq watchdog_int(void) 

      { 

        //清除中断 

        ClearPending(BIT_WDT); 

        f_ucSencondNo++; 

        if(f_ucSencondNo<11) 

        Uart_Printf("%ds",f_ucSencondNo); 

        else 

        { 

          //mask watchdog timer interrupt 

          DisableIrq(BIT_WDT); 

          Uart_Printf("watch dog is okn"); 

        } 

     } 

7、实验过程 

     运行该程序后,将会在一段时间后自动产生一个复位信号,自动启动开发板。 


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

上一篇:itop修改uboot使之能保存环境变量
下一篇:基于数字相关的时栅信号处理设计LPC2138源程序及proteus仿真

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

推荐阅读

STM8S003的GPIO模拟I2C切换输入输出的解决办法
刚开始学STM8,很多东西刚了解,正在做一个温湿度显示小板,就是使用I2C驱动SHT20传感器,并显示到数码管,数码管用的四位一体共阴数码管,STM8管脚有限,添加了一片TM1650做驱动,不过SHT20和TM1650都是用的I2C接口,由于对STM8硬件I2C还不了解,先打算用软件模拟,这就涉及到需要对GPIO做输入输出切换处理来检测ACK响应,刚开始,直接操作DDR寄存器,但是出现从输出切换到输入就会出现单片机死机,不解,查资料,得到一个解决办法,在输出状态时,可以不用切换到输入,我使用管脚D4,D5这两个管脚,这两个管脚比较特殊,就是真正开漏,在管脚描述为T,其它描述为HS(高吸收电流)。解决办法,将IO设置为开漏输出,外部
发表于 2019-11-11
S3C2440裸奔之环境搭建
首先需要搭建一个可以编译代码的环境。从一开始我就不想用ADS(安装完ADS后会产生一个CodeWarrior for ARM Developer Suite的工具,可以编译和调试代码),虽然它是个很好的工具,但是它却隐藏了很多的细节,不利于新手去深度学习。所以我还是希望从Makefile入手,一步一步弄懂所有的细节。第一步:需要先搭建一个Linux环境,我是安装在虚拟机上面的。安装好Linux后,再从网上下载arm-linux-gcc,一般解压后之后就可以直接使用了,但需要先设置好环境参数。二步:编写代码,然后在Linux系统上进行编译。代码在后面会给出。第三步:需要把编译好的bin文件烧写到板子上。这个需要使用J-Link烧录器,
发表于 2019-11-11
S3C2440裸奔之环境搭建
S3C2440裸奔之SDRAM
EQU (DW16) ; PCMCIA(PD6710), 16-bitB3_BWSCON EQU (DW16) ; Ethernet(CS8900), 16-bitB4_BWSCON EQU (DW32) ; Intel Strata(28F128), 32-bit, for nCS4B5_BWSCON EQU (DW16) ; A400/A410 Ext, 16-bitB6_BWSCON EQU (DW32) ; SDRAM(K4S561632C) 32MBx2, 32-bitB7_BWSCON EQU (DW32) ; N.C.;BANK0CONB0_Tacs  EQU 0x3 ;0clkB0_Tcos  
发表于 2019-11-11
stm8s105调试I2C记录
最近由于AR项目中调试LCOS需要用到STM8S105的mcu,本次主要是使用模拟I2C。1.IIC协议简介 IIC协议这里只做简要介绍,详细介绍可以百度了解,协议相对简单,主要有开始位,停止位,应答位,非应答位。开始位:当时钟为高,数据线由高变低停止位:当时钟位高,数据线由低变高。应答位:第9个时钟到来时,数据线为低。(这里第9个时钟,发送完一个字节,紧接着就是第9个时钟到来)非应答位,第9个时钟到来时,数据线为高。2.LCOS协议:1.发送数据:单数据发送: 开始位:写地址位(8bit):寄存器地址(16bit):数据(8bit):停止位多字节发送:开始位:写地址(8bit):寄存器地址(16bit):数据(8bit
发表于 2019-11-09
stm8s105调试I2C记录
STM8S103K3 I2C
以下为.h文件:定义了PA1为SDA,PA2为SCL #ifndef __I2C_H#define __I2C_H#include "stm8s.h"#include "stm8s_gpio.h"#include "tim1.h"#include "uart.h"#include <iostm8s103f3.h>#include <intrinsics.h> #define SCL              
发表于 2019-11-08
S3C2410启动代码从ADSv1.2移植到KEIL For ARM uV4的方法
到SDRAM内存中运行时,所需要加载的SDRAM配置文件,相当于ADSV1.2工程中每次都需要通过命令行键入” obey wtk2410.ads “文件中的内容。 DebugInRAM.ini文件的内容如下:可以看到,去掉了ads文件里面的禁止vector_catch和semihosting两个命令,其余都一样。二、建立RVMDK工程文件,不要系统自建的启动代码,加入基本文件和main主程序文件。修改init.s文件,这个是移植的关键。需要注意的地方有:1. 宏”MOV_PC_LR“在KEIL里面修改成相应的BX <Rn>指令。2.把init.s文件原来定义的段名”Init“ 修改成”RESET“,这应该相当于
发表于 2019-11-08
S3C2410启动代码从ADSv1.2移植到KEIL For ARM uV4的方法
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved