天嵌 ARM开发社区

 找回密码
 注册
查看: 2249|回复: 1

我这个修改的按键代码怎么没触发中断事件呢

[复制链接]
gavin_li 发表于 2009-6-27 16:36:17 | 显示全部楼层 |阅读模式
#include "2410addr.h"

#define LED1  (1<<5)                // rGPB[5] =1 ;
#define LED2  (1<<6)                // rGPB[6] =1 ;
#define LED3  (1<<7)                // rGPB[7] =1 ;
#define LED4  (1<<8)                // rGPB[8] =1 ;

#define KEY1  (1<<1)                // rGPF[1] =1 ;
#define KEY2  (1<<4)                // rGPF[4] =1 ;
#define KEY3  (1<<2)                // rGPF[2] =1 ;
#define KEY4  (1<<0)                // rGPF[0] =1 ;

/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示
参    数:无                       
*******************************************************************************************/
void __irq IRQ_KEY(void)
{
   ClearPending(BIT_EINT4_7);
   rEINTPEND = 0xffffff;
   
   rGPFUP = 0xf800;                                        //  KEY [7:0] => PU En
   rGPFCON=0xfcc0;                                    //KEY[7:0] => INPUT;
   
   if ( !(rGPFDAT & KEY1) )
       rGPBDAT=rGPBDAT & ~LED1;
      
    if ( !(rGPFDAT & KEY2) )
       rGPBDAT=rGPBDAT & ~LED2;
   
    if ( !(rGPFDAT & KEY3) )
       rGPBDAT=rGPBDAT & ~LED3;
   
    if ( !(rGPFDAT & KEY4) )
       rGPBDAT=rGPBDAT & ~LED4;
      
     rGPFCON=0xfcc0;
}

/*******************************************************************************************
函数原形:void __irq IRQ_KEY(void)
功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式
参    数:无                       
*******************************************************************************************/
void EINT_Init(void)
{
    //rGPFCON |= ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 9));
    rGPFCON = rGPFCON & (~((3<<4)|(3<<0)|(3<<8)|(3<<2))) | ((2<<4)|(2<<0)|(2<<8)|(2<<2)) ;                //GPF4,2,1,0 set EINT   
    //rGPFCON[9:8],[5:4],[3:2],[1:0]=10b,即GPF[4,2,1,0]为外部中断输入功能
   
    rEXTINT0 &= ~(7|(7<<4)|(7<<8)|(7<<16));       
        rEXTINT0 |= (0|(0<<4)|(0<<8)|(0<<16));                //set eint0,1,2,4 falling edge int
               
    //pISR_EINT8_23 = (unsigned int)IRQ_KEY;
    rPRIORITY = 0x00000000;            // 使用默认的固定的优先级
        //ClearPending(BIT_EINT8_23); // 清除中断标志位
    rEINTPEND = 0xffffff;
    //rINTMOD = 0x00000000;            // 所有中断均为IRQ中断
        //rINTMSK &= (~BIT_EINT8_23); // 使能外部中断8_23
        //rEINTMASK &= (~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 4)));//使用能EINT0,EINT1,EINT2,EINT4
        rEINTPEND |= (1<<4);                                                        //clear eint 4
        rEINTMASK &= ~(1<<4);                                                //enable eint 4
        ClearPending(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
        pISR_EINT0 = pISR_EINT1 = pISR_EINT2 = pISR_EINT4_7 = (unsigned int)IRQ_KEY;
        EnableIrq(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
}

void Main(void){
    rGPBCON = 0x015550;
    rGPBUP  = 0x7ff;   
   
    rGPBDAT = 0xfff;
   
    rGPFCON = 0x55aa;
    rGPFUP  = 0xff;
   
    rINTMOD=0x0;          // All=IRQ mode
        rINTMSK=BIT_ALLMSK;          // All interrupt is masked.
   
    EINT_Init();
    while (1);
}
TQ_guoxixiao 发表于 2012-5-10 10:54:26 | 显示全部楼层
参考我们的按键代码,先
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-8-3 19:02 , Processed in 2.037252 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表