嵌入式——看门狗
来源:互联网 发布:什么是网络协议 编辑:程序博客网 时间:2024/06/02 02:59
实验结果:按左键中断周期为2秒,led灯向左亮;按右键中断周期为3秒,led灯向右亮。超级终端上显示为按左键每两秒显示一次key0,按右键每三秒显示一次key1
#define rCPLDLEDADDR (*(volatile unsigned char*)0x21180000) // LED Address#define rCPLDIntControl (*(volatile unsigned char*)0x22600000)#define rCPLDIntStatus (*(volatile unsigned char*)0x22200000)void __irq int_int(void);void __irq watchdog_int(void);int flag=0;void __irq watchdog_int(void) //输出函数 输出key0 key1显示在超级终端上(key0每两秒出现一次,key1每三秒出现一次){ ClearPending(BIT_WDT);if(flag==0)uart_printf(" key0 ");elseuart_printf(" key1 ");}void __irq int_int(void) { unsigned char Status;Status = rCPLDIntStatus;Status = ~(Status & 0x6); if(Status & 0x2){flag=0;rWTDAT = 15624; // 将初值设为原来的二倍,周期加长,变成2秒 rWTCNT = 15624; rCPLDIntControl |= (1<<1);rCPLDIntControl &= ~(1<<1);}else if(Status & 0x4){flag=1;rWTDAT = 23436; // 将初值设为原来的三倍,周期加长,变成3秒 rWTCNT = 23436; rCPLDIntControl |= (1<<2);rCPLDIntControl &= ~(1<<2);}rEINTPEND=(1<<9); ClearPending(BIT_EINT8_23);}void int_init(void) { rSRCPND = rSRCPND; // Clear all interrupt rINTPND = rINTPND; // Clear all interrupt ClearPending(BIT_WDT);// clear interrupt pending bit rGPGCON |= (0xf<<0); rGPGCON &= (0xa<<0);rCPLDIntControl = 0xFF;rCPLDIntControl = 0xF9;rEINTPEND = 0xffffff;rSRCPND = BIT_EINT8_23;// Clear the previous pending statesrINTPND = BIT_EINT8_23; rEXTINT1 &= ~((0x7<<4)|(0x7<<0));rEXTINT1 |= ((0x2<<4)|(0x2<<0));rEINTMASK &= ~(3<<8);rINTMSK &= ~(BIT_EINT8_23);}void led_Z(void) //从右向左亮{int i,nOut;nOut = 0xFF;rCPLDLEDADDR = nOut & 0xFE;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFC; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF8; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF0; for(i = 0; i < 100000; i++);nOut = 0xF0;rCPLDLEDADDR = nOut | 0x01;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x03; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x07; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x0F; for(i = 0; i < 100000; i++);}void led_Y(void)//从左向右亮{int i,nOut;nOut = 0xFF;rCPLDLEDADDR = nOut & 0xF0;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xF8; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFC; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut & 0xFE; for(i = 0; i < 100000; i++);nOut = 0xF0;rCPLDLEDADDR = nOut | 0x0F;for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x07; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x03; for(i = 0; i < 100000; i++);rCPLDLEDADDR = nOut | 0x01; for(i = 0; i < 100000; i++);}void wt_init(void) //初始化看门狗,这里将所有的值都得到了,可直接在mian函数中调用{pISR_EINT8_23=(UINT32T)int_int; pISR_WDT = (unsigned)watchdog_int;rWTCON = ((PCLK/1000000-1)<<8)|(3<<3)|(1<<2);rWTDAT = 15624;rWTCNT = 15624;rWTCON |=(1<<5);rINTMOD &= ~(BIT_WDT);rINTMSK &= ~(BIT_WDT);}void int_test(void) //执行流水灯程序{uart_printf("\n External Interrupt Test Example\n");int_init();while(1){if(flag==0)led_Y();else if(flag==1)led_Z();}}#include "int_test.h"#include "sys_init.h"int main( ){sys_init(); // Initial s3c2410's Clock, Interrupt,Port and UART wt_init(); int_init();while(1){int_test();}}
阅读全文
0 0
- 嵌入式——看门狗
- STM32——看门狗
- WWDG—窗口看门狗
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
- 嵌入式Linux之我行——S3C2440上看门狗(Watchdog)驱动开发实例讲解
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
- 嵌入式系统中“看门狗”
- 嵌入式开发之看门狗
- STM32F4——独立看门狗与窗口看门狗
- 嵌入式系统中看门狗概述。。。
- 嵌入式系统中看门狗概述
- 嵌入式系统中看门狗概述。。。
- cortex_m3_stm32嵌入式学习笔记(七):独立看门狗&窗口看门狗
- ARM裸机——FS2410看门狗
- Exynos4412裸机开发 —— 看门狗定时器
- Exynos4412裸机开发 —— 看门狗定时器
- STM32自学笔记——看门狗
- 湖北民族学院oj 1691(贪心) 之 出租车费
- 直播改革:关闭10家平台监管3万主播
- Mysql 数据库信息查询
- SQL SERVER大话存储结构(5)
- CRAFT Objects from Images(2016)
- 嵌入式——看门狗
- 图像特征之LBP(OpenCV)
- 6月6日,每日20行。
- Java
- SQL SERVER的统计信息
- Java
- 在Java中一个静态方法能够将另一个静态方法作为参数吗?
- Linux系统文件I/O编程(一)---open()等基本函数
- 再会数据库