一、实验内容
1.编程实现看门狗功能,观察看门狗作用;
2.编程实现看门狗喂狗。
二、实验代码
void Main(void)
{
int old_index ;
旋挖钻机工法网
st_date m_date;
/* 配置系统时钟 */
ChangeClockDivider(1,1); // 1:2:4 跳跳鞋
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
/* 中断初始化 */
Isr_Init();
/* 初始化端口 */
Port_Init();
/* 初始化串口 */
Uart_Init(0,115200);
Uart_Select(0);
/* 打印提示信息 */
PRINTF("\n---看门狗测试程序---\n");
PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\n");
exosip PRINTF("\n看门狗测试开始\n");
/* 采用BCD编码,如2004年需要设置的值为0x2004 */
ar = 0x2000+0x04 ;
= 0x03 ;
m_date.day = 0x02 ;
m_date.week_day = 0x02 ;
m_date.hour = 0x15 ;
m_date.min = 0x40 ;
m_date.sec = 0x00 ;
rtc_set_date(&m_date);
m_date.sec = 0x05 ;
/* 设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟告警 */
rtc_alarm_set(&m_date, 0x41);
rtc_tick_init(127);
/* 打开看门狗复位功能 */
watchdog_init();
old_index = led_index;
PRINTF("请在2秒内喂狗,否则系统将在约2秒后复位\n\n");
while(1)
{
if(old_index != led_index) /* 每隔一秒更新一次数据 */
{
rtc_get_date(&m_date);
old_index = led_index;
PRINTF( /* 时钟数据为BCD码格式,以16进制显示 */
"\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);
}uicc
加工助剂acr };
}
/*****************************************************************************
// Function name : rtc_tick_isr
// Description : TICK中断处理程序,程序中设置每秒钟引发一次中断
// 为避免看门狗复位在此处喂狗
// Return type : int
// Argument : void
*****************************************************************************/
void rtc_tick_isr(void)
调料盒{
Irq_Clear(IRQ_TICK); /* 清除TICK中断 */
*((U8*) 0x10000006) = 0x00;
*(unsigned char*)0x10000004 = seg7table[led_index%10];
led_index++;
/* 喂狗 */
rWTCNT = 8448 * 2;
}
三、实验结果及分析
1.运行编译完后,完成”connect”,”download”,”go”后,超级终端上出现如图1-1所示的界面。
图1-1
2.改变时间,即喂狗的时间,得到如图1-2所示的界面。
四、实验体会
本实验是关于看门狗的实验编程的,看门狗的作用是微控制器受到干扰后进入错误状态后,使系统在一定时间间隔内复位。通过实验,我了解到,看门狗是保证系统长期、可靠和稳定运行的有效措施。而实验中涉及到了定时器控制寄存器WTCON、定时器数据寄存器WTDAT、定时器/计数器寄存器WTCNT以及前面所学的实时时钟的知识。看门狗定时器
数据寄存器(WTDAT)是用于指定超时时间,而看门狗计数寄存器(WTCNT)则是包含看门狗定时器工作的时候计数器的当前计数值。由于看门狗是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗的功能,只需要我们对看门狗的寄存器组进行操作。即对看门狗的控制寄存器(WTCON)、看门狗数据寄存器(WTDAT)、看门狗计数寄存器(WTCNT)的操作。本次实验学到了很多,实践永远是理论的试金石,我们总能在实践中学会各种各样的知识。