分类: 嵌入式
2011-07-11 17:32:29
//======================================================================
// 工程名称: KEY_EINT
// 功能描述: 用外部中断4-7(4个按键),控制四个LED的亮灭
// 采用下降沿触发
// IDE环境: ADS v1.2
// 涉及的库: 无
// 组成文件: main.c
// 硬件连接:
// 维护记录: 2009-9-22 V1.0
//======================================================================
#include "2440addr.h"
#include "2440lib.h"
#define LED1ON 0xFE
#define LED2ON 0xFD
#define LED3ON 0xFB
#define LED4ON 0xF7
#define LEDOFF 0xFF
/*
* 工程名称:
* 功能描述: 用外部中断4-7(4个按键),控制四个LED的亮灭
* 采用下降沿触发
* IDE环境: TX2440A ADS v1.2
* 维护记录: Lzy 2009-9-22 V1.0
*/
void __irq EintHandler(void); //中断入口函数声明
/*
* 函数名称: void init_port(void)
* 功能描述: 初始化引脚
* 硬件连接: KEY1 -- GPF4
KEY2 -- GPF5
KEY3 -- GPF6
KEY4 -- GPF7
*/
void init_port(void)
{
rGPFCON |= 0xaa55; //GPF0--GPF3设置为output,GPF4-7设置为EINT4-7
rGPFDAT |= 0xf; //初始化引脚数据
}
/*
* 函数名称: void init_irq(void)
* 功能描述: 初始化中断
*/
void init_irq(void)
{
rEXTINT0 |= ((2<<16) | (2 << 20) | (2 << 24) | (2 << 28)); //设置外部中断4_7下降沿触发
rEINTPEND |= 0xf0; //清除外部中断
rEINTMASK &= ~(0xf0); //使能外部中断
pISR_EINT4_7=(unsigned)EintHandler; //外部中断4_7中断服务子程序入口地址
EnableIrq(BIT_EINT4_7); //开启中断
}
int Main(void)
{
memcpy((unsigned char *)0x0,(unsigned char *)0x30000000,0x1000);
/*初始化引脚*/
init_port();
/*初始化中断 */
init_irq();
while(1);
}
/*
* 延时
*/
delay()
{
unsigned int i, j;
for(i = 0xfff; i>0; i--)
for(j = 0xff; j > 0; j--)
;
}
//====================================================
// 语法格式: void __irq Eint0Handler(void)
// 功能描述: 点亮或者熄灭LED5-8 中断函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void __irq EintHandler(void)
{
if(rINTPND==BIT_EINT4_7)
{
ClearPending(BIT_EINT4_7); //清除中断
if(rEINTPEND&(1<<4))
{
rGPFDAT = LED1ON;
delay();
rGPFDAT = LEDOFF;
rEINTPEND |= 1<< 4; //这个也要清,
}
if(rEINTPEND&(1<<5))
{
rGPFDAT = LED2ON;
delay();
rGPFDAT = LEDOFF;
rEINTPEND |= 1<< 5;
}
if(rEINTPEND&(1<<6))
{
rGPFDAT = LED3ON;
delay();
rGPFDAT = LEDOFF;
rEINTPEND |= 1<< 6;
}
if(rEINTPEND&(1<<7))
{
rGPFDAT = LED4ON;
delay();
rGPFDAT = LEDOFF;
rEINTPEND |= 1<< 7;
}
}
}