Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7565945
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

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;

        }

    }

}

 

阅读(5085) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~