单片机实验看门狗实验
实验八 看门狗实验
/***************************************************************************** // Function name : rtc_get_date // Description : 获取实时时钟当前时间、日期 // Return type : void // Argument : p_date, 返回日期的指针 *****************************************************************************/ void rtc_get_date(st_date* p_date) { rRTCCON = 0x01; p_date->year = rBCDYEAR ; p_date->mon = rBCDMON ; p_date->day = rBCDDAY ; p_date->week_day= rBCDDATE ; p_date->hour = rBCDHOUR ; p_date->min = rBCDMIN ; p_date->sec = rBCDSEC ; rRTCCON = 0x00; } /***************************************************************************** // Function name : rtc_tick_init // Description : 初始化S3C2410的TICK定时器 // Return type : void // Argument : tick, 设置的TICK频率(时钟滴答的周期为 (1+tick)/128秒) *****************************************************************************/
(0X3 <<3) /* 1/128
((PCLK/1000000-1) <<8)
/******************************************************************** // Function name : watchdog_init // Description : 看门狗初始化 // Return type : void // Argument :
extern unsigned char seg7table[]; /* 表示日期、时间的数据结构 */ typedef struct ST_DATE { short year; // 年 char mon; // 月 char day; // 日 char week_day; // 星期 char hour; // 时 char min; // 分 char sec; // 秒 } st_date;
/* 时钟数据为BCD码格式,以
"\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec); } }; } /***************************************************************************** // Function name : rtc_tick_isr // Description : TICK中断处理程序,程序中设置每秒钟引发一次中断 // 为避免看门狗复位在此处喂狗 // Return type : int // Argument : void *****************************************************************************/
实验八 看门狗实验
rALMYEAR = p_date->year; rALMMON = p_date->mon; rALMDATE = p_date->day; rALMHOUR = p_date->hour; rALMMIN = p_date->min; rALMSEC = p_date->sec; rRTCALM = mode; rRTCCON = 0x00; Irq_Enable(IRQ_RTC); } /***************************************************************************** // Function name : Main // Description : JXARM9-2410 看门狗实验主程序 // 完成功能: // 在实时时钟实验的基础上添加看门狗功能,并在时钟滴答 // 中断中实现喂狗处理. // // Return type : void // Argument : void *****************************************************************************/
实验八 看门狗实验
*********************************************************************/ void watchdog_init() { rWTCNT = 8448 * 2; /* 设置看门狗初始值 */ rWTCON = WDT_ENABLE | WDT_RST_ENABLE | WDT_CLK_SEL | WDT_PRE_SCALER; /* 打开看门狗 */ /* 打开看门狗 */ } /***************************************************************************** // Function name : rtc_set_date // Description : 修改实时时钟当前时间、日期 // Return type : void // Argument : p_date, 待设置的日期 *****************************************************************************/ 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; }
实验八 看门狗实验
/* 全局变量 */ int led_index = 0; int ext0_count = 0; /* functions */ void rtc_tick_isr(void) __attribute__ ((interrupt("IRQ")));; void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;
/* 中断初始化 */ Isr_Init(); /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */ PRINTF("\n---看门狗测试程序---\n"); PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序 (115200, 8, N, 1)\n"); PRINTF("\n看门狗测试开始\n");
实验八 看门狗实验
/* 采用BCD编码,如2004年需要设置的值为0x2004 */ ********* /* 修改当前日期和时间 */ rtc_set_date(&m_date); m_date.sec = 0x05 ;
/* 设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟告警 */ *********** rtc_tick_init(127); // TODO /* 打开看门狗复位功能 */ 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; 16进制显示 */ PRINTF( /* 每隔一秒更新一次数据
实验八 看门狗实验
一、实验目的 1、了解WATCHDOG的作用; 2、掌握WATCHDOG定时器的使用方法。 二、实验仪器 JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE 集成开发环境、串口连接线、PC机。
实验八 看门狗实验
三、实验原理 省略。
实验八 看门狗实验
#define WDT_ENABLE #define WDT_INT_ENABLE #define WDT_RST_ENABLE
#define WDT_CLK_SEL */ #define WDT_PRE_SCALER /* 49 */