版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章看门狗定时器1思维导图2学习目标理解Exynos4412处理器的看门狗工作原理,包括其核心机制(通过递减计数器监控系统运行状态)、定时周期设置方法(如分频器配置与计数值关系),以及看门狗在系统复位或中断触发中的作用。3技能目标41.掌握Exynos4412看门狗寄存器的配置,包括预分频因子、分频器选择、中断/复位使能等参数设置;2.能够通过编程实现看门狗的初始化、喂狗操作及中断处理;3.熟悉看门狗定时器在系统监控中的应用。CONTENTS目录7.1看门狗原理7.2Exynos4412看门狗控制7.3看门狗定时器控制寄存器7.4看门狗定时器应用实例5
67.1
看门狗原理看门狗定时器与普通定时器区别看门狗定时器需周期性复位,防溢出复位系统,保证运行稳定。普通定时器用于计时或中断触发。看门狗功能专用于系统可靠性监控的硬件模块,即用于检测程序的正常运行,防止因程序异常导致系统死机,通过定时复位保持系统稳定。核心工作原理通过递减计数器对时钟信号计数,若计数器溢出前未被程序主动复位(称为"喂狗"),则触发系统复位信号强制恢复运行。
假设系统程序完整运行一周期的时间是T1,看门狗的定时周期为T2,那么T2应该大于T1,即在程序运行一周期内就修改看门狗定时器的计数初值,只要程序正常运行,看门狗定时器就不会溢出。
若因为程序“跑飞”(
程序跑飞指因软件缺陷或硬件干扰导致程序计数器(PC)跳转到非预期地址,引发不可控行为)或者进入死循环,那么系统不能在T1时刻修改时间的计数值,看门狗定时器会一直计数,直到T2时刻溢出,引发系统复位,使系统重新运行,从而起到监控作用。7.1
看门狗原理7Exynos4412处理器的看门狗是当系统被故障(如噪声或者系统错误)干扰时
,用于微处理器的复位操作,也可以作为一个通用的16位定时器来请求中断操作。
Exynos4412处理器的看门狗就是当系统被故障干扰时,使微处理器复位,也可以作为一个常规16位内部定时器使用,并且可以产生中断。作为看门狗定时器使用,计时期满时,它可以产生128个PCLK时钟周期的复位信号。技术特点:“产生128个PCLK时钟周期的复位信号”是Exynos4412看门狗定时器的核心特性之一,它通过硬件固定的持续时间,确保系统在故障时能可靠恢复。这一设计体现了嵌入式系统中“故障安全”与“实时性”的平衡,是提高系统鲁棒性的关键机制。7.1
看门狗原理897.2
Exynos4412看门狗控制Exynos4412处理器的看门狗模块如图7-1所示,包括一个预分频因子、一个四分频的分频器和一个16位的计数器。输入时钟为PCLK,它经过两级分频(预分频和分频),将分频后的时钟作为该定时器的输入时钟。当计数器计满后可以产生中断或者复位信号。图7-1看门狗模块第一级分频第二级分频107.2
Exynos4412看门狗控制看门狗定时器计数值的计算公式如下:(1)输入到计数器的时钟周期为t_WatchDog=1/(PCLK/(Prescaler+1)/Divisionfactor)
其中,Prescaler为预分频值(取值范围为0~255);Divisionfactor为四分频器的分频因子,取值为16、32、64、128),由用户在WTCON(看门狗时钟控制寄存器)中设置。
(2)看门狗定时器的定时周期T为T=计数值*t_WatchDog计数值=WTCNT初值-WTCNT当前值
其中,WTCNT为看门狗计数寄存器,用来设置计数多少个时钟周期,乘以时钟周期则是定时的总时间。
一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值就不能被自动转载到看门狗计数器(WTCNT)中。因此,看门狗启动前要将一个初始值写入到看门狗计数器(WTCNT)中。117.3
看门狗定时器控制寄存器(1)看门狗定时器控制寄存器(WTCON)(2)看门狗定时器数据寄存器(WTDAT)(3)看门狗计数寄存器(WTCNT)(1)看门狗定时器控制寄存器(WTCON)
该寄存器用于配置用户是否启用看门狗定时器、预分频值、4个分频比的选择、是否允许中断产生、是否允许复位操作等。7.3
看门狗定时器控制寄存器名称位域类型功
能
描
述复位值预分频[15:8]RW设置预分频值(0~28-1)0x0WDTtimer[5]RW0=禁止;1=使能0x0分频器[4:3]RW00=16;01=32;10=64;11=1280x0中断使能[2]RW0=禁止;1=使能0x0复位使能[0]RW0=禁止;1=使能0x0表7-1看门狗时钟控制寄存器(WTCON)WDT.WTCON=0xff<<8|1<<5|3<<3|1; /* *Prescalervalue:255,EnablesWDT *Prescalerclockdivisionfactor128 *EnablesWDTresetsignal */WTDAT寄存器用于设定超时时长。初始WDT操作时无法将WTDAT内容加载至定时器计数器。但通过使用0x8000(初始值)可触发WDT计数器的首次超时。此时WDT计数器逻辑会自动将WTDAT值重新加载至WTCNT。(2)看门狗数据寄存器(WTDAT)7.3
看门狗定时器控制寄存器表7-2看门狗数据寄存器WTCNT用于设定看门狗定时器工作时计数器的当前计数值,初始化看门狗操作后,看门狗数据寄存器的值不能被自动装载到看门狗计数寄存器中,所以看门狗被允许之前应该初始化看门狗计数寄存器的值。(3)看门狗计数寄存器(WTCNT)7.3
看门狗定时器控制寄存器表7-3
看门狗计数寄存器157.4
看门狗定时器应用实例7.4.1WatchDog实验1.实验目的
熟悉Exynos4412中断控制器的使用;
理解Exynos4412处理器的看门狗工作原理;
掌握ARM处理器的中断方式和看门狗的中断处理方法。2.实验原理
通过上述对看门狗机制及其寄存器的介绍,可以认识到看门狗是一个内置系统,它无需借助外部电路便能监控系统运行状态,检测系统是否出现异常。若系统程序异常导致无法执行“喂狗”操作,看门狗控制器将能够复位系统。167.4
看门狗定时器应用实例7.4.2程序设计与代码详解1.设计思路
由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要对看门狗的寄存器组进行操作,即对看门狗控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)进行操作。
其一般流程如下:(1)设置看门狗中断操作,包括全局中断和看门狗中断的使能以及看门狗中断向量的定义。如果只是进行复位操作,这一步可以不用设置。(2)对看门狗控制寄存器(WTCON)进行设置,包括设置预分频因子、分频器的分频值、中断使能和复位使能等。(3)对看门狗数据寄存器(WTDAT)和看门狗计数存器(WTCNT)进行设置。(4)启动看门狗定时器。
177.4
看门狗定时器应用实例7.4.2程序设计与代码详解2.具体程序voidwdt_init(){ WDT.WTCNT=0x2014; //initialvalue /* *Prescalervalue:255,EnablesWDT *Prescalerclockdivisionfactor128 *EnablesWDTresetsignal */ WDT.WTCON=0xff<<8|1<<5|3<<3|1;}/*-------------------------MAINFUNCTION------------------------------*/intmain(void){ GPX2.CON=0x1<<28; uart_init(); wdt_init(); printf("\n*************WDTRESETtest!!***************\n"); while(1) { //Turnon LED2 GPX2.DAT=GPX2.DAT|0x1<<7; mydelay_ms(200);#if0 //FeedDog WDT.WTCNT=0x2014;#endif printf("working...\n"); //Turnoff LED2 GPX2.DAT=GPX2.DAT&~(0x1<<7); mydelay_ms(200); } return0;}187.4
看门狗定时器应用实例7.4.2程序设计与代码详解2.具体程序(看门狗中断测试代码)#include"exynos_4412.h"#include"uart.h"
voiddo_irq(void){ intirq_num; irq_num=(CPU0.ICCIAR&0x1FF); printf("\n*******WDTinterrupt!!********\n"); WDT.WTCLRINT=1; //Endofinterrupt CPU0.ICCEOIR=(CPU0.ICCEOIR&~(0x1FF))|irq_num;}197.4
看门狗定时器应用实例7.4.2程序设计与代码详解2.具体程序(看门狗中断测试代码)voidwdt_init(){ WDT.WTCNT=0x2014; //initialvalue /* *Prescalervalue:255,EnablesWDT *Prescalerclockdivisionfactor128 *EnablesWDTinterrupt */ WDT.WTCON=0xff<<8|1<<5|3<<3|1<<2;}207.4
看门狗定时器应用实例7.4.2程序设计与代码详解2.具体程序(看门狗中断测试代码)intmain(void){ GPX2.CON=0x1<<28; uart_init(); //EnablesthecorrespondinginterruptSPI43,WDT ICDISER.ICDISER2|=1<<11;//ICDISER2:spi32[bit0]~63[bit31],43-32=[bit11] CPU0.ICCICR|=0x1;//Globalenableforsignalingofinterrupts CPU0.ICCPMR=0xFF;//Theprioritymasklevel.Priorityfilter.threshold ICDDCR=1; //Bit1:GICmonitorstheperipheralinterruptsignalsand //forwardspendinginterruptstotheCPUinterfaces2 //ICDIPTR18:SPI40~SPI43;SPI43interruptsaresenttoprocessor0 ICDIPTR.ICDIPTR18=(ICDIPTR.ICDIPTR18&~(0xFF<<24))|1<<24;217.4
看门狗定时器应用实例7.4.2程序设计与代码详解2.具体程序(看门狗中断测试代码) wdt_init(); printf("\n***************WDTInterrupttest!!***************\n"); while(1) { //Turnon LED2 GPX2.DAT=GPX2.DAT|0x1<<7; mydelay_ms(200);#if0 //FeedDog WDT.WTCNT=0x2014;#endif printf("working...\n"); //Turnoff LED2 GPX2.DAT=GPX2.DAT&~(0x1<<7); mydelay_ms(200); } return0;}谢谢THEEND第8章
实时时钟思维导图24学习目标1.理解RTC硬件控制原理;2.掌握RTC功能特性。25技能目标261.具有RTC寄存器的配置能力;2.具有编程实现RTC的能力。CONTENTS目录8.1RTC概述8.2RTC寄存器8.3BCD码8.4RTC应用实例27288.1
RTC概述嵌入式系统中,通常采用实时时钟(Real-timeClock,RTC)来提供可靠的系统时间,包括秒、分、时、星期、日、月和年,支持闰年自动修正,并且在系统处于关机状态下RTC也能够正常工作,通常采用后备电池(典型电压1.8-3.3v)供电,可在系统主电源关闭时维持计时连续性。
RTC单元运行与数据保持RTC单元可以通过备用电池供电,即使系统主电源关闭,仍可持续运行,确保时间、日期等关键数据不丢失。
RTC单元时间精度RTC单元以32.768kHz晶振为基准时钟,通过内置的15级分频器(215=32768)将频率分频至1Hz时,CPU通过BCD码读写时间信息。
RTC单元报警功能框图RTC具有定时报警的功能,RTC功能框图如图8-1所示。8.1
RTC概述外部32.768KHz晶振分频器时钟滴答产生模块时间寄存器组控制与复位模块闹钟与中断模块时间更新流程:32.768kHz晶振→215分频→1Hz信号→驱动SEC寄存器自增→逐级进位至年寄存器8.1
RTC概述301.RTC简介组成图8-1Exynos4412的RTC的功能框图8.1
RTC概述312.Exynos4412RTC定时器特点时钟数据采用BCD编码。能够对闰年的年月日进行自动处理。具有告警功能,当系统处于关机状态时,能产生告警中断。具有独立的电源输入。提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟。328.2
RTC寄存器1.RTC控制寄存器表8-1RTCCON寄存器(地址=0x10070040)2.RTC时间值寄存器(BCDSEC、BCDMIN、BCDHOUR等)RTC时间值寄存器,用来存放RTC时钟当前时间,年、月、日、时、分、秒、星期值每个单位都对应一个寄存器来存放。寄存器里的时间值都是使用BCD码来表示的。RTC时间值寄存器相对简单,以存放当前秒的数值的寄存器BCDSEC为例,如表8-2所示。表8-2BCDSEC寄存器(地址=0x10070000)8.2
RTC寄存器33
计算机内毫无例外地都使用二进制数进行运算,但通常采用八进制数和十六进制数的形式进行读写。对于计算机技术专业人员,要理解这些数的含义是没有问题的,但对非专业人员却不是那么容易。由于日常生活中,人们最熟悉的数制是十进制,因此专门规定了一种二进制的十进制码,称为BCD码,它是一种以二进制数表示的十进制数码。BCD码(BinaryCodedDecimal)这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6,7,8,9十个数符。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9这十个数符。最常用的BCD码称为8421BCD码,8、4、2、1分别是4位二进制数的位取值。十进制数和8421BCD编码的对应关系表如表8-3所示。表8-3BCD码表十进制数:75.4BCD码:7对应0111,5对应0101,4对应01008421BCD码是:01110101.0100BCD码:10000101.0101十进制数:1000对应8,0101对应5,0101对应5结果:85.5(D)。8.3
BCD码34358.4
RTC应用实例8.4.1
RTC定时器实验1.实验目的了解RTC的硬件控制原理及设计方法;掌握Exynos4412处理器的RTC模块程序设计方法(计时功能、闹钟功能、时间片功能)。2.实验原理
实时时钟(RTC)单元可以在当系统电源关闭后通过备用电池工作。RTC可以通过使用STRB/LDRB操作发送8位二——十进制交换码(BCD)值数据给CPU。这些数据包括年、月、日、星期、时、分和秒的时间信息。根据上面阐述RTC的工作原理和RTC寄存器的介绍,对相应的寄存器读写就可以实现修改时间和显示时间。368.4
RTC应用实例8.4.2
RTC定时器实验1.RTC设计步骤(1)系统复位后在RTC控制寄存器中的CTLEN必须设置为1来使能数据的读/写。(2)设置RTC当前时钟时间。(3)同样的在掉电前,CTLEN位应该清除为0来预防误写入RTC寄存器中。(4)读取年、月、日等相关寄存器的数据显示到屏幕上。378.4
RTC应用实例8.4.2
RTC定时器实验2.程序设计(1)下面的代码实现了一个RTC的年月日、时分秒读出的功能。voidRTC_init(){ RTCCON=0x1; //EnablesRTCcontrol RTC.BCDSEC=0x11; RTC.BCDMIN=0x11; RTC.BCDHOUR=0x11; RTC.BCDDAY=0x11; RTC.BCDWEEK=0x11; RTC.BCDMON=0x11; RTC.BCDYEAR=0x11; RTCCON=0x0; //DisablesRTCcontrol}/*-------------------------MAINFUNCTION------------------------------*/intmain(void){ GPX2.CON=0x1<<28; uart_init(); RTC_init(); printf("\n******RTC*******\n"); while(1) { //Turnon GPX2.DAT=GPX2.DAT|0x1<<7; mydelay_ms(500); printf("year20%x:month%x:date%x:day%x",RTC.BCDYEAR,RTC.BCDMON,RTC.BCDDAY,RTC.BCDWEEK); printf("hour%x:min%x:sec%x\n",RTC.BCDHOUR,RTC.BCDMIN,RTC.BCDSEC); //Turnoff GPX2.DAT=GPX2.DAT&~(0x1<<7); mydelay_ms(500); } return0;}388.4
RTC应用实例8.4.2
RTC定时器实验2.程序设计(2)下面的代码实现了一个20秒定时功能。
通过ALARM相关寄存器设置定时的规则,20秒后产生中断。在中断处理函数中打印出中断信息。RTC的“定时打铃”功能也是很常用的。voiddo_irq(void){ intirq_num; irq_num=(CPU0.ICCIAR&0x1FF); printf("\n*******RTC_ALARMinterrupt!!********\n"); RTCINTP|=0x2; //Endofinterrupt CPU0.ICCEOIR=(CPU0.ICCEOIR&~(0x1FF))|irq_num;}voidRTC_init(){ RTCCON=0x1; //EnablesRTCcontrol RTC.BCDSEC=0x11; RTC.BCDMIN=0x11; RTC.BCDHOUR=0x11; RTC.BCDDAY=0x11; RTC.BCDWEEK=0x11; RTC.BCDMON=0x11; RTC.BCDYEAR=0x11; RTCCON=0x0; //DisablesRTCcontrol}398.4
RTC应用实例8.4.2
RTC定时器实验2.程序设计(2)下面的代码实现了一个20秒定时功能。
通过ALARM相关寄存器设置定时的规则,20秒后产生中断。在中断处理函数中打印出中断信息。RTC的“定时打铃”功能也是很常用的。voidrtc_alarm_init(){ RTCALM.ALM=1;//Disablesalarmglobal,Enablessecondalarm RTCALM.SEC=0x20;//BCDvalueforalarmsecond,20'' RTCALM.ALM|=1<<6;//Enablesalarmglobal}/*-------------------------MAINFUNCTION------------------------------*/intmain(void){GPX2.CON=0x1<<28;uart_init();RTC_init();/*********************GICinterruptcontroller:*********************///EnablesthecorrespondinginterruptSPI44,RTC_ALARMICDISER.ICDISER2|=1<<12;//ICDISER2:spi32[bit0]~63[bit31],44-32=[bit12]CPU0.ICCICR|=0x1;//GlobalenableforsignalingofinterruptsCPU0.ICCPMR=0xFF;//Theprioritymasklevel.Priorityfilter.thresholdICDDCR=1;//Bit1:GICmonitor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026北京石景山初三二模物理试题及答案
- 建筑施工安全技术拆除工程管控要点
- 建筑工程施工技术交底管理方案
- 建筑防腐施工准备交底方案
- 2026无锡生命科学产业发展有限公司招聘1人备考题库带答案详解(黄金题型)
- 2026西北工业大学航海学院海洋智能感知与网络团队招聘3人笔试题库及完整答案详解【夺冠】
- 2026辽宁大连市瓦房店市公证处招聘合同制公证辅助人员2人笔试题库及完整答案详解
- 2026重庆垫江县砚台镇人民政府招聘政法社工1人参考题库及答案详解(典优)
- 2025年钦州市第三人民医院招聘卫生及其他专业技术人员考试真题
- 2026三下数学大单元备课课件
- 2026年陕西省中考数学卷试题真题及答案详解(精校打印版)
- 二手房买卖合同(无中介版)模板
- 2026年江西省中考道德与法治试卷(含答案)
- 眉山市乡科级领导干部政治理论水平考试测试题库单选1
- 2023年考研数学(二)真题(试卷+答案)
- 国家开放大学2023年7月期末统一试《11611预防医学概论(本)》试题及答案-开放本科
- 数据库系统原理智慧树知到课后章节答案2023年下山东财经大学
- YY/T 1437-2023医疗器械GB/T 42062应用指南
- GB/T 5338.1-2023系列1集装箱技术要求和试验方法第1部分:通用集装箱
- 2022年江苏苏州大学思想道德修养与法律基础综合测试题
- GB/T 18828-2022钟表潜水表
评论
0/150
提交评论