广州大学学生实验报告
开课学院及实验室:机电学院 电子楼618 2014年 5 月 16 日
学院 机械与电气工年级、专程学院 业、班 电子111班 姓名 陈述创 学号 1107400113 实验课程名称 嵌入式实验 成绩 实验项目名称 实验5 看门狗实验 指导老师 一、实验项目 1、利用watchdog产生定时中断,起定时器作用; 2、编程实现喂狗、看门狗和重启系统。 二、实验类型 验证性。 三、计划学时 2学时。 四、实验目的 1、了解watchdog的作用; 2、掌握S3C2410A的watchdog定时器的使用方法。 五、实验设备与平台 1、实验设备:计算机(PC),ARM9-2410EP增强型嵌入式教学实验系统,Multi-ICE仿真器。 2、平台:Windows、ADS1.2。 六、涉及的知识点 定时器的使用方法,看门狗的作用以及使用方法。 七、实验相关知识 看门狗功能简述: 嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。为了防止这一现象的发生,在对系统稳定性要求较高的场合往往要加入看门狗(watchdog)电路。看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。 看门狗的工作原理: 设系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti。在程序正常运行时,Ti>Tp,看门狗的定时器就不会溢出;若由于干扰等原因使系统不能在Tp时刻内修改看门狗定时器的记数器的记数 值,定时器将在Ti时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控的作用。 S3C2410A的看门狗简介: S3C2410A的看门狗定时器有两个功能: 1、 作为常规时钟,并且可以产生中断; 2、 作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128个时钟周期的复位信号。 主要特性如下: 通用的中断方式的16bit定时器; 当计数器减到0(发生溢出),产生128个PCLK周期的复位信号。 下图为看门狗的电路示意图,看门狗时钟使用PCLK作为它的时钟源,PCLK通过预分频产生适合的看门狗时钟。 图5.1 Watchdog定时器框图 八、实验内容与步骤 1.实验说明 由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需对看门狗的寄存器组进行操作。即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。 设计流程如下: *设置看门狗中断操作,包括全局中断和看门狗中断的使能,看门狗中断向量的定义。 *对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值、中断使能和复位使能等。 *对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置。 *启动看门狗定时器。 2.看门狗复位功能实验步骤 (1)创建一个工程 SHY5_WATCHDOG_1; (2)将“实验程序文档/Include/”目录下的8个头文件 2410lib.h 2410slib.h 2410addr.h def.h 2410addr.inc Memcfg.inc Option.inc Option.h 拷贝到本工程的目录里。 (3)将下面5个头文件 2410lib.h 2410slib.h 2410addr.h def.h Option.h 添加到本工程。 (4)将“实验程序文档/Source/”目录下的3个原文件 2410init.s 2410lib.c 2410slib.s 拷贝到本工程的目录里,并添加到本工程。 (5)如实验1的图1.9~图1.12,修改本工程的工程设置; (6)创建Main.c文件,并加入到本工程中; (7)为 Main.c 文件添加如下的语句; #include \#include \#include \void watchdog_reset_test(void); void Main(void) { ChangeClockDivider(1,1); ; // 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz Uart_Init(0,115200); Uart_Select(0); Uart_Printf(\看门狗复位功能测试\\n\ watchdog_reset_test(); while(1); } void watchdog_reset_test(void) { rWTCON=((100<<8)|(3<<3)); rWTDAT=15000; rWTCNT=15000; rWTCON &= ~(3<<1); rWTCON|=((1<<5)|(1<<0)); while(1) } (8)编译连接SHY5_WATCHDOG_1工程; (9)运行程序。运行一段时间后PC的AXD窗口会出现如图5.2的运行结果 3.看门狗定时器功能实验步骤 (1)创建一个工程 SHY5_WATCHDOG_2; (2)将“实验程序文档/Include/”目录下的8个头文件 2410lib.h 2410slib.h def.h 2410addr.inc 2410addr.h Memcfg.inc Option.inc Option.h 拷贝到本工程的目录里。 (3)将下面5个头文件 2410lib.h 2410slib.h 2410addr.h def.h Option.h 添加到本工程。 (4)将“实验程序文档/Source/”目录下的3个原文件 2410init.s 2410lib.c 2410slib.s 拷贝到本工程的目录里,并添加到本工程。 (5)如实验1的图1.9~图1.12,修改本工程的工程设置; (6)创建Main.c文件,并加入到本工程中; (7)为 Main.c 文件添加如下的语句: #include \#include \#include \void watchdog_test(void); void __irq watchdog_int(void); int f_ucSencondNo=0; //复位次数 void watchdog_reset_test(void); void Main(void) { ChangeClockDivider(1,1); // 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz Uart_Init(0,115200); Uart_Select(0); Uart_Printf(\定时器测试\\n\ watchdog_test(); while(1); } void watchdog_test(void) { ClearPending(BIT_WDT); pISR_WDT=(unsigned)watchdog_int; //建立WatchDog中断 rWTCON=((100<<8)|(3<<3)); rWTDAT=15000; rWTCNT=15000; rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt rWTCON|=(1<<5)|(1<<2); //每4S watchdog 一次中断。 rINTMOD&=0xFFFFFDFF; rINTMSK &= ~(BIT_WDT); while(f_ucSencondNo<11); } void __irq watchdog_int(void) { ClearPending(BIT_WDT); f_ucSencondNo++; if(f_ucSencondNo<5) Uart_Printf(\ else { rINTMSK |= (BIT_WDT); Uart_Printf(\ } } (8)编译连接SHY5_WATCHDOG_2工程; (9)将计算机的串口接到开发板的UART0 上; (10)运行超级终端,选择正确的串口号,并将串口设置为:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位数(1),无流控,打开串口; (11)运行程序,在超级终端中看到如图5.3的结果 九、实验结果及结果分析 1. 看门狗复位功能实验 结果分析:看门狗使能并且看门狗定时器溢出时复位发生。 2.看门狗定时器功能实验 结果分析: 1.作为常规时钟,并且可以产生中断; 2.作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128个时钟周期的复位信号。

