新闻中心

EEPW首页>嵌入式系统>设计应用> 测试ARM9的外部中断功能

测试ARM9的外部中断功能

作者: 时间:2016-11-20 来源:网络 收藏
  1. /*******************************************
  2. *文件名称:EINT.c
  3. *实现功能:测试外部中断的操作
  4. *作者:jianqi
  5. *版本:1.0
  6. **********************************************/
  7. #include"2440addr.h"//包含2440相关寄存器的设置
  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)//将对应IO置为输出
  19. #defineLED_On(x)rGPBDAT=~Bit(x)//点亮对应LED
  20. /*******************************************
  21. *名称:Key1_ISR
  22. *功能:key1控制LED1亮灭
  23. *入口参数:无
  24. *出口参数:无
  25. **********************************************/
  26. void__irqKey1_ISR(void)//EINT1中断服务程序
  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. *入口参数:无
  45. *出口参数:无
  46. **********************************************/
  47. void__irqKey2_ISR(void)//EINT4中断服务程序
  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. *入口参数:无
  70. *出口参数:无
  71. **********************************************/
  72. void__irqKey3_ISR(void)//EINT2中断服务程序
  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. *入口参数:无
  91. *出口参数:无
  92. **********************************************/
  93. void__irqKey4_ISR(void)//EINT0中断服务程序
  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. *功能:初始化外部中断相关寄存器
  111. *入口参数:无
  112. *出口参数:无
  113. **********************************************/
  114. voidMain(void)
  115. {
  116. rGPBCON=(1<<2*LED1)|(1<<2*LED2)|(1<<2*LED3)|(1<<2*LED4);//设置四个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产生中断
  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. }


关键词:ARM9外部中断功

评论


技术专区

关闭