单片机实验看门狗实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八 看门狗实验
/***************************************************************************** // 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秒) *****************************************************************************/
实验八 看门狗实验
while(1) { if(old_index != led_index) */ { rtc_get_date(&m_date); old_index = led_index; 16进制显示 */ PRINTF( /* 每隔一秒更新一次数据
实验八 看门狗实验
/* 采用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");
实验八 看门狗实验
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 Main(void) { int old_index ; st_date m_date; /* 配置系统时钟 */ ChangeClockDivider(2,1); U32 mpll_val = 0 ; mpll_val = (92<<12)|(1<<4)|(1); ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
实验八 看门狗实验
*********************************************************************/ 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; }
实验八 看门狗实验
一、实验目的 1、了解WATCHDOG的作用; 2、掌握WATCHDOG定时器的使用方法。 二、实验仪器 JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE 集成开发环境、串口连接线、PC机。
源自文库
实验八 看门狗实验
三、实验原理 省略。
实验八 看门狗实验
(0X3 <<3) /* 1/128
((PCLK/1000000-1) <<8)
/******************************************************************** // Function name : watchdog_init // Description : 看门狗初始化 // Return type : void // Argument :
/* 中断初始化 */ 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");
#define WDT_ENABLE #define WDT_INT_ENABLE #define WDT_RST_ENABLE
#define WDT_CLK_SEL */ #define WDT_PRE_SCALER /* 49 */
(0x01<<5) (0x01<<2) (0x01<<0)
/* 时钟数据为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 *****************************************************************************/
实验八 看门狗实验
/* 全局变量 */ 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")));;
实验八 看门狗实验
void rtc_tick_init( char tick ) { Irq_Request(IRQ_TICK, rtc_tick_isr);
rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0] rTICNT = (tick&0x7f)|0x80; /*TICK 中断使能,周期为(1+tick)/128秒 */ Irq_Enable(IRQ_TICK); } /***************************************************************************** // Function name : rtc_alarm_set // Description : 设置S3C2410的告警时间以及方式 // Return type : void // Argument : p_date, 告警的时间 // mode, 告警模式 *****************************************************************************/ void rtc_alarm_set(st_date* p_date, unsigned char mode) { Irq_Request(IRQ_RTC, rtc_int_isr); rRTCCON = 0x01;
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;
四、参考程序 /* 包含文件 */ #include "def.h" #include "2410lib.h" #include "option.h" #include "2410addr.h" #include "interrupt.h"