新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 測試ARM9的外部中斷功能

測試ARM9的外部中斷功能

作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
  1. /*******************************************
  2. *文件名稱:EINT.c
  3. *實現(xiàn)功能:測試外部中斷的操作
  4. *作者:jianqi
  5. *版本:1.0
  6. **********************************************/
  7. #include"2440addr.h"http://包含2440相關(guān)寄存器的設(shè)置
  8. #include"def.h"
  9. #defineLED15
  10. #defineLED26
  11. #defineLED37
  12. #defineLED48
  13. #defineKEY11
  14. #defineKEY24
  15. #defineKEY32
  16. #defineKEY40
  17. #defineBit(x)(1<
  18. #defineOutput(x)(1<<2*x)//將對應(yīng)IO置為輸出
  19. #defineLED_On(x)rGPBDAT=~Bit(x)//點亮對應(yīng)LED
  20. /*******************************************
  21. *名稱:Key1_ISR
  22. *功能:key1控制LED1亮滅
  23. *入口參數(shù):無
  24. *出口參數(shù):無
  25. **********************************************/
  26. void__irqKey1_ISR(void)//EINT1中斷服務(wù)程序
  27. {
  28. intled;
  29. rSRCPND=rSRCPND|(0x01<<1);//清除中斷標志位
  30. rINTPND=rINTPND|(0x01<<1);//清除中斷標志位
  31. led=rGPBDAT&(0x1<
  32. if(led==0)
  33. {
  34. rGPBDAT=rGPBDAT|(0x1<
  35. }
  36. else
  37. {
  38. rGPBDAT=rGPBDAT&~(0x1<
  39. }
  40. }
  41. /*******************************************
  42. *名稱:Key2_ISR
  43. *功能:key2控制LED2亮滅
  44. *入口參數(shù):無
  45. *出口參數(shù):無
  46. **********************************************/
  47. void__irqKey2_ISR(void)//EINT4中斷服務(wù)程序
  48. {
  49. intled;
  50. rSRCPND=rSRCPND|(0x01<<4);//清除中斷標志位
  51. rINTPND=rINTPND|(0x01<<4);//清除中斷標志位
  52. if(rEINTPEND&(1<<4))
  53. {
  54. rEINTPEND=rEINTPEND|(0x1<<4);//清除中斷標志位
  55. led=rGPBDAT&(0x1<
  56. if(led==0)
  57. {
  58. rGPBDAT=rGPBDAT|(0x1<
  59. }
  60. else
  61. {
  62. rGPBDAT=rGPBDAT&~(0x1<
  63. }
  64. }
  65. }
  66. /*******************************************
  67. *名稱:Key3_ISR
  68. *功能:key3控制LED3亮滅
  69. *入口參數(shù):無
  70. *出口參數(shù):無
  71. **********************************************/
  72. void__irqKey3_ISR(void)//EINT2中斷服務(wù)程序
  73. {
  74. intled;
  75. rSRCPND=rSRCPND|(0x01<<2);//清除中斷標志位
  76. rINTPND=rINTPND|(0x01<<2);//清除中斷標志位
  77. led=rGPBDAT&(0x1<
  78. if(led==0)
  79. {
  80. rGPBDAT=rGPBDAT|(0x1<
  81. }
  82. else
  83. {
  84. rGPBDAT=rGPBDAT&~(0x1<
  85. }
  86. }
  87. /*******************************************
  88. *名稱:Key4_ISR
  89. *功能:key4控制LED4亮滅
  90. *入口參數(shù):無
  91. *出口參數(shù):無
  92. **********************************************/
  93. void__irqKey4_ISR(void)//EINT0中斷服務(wù)程序
  94. {
  95. intled;
  96. rSRCPND=rSRCPND|0x1;//清除中斷標志位
  97. rINTPND=rINTPND|0x1;//清除中斷標志位
  98. led=rGPBDAT&(0x1<
  99. if(led==0)
  100. {
  101. rGPBDAT=rGPBDAT|(0x1<
  102. }
  103. else
  104. {
  105. rGPBDAT=rGPBDAT&~(0x1<
  106. }
  107. }
  108. /*******************************************
  109. *名稱:Main
  110. *功能:初始化外部中斷相關(guān)寄存器
  111. *入口參數(shù):無
  112. *出口參數(shù):無
  113. **********************************************/
  114. voidMain(void)
  115. {
  116. rGPBCON=(1<<2*LED1)|(1<<2*LED2)|(1<<2*LED3)|(1<<2*LED4);//設(shè)置四個LED為輸出
  117. rGPBDAT=0xffff;//全部熄滅
  118. rGPFCON=0xaaaa;//0~7外部中斷
  119. rEXTINT0=0x20222;//下降沿中斷
  120. rEINTMASK=~(1<<4);//不屏蔽外部中斷0,1,2,4
  121. rEINTPEND=(1<<4);//0,1,2,4產(chǎn)生中斷
  122. rSRCPND=0x17;//外部中斷
  123. rINTPND=0x17;//外部中斷使能
  124. rINTMOD=0x00;//全部為IRQ中斷
  125. rINTMSK=~0x17;//不屏蔽外部中斷
  126. pISR_EINT0=(U32)Key4_ISR;
  127. pISR_EINT1=(U32)Key1_ISR;
  128. pISR_EINT2=(U32)Key3_ISR;
  129. pISR_EINT4_7=(U32)Key2_ISR;
  130. while(1)
  131. {
  132. ;
  133. }
  134. }


關(guān)鍵詞: ARM9外部中斷功

評論


技術(shù)專區(qū)

關(guān)閉