Eint.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:3k
源码类别:

uCOS

开发平台:

C/C++

  1. /*****************************************
  2.   NAME: eint.c
  3.   DESC: External interrupt test
  4.   HISTORY:
  5.   2001.04.03:purnnamu: draft ver 0.0
  6.   2003.05.xx:DonGo: modifed for 2440 ver 0.1
  7.  *****************************************/
  8. #include <string.h>
  9. #include "def.h"
  10. #include "option.h"
  11. #include "2440addr.h"
  12. #include "2440lib.h"
  13. #include "2440slib.h" 
  14. #include "eint.h"
  15. static void __irq Eint0Int(void)
  16. {
  17.     ClearPending(BIT_EINT0);
  18.     Uart_Printf("EINT0 interrupt is occurred.n");
  19. }
  20. static void __irq Eint2Int(void)
  21. {
  22.     ClearPending(BIT_EINT2);
  23.     Uart_Printf("EINT2 interrupt is occurred.n");
  24. }
  25. static void __irq Eint11_19(void)
  26. {
  27.     if(rEINTPEND==(1<<11))
  28.     {
  29. Uart_Printf("EINT11 interrupt is occurred.n");
  30. rEINTPEND=(1<<11);
  31.     }
  32.     else if(rEINTPEND==(1<<19))
  33.     {
  34. Uart_Printf("EINT19 interrupt is occurred.n");
  35. rEINTPEND=(1<<19);
  36.     }
  37.     else
  38.     {
  39. Uart_Printf("rEINTPEND=0x%xn",rEINTPEND);
  40. rEINTPEND=(1<<19)|(1<<11);
  41.     }
  42.     ClearPending(BIT_EINT8_23);
  43. }
  44. // SMDK2440 EINT S/W
  45. // EINT0/2/11/19
  46. void Test_Eint(void)
  47. {
  48.     int i;
  49.     int extintMode;
  50.     Uart_Printf("[External Interrupt Test through PF0/2/11/19]n");
  51.     Uart_Printf("1.L-LEVEL  2.H-LEVEL  3.F-EDGE  4.R-EDGE  5.B-EDGEn");
  52.     Uart_Printf("Select the external interrupt type.n");
  53.     extintMode=Uart_Getch();
  54.     //extintMode='3';
  55.     rGPFCON = (rGPFCON & 0xffcc)|(1<<5)|(1<<1); //PF0/2 = EINT0/2
  56.     rGPGCON = (rGPGCON & 0xff3fff3f)|(1<<23)|(1<<7); //PG3/11 = EINT11/19
  57.      
  58.     switch(extintMode)
  59.     {
  60.     case '1':
  61.      rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x0<<8 | 0x0<<0; //EINT0/2=low level triggered
  62. rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x0<<12; //EINT11=low level triggered
  63. rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x0<<12; //EINT19=low level triggered
  64.      break;
  65.     case '2':
  66.      rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x1<<8 | 0x1<<0; //EINT0/2=high level triggered
  67. rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x1<<12; //EINT11=high level triggered
  68. rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x1<<12; //EINT19=high level triggered
  69.      break;
  70.     case '3':
  71.      rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x2<<8 | 0x2<<0; //EINT0/2=falling edge triggered
  72. rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12; //EINT11=falling edge triggered
  73. rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x2<<12; //EINT19=falling edge triggered
  74.      break;
  75.     case '4':
  76.      rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x4<<8 | 0x4<<0; //EINT0/2=rising edge triggered
  77. rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x4<<12; //EINT11=rising edge triggered
  78. rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x4<<12; //EINT19=rising edge triggered
  79.       break;
  80.     case '5':
  81.      rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x6<<8 | 0x6<<0; //EINT0/2=both edge triggered
  82. rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x6<<12; //EINT11=both edge triggered
  83. rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x6<<12; //EINT19=both edge triggered
  84.      break;
  85.     default:
  86.      break;
  87.     }
  88.     Uart_Printf("Press the EINT0/2/11/19 buttons or Press any key to exit.n");
  89.     pISR_EINT0=(U32)Eint0Int;
  90.     pISR_EINT2=(U32)Eint2Int;
  91.     pISR_EINT8_23=(U32)Eint11_19;
  92.     rEINTPEND = 0xffffff;
  93.     rSRCPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23; //to clear the previous pending states
  94.     rINTPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
  95.     
  96.     rEINTMASK=~( (1<<11)|(1<<19) );
  97.     rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);
  98.     Uart_Getch();
  99.     
  100.     rEINTMASK=0xffffff;
  101.     rINTMSK=BIT_ALLMSK;
  102. }