内容发布更新时间 : 2025/1/9 17:01:08星期一 下面是文章的全部内容请认真阅读。
课程结业实验报告
课程名称: 嵌入式系统设计
报告题目: 专业班级:
学生姓名:指导教师: 基于ARM的看门狗程序设计
通信1601班 学号:
2017 年 6 月 20 日
看门狗实验
1 实验目的
(1) 了解WATCHDOG的作用;
(2) 掌握WATCHDOG定时器的使用方法。
2 实验内容
(1) 编程添加看门狗功能,观察看门狗作用; (2) 编程实现看门狗喂狗。
3 实验基础知识
(1) 看门狗功能:嵌入式系统运行时受外部干扰或系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。为防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗电路(WATCHDOG)。看门狗的作用是当系统跑飞而进入死循环时,恢复系统的运行。
(2) 看门狗工作原理:设本系统程序完整运转一周的时间是Tp,看门狗定是周期是Ti,Ti>Tp, 在程序运行一周后就修改定时器的计数值,只要程序正常运行,定时器就不会溢出,若由于干扰等原因是系统不能在Tp时刻修改定时器的数值,定时器将在Ti 时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控的作用
在一个完整的嵌入式系统中或单片机小系统中通常都有看门狗定时器,且一般集成在处理器芯片中,看门狗实际上就是一个定时器,知识它在期满后将自动引起系统复位。 (3) 看门狗定时器计数值:
输入到计数器的时钟周期 t_watchdog =1/(PCLK/Prescaler value + 1)/ Division_factor) 看门狗的定时周期 T = WTCNT * t_watchdog (4)看门狗定时器寄存器 控制寄存器(WTCON)
数据寄存器(WTDAT) 计数器寄存器(WTCNT)
4 实验步骤
1
(1) 新建一个工程watchdog,添加相应的文件,并修改watchdog的工程设置;创建watchdog.c并加入到工程watchdog中,部分参考代码如下:
/* functions */
void rtc_tick_isr(void) __attribute__ ((interrupt(\void rtc_int_isr(void) __attribute__ ((interrupt(\//设置寄存器参数 #define WDT_ENABLE
(0x01<<5)
(0x01<<2) (0x01<<0)
/* 1/128 */
/* 49
#define WDT_INT_ENABLE #define WDT_RST_ENABLE #define WDT_CLK_SEL
(0X3 <<3)
#define WDT_PRE_SCALER void watchdog_init() {
rWTCNT = 8448 * 2;
((PCLK/1000000-1) <<8)
/* 设置看门狗初始值 */
rWTCON = WDT_ENABLE | WDT_RST_ENABLE | WDT_CLK_SEL | WDT_PRE_SCALER;
/* 打开看门狗 */ }
void rtc_set_date(st_date* p_date) {
rRTCCON = 0x01;
rBCDYEAR = p_date->year; rBCDMON = p_date->mon; rBCDDAY = p_date->day; rBCDDATE = p_date->week_day; rBCDHOUR = p_date->hour; rBCDMIN = p_date->min; rBCDSEC = p_date->sec; rRTCCON = 0x00; }
void rtc_get_date(st_date* p_date)
2