2410_EINT.c
上传用户:mhstny
上传日期:2022-08-05
资源大小:793k
文件大小:3k
源码类别:

微处理器开发

开发平台:

Unix_Linux

  1. #include "2410lib.h"
  2. #include "2410addr.h"
  3. //使用K1按键触发EINT0,EINT0->GPF0
  4. //使用K3按键触发EINT2,EINT2->GPF2
  5. //使用K5按键触发EINT11,EINT11->GPG3
  6. //使用K7按键触发EINT19,EINT19->GPG11
  7. //KSCAN0->GPE11
  8. /***********  外部中断服务程序  ************/
  9. static void __irq Eint0_ISR(void)
  10. {
  11.     ClearPending(BIT_EINT0);
  12.     Uart_Printf("EINT0  is occurred.n");
  13. }
  14. static void __irq Eint2_ISR(void)
  15. {
  16.     ClearPending(BIT_EINT2);
  17.     Uart_Printf("EINT2 is occurred.n");
  18. }
  19. static void __irq Eint11_19_ISR(void)
  20. {
  21.     if(rEINTPEND & (1<<11))
  22.     {
  23.     Uart_Printf("EINT11 is occurred.n");
  24.     rEINTPEND=(1<<11);
  25.         ClearPending(BIT_EINT8_23);
  26.     }
  27.     else if(rEINTPEND & (1<<19))
  28.     {
  29.     Uart_Printf("EINT19 is occurred.n");
  30.     rEINTPEND=(1<<19);
  31.         ClearPending(BIT_EINT8_23);
  32.     }
  33.     else
  34.     {
  35.     Uart_Printf("others ENTs are occurredn");
  36.     rEINTPEND=0xffffff;
  37.         ClearPending(BIT_EINT8_23);
  38.     }
  39. }
  40. /***********  外部中断初始化  ************/
  41. void Eint_Init(void)
  42. {
  43.     //设置GPE11为输出0
  44. rGPECON = (rGPECON|(3<<22)) & ~(2<<22);
  45. rGPEUP |= (1<<11);
  46. rGPEDAT &= ~(1<<11);
  47.     rGPFCON = rGPFCON & ~(3)|(1<<1);   //GPF0设置为EINT0
  48.     rGPFCON = rGPFCON & ~(3<<4)|(1<<5);   //GPF2设置为EINT2
  49.     rGPGCON = rGPGCON & ~(3<<6)|(1<<7);   //GPG3设置为EINT11
  50.     rGPGCON = rGPGCON & ~(3<<22)|(1<<23); //GPG11设置为EINT19
  51.      
  52.     rGPFUP|=(1<<0);    //disable GPF0 pull up
  53.     rGPFUP|=(1<<2);    //disable GPF2 pull up
  54.     rGPGUP|=(1<<3);   //disable GPG3 pull up  
  55. rGPGUP|=(1<<11);   //disable GPG11 pull up
  56. rEXTINT0 = (rEXTINT0 & ~(7<<0))|(2<<0);     //EINT0 ->falling edge triggered
  57. rEXTINT0 = (rEXTINT0 & ~(7<<8))|(2<<8);     //EINT2 ->falling edge triggered
  58. rEXTINT1 = (rEXTINT1 & ~(7<<12))|(0x2<<12); //EINT11->falling edge triggered
  59. rEXTINT2 = (rEXTINT2 & ~(7<<12))|(0x2<<12); //EINT19->falling edge triggered
  60.    
  61.     pISR_EINT0 = (unsigned)Eint0_ISR;
  62.     pISR_EINT2 = (unsigned)Eint2_ISR;
  63.     pISR_EINT8_23 = (unsigned)Eint11_19_ISR;
  64. }
  65. /***********  开外部中断  ************/
  66. void Enable_Eint(void)
  67. {
  68.     rEINTPEND = 0xffffff; //to clear the previous pending states
  69.     rSRCPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
  70.     rINTPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
  71.     
  72.     rEINTMASK=~( (1<<11)|(1<<19) );
  73.     rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23); 
  74. }
  75. int xmain()
  76. {
  77.              
  78.     ChangeClockDivider(1,1);
  79.     ChangeMPllValue(0xa1,0x3,0x1);   
  80.     Port_Init();
  81.     Uart_Select(0);
  82.     Uart_Init(0,115200);
  83.      
  84.     Eint_Init();   
  85.     Enable_Eint();
  86.     while(1)
  87.     {      //等待中断,死循环
  88.         Uart_Printf("the main is runningn");
  89.         Delay(5000);     
  90.     }
  91. }