新手请教Mini2440 按键外部中断问题

[复制链接]
 楼主| gdmgb520 发表于 2014-3-11 22:19 | 显示全部楼层 |阅读模式
这个问题很基础,但是我看了手册和南哥的书,还是没能实现响应按键中断。请大家帮忙看看。
想把K5 和K6 设置为中断方式,使用的IO是GPG7 和GPG11,对应中断EINT15 EINT19.
我已经配置了IO口的模式为中断,触发方式为双边沿触发,也设置了中断屏蔽和外部中断屏蔽。
虽然贴代码很不好,但还是要贴下。
谢谢大家!! :L


  1. #define     ON      1
  2. #define     OFF     0
  3. #define     LED1_Pin    (1<<5)
  4. #define     LED2_Pin    (1<<6)
  5. #define     LED3_Pin    (1<<7)
  6. #define     LED4_Pin    (1<<8)
  7. #define     LED1(a)      (a==0)?(rGPBDAT |= LED1_Pin):(rGPBDAT &= ~LED1_Pin)
  8. #define     LED2(a)      (a==0)?(rGPBDAT |= LED2_Pin):(rGPBDAT &= ~LED2_Pin)
  9. #define     LED3(a)      (a==0)?(rGPBDAT |= LED3_Pin):(rGPBDAT &= ~LED3_Pin)
  10. #define     LED4(a)      (a==0)?(rGPBDAT |= LED4_Pin):(rGPBDAT &= ~LED4_Pin)

  11. #define                KEY1 (1<<0)
  12. #define                KEY2 (1<<3)
  13. #define                KEY3 (1<<5)
  14. #define                KEY4 (1<<6)
  15. #define                KEY5 (1<<7)
  16. #define                KEY6 (1<<11)

  17. void __irq IRQ_KEY(void)
  18. {
  19.         unsigned int Key = 0;
  20.   ClearPending(BIT_EINT8_23);
  21.   rEINTPEND = 0xFFFFFF;
  22.   rGPGCON &= ~((3<<14)|(3<<22));  //set gpg7 11 to input

  23.         Key = rGPGDAT;
  24.         if (!(Key & KEY5))
  25.         {
  26.                 LED1(OFF);
  27.                 LED2(OFF);
  28.                 LED3(OFF);
  29.                 LED4(OFF);
  30.         }
  31.         if (!(Key & KEY6))
  32.         {
  33.                 LED1(ON);
  34.                 LED2(ON);
  35.                 LED3(ON);
  36.                 LED4(ON);
  37.         }
  38.   rGPGCON |=  ((2<<14)|(2<<22));  //set gpg7 11 to ENINT
  39. }

  40. void InitKey(void)
  41. {
  42.     //set pins 0 3 5 6 7 11 to input
  43.           rGPGCON &= ~((3<<0)|(3<<6)|(3<<10)|(3<<12)|(3<<14)|(3<<22));
  44.     //config the Key5(GPG7) and Key6(GPG11) pins to EINT mode
  45.     rGPGCON &= ~((3<<14)|(3<<22));
  46.     rGPGCON |=  ((2<<14)|(2<<22));

  47.     //config trigger mode
  48.     rEXTINT1 |= ((U32)7<<28);    //EINT15
  49.     rEXTINT1 = 0xFFFFFFFF;
  50.     rEXTINT1 |= ((U32)7<<28);    //EINT15
  51.     rEXTINT2 |= ((U32)7<<12);    //EINT19

  52.     pISR_EINT8_23 = (unsigned int)IRQ_KEY;

  53.     rEINTPEND |= (((U32)1<<15)|((U32)1<<19)); //clean pending //rEINTPEND = 0xFFFFFF;
  54.     ClearPending(BIT_EINT8_23);//rSRCPND |= 0xFFFFFF;

  55.     rPRIORITY = 0;
  56.     rINTMOD = 0;

  57.     //enable Key5(GPG7/EINT15) and Key6(GPG11/EINT19) interrupt(open marsk)
  58.     rEINTMASK &= ~(((U32)1<<15)|((U32)1<<19));
  59.     rINTMSK &= ~BIT_EINT8_23;
  60. }

  61. void scan_key(void)
  62. {
  63.         unsigned int Key = 0;
  64.         Key = rGPGDAT;
  65.         if (!(Key & KEY1))
  66.                 LED1(ON);
  67.         if (!(Key & KEY2))
  68.                 LED2(ON);
  69.         if (!(Key & KEY3))
  70.                 LED3(ON);
  71.         if (!(Key & KEY4))
  72.                 LED4(ON);

  73. }

  74. void delay(U32 tt)
  75. {
  76.    U32 i;
  77.    for(;tt>0;tt--)
  78.    {
  79.      for(i=0;i<10000;i++){}
  80.    }
  81. }

  82. int Main(int argc, char **argv)
  83. {
  84.           int i;
  85.           U8 key;
  86.           U32 mpll_val=0;
  87.           int data;

  88.           mpll_val = (92<<12)|(1<<4)|(1);

  89.           //init FCLK=400M, so change MPLL first
  90.           ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
  91.           ChangeClockDivider(key, 12);

  92.     MMU_DisableICache();
  93.     MMU_DisableDCache();

  94.     rGPBCON = 0x155555;
  95.     InitKey();

  96.     LED1(ON);LED2(ON);LED3(ON);LED4(ON);
  97.            while(1)
  98.            {
  99.                      scan_key();
  100.         delay(10);
  101.           }
  102.    return 0;
  103. }


 楼主| gdmgb520 发表于 2014-3-12 10:10 | 显示全部楼层
自己顶一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:了解新东西才知道自己的不足。 www.elecbench.com

67

主题

452

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:了解新东西才知道自己的不足。 www.elecbench.com

67

主题

452

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部