Exynos4412裸机开发 —— 看门狗定时器

发布者:superstar11最新更新时间:2021-12-10 来源: eefocus关键字:Exynos4412  裸机开发  看门狗定时器 手机看文章 扫描二维码
随时随地手机看文章

一、看门狗定时器概述

看门狗(WatchDog Timer) 定时器和PWM的定时功能目的不一样。它的特点是,需要不同的接收信号(一些外置看门狗芯片)或重新设置计数器,保持计数值不为0。一旦一些时间接收不到信号,或计数值为0,看门狗将发出复位信号复位系统或产生中断。


看门狗的作用是微处理器收到干扰进入错误状态后,使系统在一定时间间隔内复位。因此看门狗是保证系统长期、可靠和稳定运行的有效措施。目前大部分的嵌入式芯片内部都集成了看门狗定时器来提高系统运行的可靠性。


4412处理器的看门狗是当系统被故障干扰时,用于处理器的复位操作,也可以作为一个通用的16位定时器来请求中断操作。看门狗定时器产生128个PCLK周期的复位信号。主要特性有如下两个。


1)通用的中断方式的16位定时器。

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


看门狗定时器功能框图如下:


看门狗模块包括一个预比例因子放大器,一个四分频的分频器,一个16位计数器。看门狗的时钟信号源来自PCLK,为了得到宽范围的看么狗信号,PCLK先被预分频,然后再进过分频器分频。预分频比例因子和分频器的分频值,都可以由看门狗控制寄存器(WTCON)决定,预分频比例因子的范围是0~255,分频器的分频比可以是16、32、64或128。看门狗定时器时钟周期的计算如下:


式中Prescaler value 为预分频比例放大器的值;Divison_factor是四分频的分频比,可以是16、32、64或128.


一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值就不能被自动地装在到看门狗定时器(WTCNT)中。因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。当4412用嵌入式ICE调试时,看门狗定时器的复位功能就不被启动,看门狗定时器能从CPU内核信号判断出当前CPU是否处于调试状态。如果看门狗定时器确定当前模式是调试模式,尽管看门狗产生溢出信号,但是仍然不会产生复位信号。


二、看门狗定时器相关定时器

1、看门狗定时器控制寄存器(WTCON)

WTCON寄存器的内容包括:用户是否启动看门狗定时器、4个分频比的选择、是否允许中断产生、是否允许复位操作等。


如果用户想把看门狗定时当做一般定时器使用,应该中断使能,禁止看门狗定时器复位。


WTCON描述如下:



2、看门狗定时器数据寄存器(WTDAT)

WTDAT用于指定超时时间,在看门狗把复位功能禁止并打开中断使能后,此时看门狗定时器就是一个普通的定时器,使用方法和普通定时器一样。当使用复位功能后,由于WTCNT的值减到0时,系统就会复位,所以WTCNT的值装不进看门狗计数寄存器(WTCNT)中。复位后初始值为0x8000。WTDAT描述如下:



3、看门狗计数寄存器(WTCNT)

WTCNT包含看门狗定时器工作的时候,计数器的当前计数值。WTCNT描述如下:



三、看门狗定时器的程序编写

1、看门狗软件程序设计流程

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


其一般流程如下:

1)设置看门狗中断操作,包括全局中断和看门狗中断使能及看门狗中断向量的定义,如果只是进行复位操作,这一步不用设置。

2)对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值,中断使能和复位使能等。

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

4)启动看门狗定时器。


2、具体代码如下:

  1. #include "exynos_4412.h"  

  2. #include "led.h"  

  3. #include "pwm.h"  

  4.   

  5. void mydelay_ms(int time)  

  6. {  

  7.     int i, j;  

  8.     while(time--)  

  9.     {  

  10.         for (i = 0; i < 5; i++)  

  11.             for (j = 0; j < 514; j++);  

  12.     }  

  13. }  

  14. //*(volatile unsigned int *)(0x11000c20) = 0;  

  15. /*  

  16.  *  裸机代码,不同于LINUX 应用层, 一定加循环控制  

  17.  */  

  18. void do_irq(void)  

  19. {  

  20.     static int a = 1;  

  21.     int irq_num;  

  22.     irq_num = CPU0.ICCIAR&0x3ff;  //获取中断号  

  23.     switch(irq_num)  

  24.     {  

  25.     case 57:  

  26.         printf("in the irq_handlern");  

  27.             EXT_INT41_PEND = EXT_INT41_PEND |((0x1 << 1)); //清GPIO中断标志位  

  28.             ICDICPR.ICDICPR1 = ICDICPR.ICDICPR1 | (0x1 << 25); //清GIC中断标志位  

  29.         break;  

  30.     case 75:  

  31.             printf("in the WDT interrupt!n");  

  32.             WDT.WTCLRINT = 0;  

  33.             ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 11); //清GIC中断标志位  

  34.             break;  

  35.     }  

  36.     CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; //清cpu中断标志位  

  37. }  

  38. void wdt_init(void)  

  39. {  

  40.     WDT.WTCON = (249 << 8) | (1 << 5) | (1 << 2)|(1 << 0);  

  41.     WDT.WTDAT = 25000;  

  42.     ICDDCR = 1;  //使能分配器  

  43.     ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 11); //使能相应中断到分配器  

  44.     ICDIPTR.ICDIPTR18 = ICDIPTR.ICDIPTR18 & (~(0xff << 24))|(0x1 << 24); //选择CPU接口  

  45.     CPU0.ICCPMR = 255; //中断屏蔽优先级  

  46.     CPU0.ICCICR = 1;   //使能中断到CPU  

  47. }  

  48.   

  49.   

  50. int main (void)  

  51. {  

  52.     wdt_init();  

  53.     printf("hello reset!n");  

  54.     while(1)  

  55.     {  

  56.         WDT.WTCNT = 25000;  

  57.         mydelay_ms(100);  

  58.     }  

  59.    return 0;  

  60. }  


关键字:Exynos4412  裸机开发  看门狗定时器 引用地址:Exynos4412裸机开发 —— 看门狗定时器

上一篇:Exynos4412裸机开发 —— RTC 实时时钟单元
下一篇:Exynos4412裸机开发 —— UART

推荐阅读最新更新时间:2024-11-01 11:20

ARM裸机开发bootloader—点亮LED灯
1、编写LED驱动的流程 a、原理图分析 b、芯片手册 c、思维导图 d、编写代码 2、为什么要点亮led 在嵌入式软件(bootloader、kernel)开发初期,由于串口等硬件尚未进行初始化,所以可以用来调试的手段很有限。这时通常运用点亮led作为调试的重要手段。也就是说不断改动led点亮程序的位置,来查看那段代码出现了问题,然后进行针对性的修改。 下面我用6410为例进行点亮led的介绍,其他的如2440和210流程相似。 a、原理图分析 从led的原理图我们可以看到,nLED_*低电平有效,也就是对应的s3c6410GPK4-7低电平,这个时候要引出一个概念:GPIO 什么是GPIO GP
[单片机]
ARM<font color='red'>裸机</font><font color='red'>开发</font>bootloader—点亮LED灯
ARM裸机开发笔记1(指令简介)
1.非常简单的ARM程序: arm.s文件内容 AREA Example,CODE,READONLY ;声明代码段 AREA:定义代码段 Example是代码段名称CODE:代码段关键字READONLY:只读关键字 ENTRY ;相当于C程序中的main函数,标识程序的入口 CODE32 ;使用32位指令集 START MOV R0,#1 ;具体的汇编指令 MOV R0,#0
[单片机]
一起学mini2440裸机开发(十二)--mini2440的串口中断实验
本实验实现的功能是:利用串口中断功能,通过串口调试工具接收到字符后再显示。 下图为我的工程文档 main.c文件 #include isrservice.h #include uart.h #include led.h #include interrupt.h int main() { Uart0_Init(115200); //初始化并设置波特率为115 200 Uart0_Interrupt_Init(); //Uart0中断初始化 Led_Init(); //Led初始化 while(1) //循环,等到中断发生 { ; }
[单片机]
一起学mini2440<font color='red'>裸机</font><font color='red'>开发</font>(十二)--mini2440的串口中断实验
MSP430学习点滴—看门狗定时器
简介:看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。控制寄存器WDTCTL由两部分组成,高8位用作口令,低8位实现对WDT的控制操作。要实现对WDT的操作控制,必须先写入高字节看门狗口令。 控制寄存器WDTCTL由两部分组成,高8位用作口令,低8位实现对WDT的控制操作。要实现对WDT的操作控制,必须先写入高字节看门狗口令。口令为5AH,头文件里一般将WDTPW宏定义为5AH.WDTCTL寄存器各位定义如下: 15~8 7 6 5 4 3 2 1 0 口令 HOLD NMIES NMI TMSEL CNTCL SSEL IS1 IS0 IS0 IS1 选择看门狗定时器的定时输出,其中T是WDTCNT的输入
[单片机]
jz2440裸机开发与分析:ARM芯片时钟体系2
目标:由上节可知,要想得到FCLK = 400MHz,HCLK = 100MHz,PCLK = 50MHz的时钟需要配置两个寄存器,分别为MPLLCON和CLKDIVN 第一步:先对LOCKTIME初始化 /* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ ldr r0,=0x4C000000 ldr r1,=0xFFFFFFFF str r1, 第二步:对MPLL进行配置,配置为400MHz 由以上公式可以推断: MPLL = (2*(92+8)*12)/((1+2)*2^1) =400 m = 92+8 p=1+2 s=1 再配置也需注意 所以MPLL配置过
[单片机]
jz2440<font color='red'>裸机</font><font color='red'>开发</font>与分析:ARM芯片时钟体系2
OK6410开发裸机DS18B20驱动
相信玩过51的童鞋应该都玩过DS18B20吧,虽然用在ARM11上面,但是操作还是一样,多了一点就是读写IO前需要切换IO方向,其实51在读取之前需要切换到高电平的,这个一般由编译器完成的, /************************************************************************************************************* * 文件名: ds18b20.c * 功能: S3C6410 DS18B20驱动 * 作者: cp1300@139.com * 创建时间: 2012年9月17日22:45 * 最后修改时间:
[单片机]
三星6410裸机程序开发2:建立eclipse裸机程序工程
网上关于S3C6410裸机程序开发都是基于RealView RVDS。也有一些是基于eclipse的,但都没有详细介绍在eclipse中如何建立S3C6410裸机程序工程。 尽管友善之臂提供的6410裸机程序示例使用了eclipse工程,然程序的编译却还是基于makefile的。那怎样建立6410的eclipse裸机程序工程呢?本文就此进行详细介绍。有了这个工程,可以简化裸机程序的开发过程,把精力专注于功能实现。 设置eclipse字体 因为友善之臂提供的裸机程序示例使用的是UTF-8编码,为正常使用这些源码,把eclipse的字体编码设为UTF-8格式。Windows— Preferences中,选择General— W
[单片机]
三星6410<font color='red'>裸机</font>程序<font color='red'>开发</font>2:建立eclipse<font color='red'>裸机</font>程序工程
具备可编程延迟与看门狗定时器的电源管理监控器
  日前,德州仪器 (TI) 宣布推出具备可编程延迟与看门狗定时器的四通道电源电压监控器 (SVS) 产品系列,可最大限度地缩减当前多轨电源设计的板级空间。TPS386000、TPS386020、TPS386040 以及 TPS386060 监控器均可监控电压超过 0.4V 的 4 个电源轨,阈值精度误差为 0.25%。这种高精度与集成看门狗定时器相结合,可为系统提供高可靠性,满足基于处理器的应用需求。TPS386000 系列器件可为每个监控器通道提供独立的可编程延迟输入,延迟时间可针对电源排序在 1.25ms 至 10 秒之间进行设置。   TPS386000 器件的工作静态电流极低,仅为 12uA,可帮助系统最大限度地
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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