您的位置 首页 方案

测验ARM9的外部中止功用

/********************************************文件名称:EINT.c*实现功能:测试外部中断的操作*作者:jianqi*版本:1.0************

  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. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/264422.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部