历史上的今天
返回首页

历史上的今天

今天是:2024年12月10日(星期二)

正在发生

2021年12月10日 | Exynos4412裸机开发 —— 看门狗定时器

2021-12-10 来源:eefocus

一、看门狗定时器概述

看门狗(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. }  


推荐阅读

史海拾趣

Burr-Brown公司的发展小趣事

进入20世纪70年代中期,Burr-Brown敏锐地意识到数字技术将对音频行业产生深远影响。公司迅速抓住CD播放机市场的机遇,通过技术创新,成功引领音频行业进入数字时代。这一转型不仅巩固了Burr-Brown在音频领域的领先地位,也为公司带来了更广阔的发展空间。

Amptek Inc公司的发展小趣事

随着公司规模的扩大,Burr-Brown开始寻求海外市场的发展。1961年,公司首次进入国际市场,开启了全球化的发展道路。十年后,英国子公司的设立进一步巩固了公司在欧洲的市场地位。四年后,日本分公司的创建则标志着Burr-Brown在亚洲市场的深入拓展。到1979年,公司的销售额已经有50%来自于美国以外的国家,显示出其强大的国际竞争力。

EasySync公司的发展小趣事

EasySync公司成立于XXXX年,由一群热衷于同步技术的电子工程师创立。在初创期,公司面临着资金短缺、市场竞争激烈以及技术难题等挑战。然而,创始人们凭借对技术的热爱和对市场的敏锐洞察,不断研发新产品,优化同步算法,逐渐在市场上获得了认可。

ACI [Applied Concepts, Inc.]公司的发展小趣事

随着全球电子市场的不断扩大,ACI公司开始将目光投向海外市场。公司积极实施国际化战略,通过设立海外分支机构、参加国际展会等方式拓展市场。同时,ACI还加强了与国际同行的交流与合作,共同推动电子行业的发展。通过国际化布局,ACI成功打开了海外市场的大门,为公司的发展注入了新的动力。

Cincon公司的发展小趣事

经过多年的努力和发展,Cincon在电源行业取得了显著的成就。其产品包括多种类型的电源转换器、适配器和LED电源等,广泛应用于各种电子设备中。凭借卓越的产品质量和创新能力,Cincon赢得了全球客户的信赖和认可。

Electroswitch公司的发展小趣事

面对快速变化的电子行业环境,Electroswitch始终保持着敏锐的洞察力和创新精神。公司不断加大对新技术和新产品的研发力度,推出了一系列具有领先水平的开关产品。同时,公司还积极探索新的业务领域和市场机会,为未来的发展做好充分准备。展望未来,Electroswitch将继续秉承“质量、选择、产品创新和出色的支持”的理念,为客户提供更加优质的产品和服务。

请注意,以上故事框架仅供参考,您可以根据这些框架进一步扩展和丰富故事内容。

问答坊 | AI 解惑

参加研祥产品冠名活动 精彩大奖等你拿

北京研祥开展产品冠名征集活动:您可以发送短信为研祥产品冠名,同时还可以对已有产品名称进行投票,参与就有奖。每日都会抽取幸运奖,获赠50元话费,同时还有机会获得“深圳三日游”、“19寸液晶显示器”、“精美MP4等大奖”。大家赶紧行动吧!活 ...…

查看全部问答>

低功耗无线充电的试验~~

原理相信我们每个人都熟悉,但是真正动手付诸实践,也需要不小的兴趣哦 i\'m going to show you how to make your own low-power wireless chargingcircuits that will let you pass electricity through the air (or anyother non-metallic med ...…

查看全部问答>

传入ImeToAsciiEx的虚拟键值内容是什么?

如题。 UINT WINAPI ImeToAsciiEx(       UINT    uVirtKey,       UINT    uScanCode,       CONST  LPBYTE lpbKeyState,     ...…

查看全部问答>

hello world。编译错误

高手指点一下吧,找了好多帖子也没解决 #include #include MODULE_LICENSE(\"Dual BSD/GPL\"); static int hello_init(void) {         printk(KERN_ALERT \"Hello, world\\n\");      &nbs ...…

查看全部问答>

急求NASM的XP下编译环境(自己动手编操作系统) 则么用NASM编译

我用的是CORE的新CPU  老是不能用NASM的EXE 文件! 急求 则么 用NASM编译的!那个NASMW.EXE 老是一按 就闪一下 就没踪影了?? 则么用NASM编译…

查看全部问答>

LED护栏管LED数码管安装方法

replyreload += \',\' + 706990;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

增量式编码器的相位对齐方式

增量式编码器的相位对齐方式 在此讨论中,增量式编码器的输出信号为方波信号,又可以分为带换相信号的增量式编码器和普通的增量式编码器,普通的增量式编码器具备两相正交方波脉冲输出信号A和B,以及零位信号Z;带换相信号的增量式编码器除具备ABZ ...…

查看全部问答>

关于NFC和RFID的了解

          前两年NFC似乎非常的火暴,装在手机就可以支付,但是貌似没在国内发展起来国内现在用余额宝,支付宝之类的二维码支付搞的更节省成本,因为摄像头本来是自带的,NFC 需要做天线,成本增加了,不过寥寥也无 ...…

查看全部问答>

提问+听说STM8要停产了,你有其他替代方案吗

以前用AVR,很不错,可缺货害了不少人,通过多方努力,很多人转战到STM8,而现在又听说STM8要停产了,你准备好了吗,你有其他替代方案吗?…

查看全部问答>