您的位置 首页 FPGA

S3C2440中止控制器

S3C2440A中的中断控制器接受来自60个中断源的请求。提供这些中断源的是内部外设,如DMA控制器、UART、IIC等等。在这些中断

S3C2440A 中的中止操控器承受来自 60 个中止源的恳求。供给这些中止源的是内部外设,如 DMA 操控器、

UART、IIC等等。在这些中止源中,UARTn、AC97 和EINTn中止关于中止操控器而言是“或”联系。
当从内部外设和外部中止恳求引脚收到多个中止恳求时,中止操控器在裁定过程后恳求ARM920T 内核的FIQ
或IRQ。

中止操控器所用到的专业寄存器,其具体的运用请看数据手册

SRCPND 中止标志(挂起)寄存器

写1时 对应位中止源有中止恳求,写0时,对应位中止源无中止恳求

INTPND 中止服务(挂起)寄存器

写1时 对应位中止源被呼应,写0时,对应位中止源未被呼应

。。。。。。。。。

现在首要说下外部中止(其寄存器运用说明在数据手册的输入输出端口章节)

S3C2440有24个外部中止,GPF0–GPF7对应于外部中止EINT0–EINT7,GPG0–GPG15对应于外部中止EINT8–EINT23,支撑上升沿、下降沿、高电平、低电平、双边缘触发。

EXTINTn(外部中止操控寄存器)

EINTFLTn(外部中止滤波寄存器)

EINTMASK(外部中止屏蔽寄存器)

EINTPEND(外部中止挂起寄存器)

设置外部中止的一般过程

1,挑选管脚功用为外部中止功用
2,设置触发方法
3,清中止源挂起寄存器,中止服务寄存器(可选,避免原有中止搅扰)
4,设置中止形式(IRQ、FRQ, 默以为IRQ)
5,设置中止优先级(可选,一般默许)
6,翻开外部中止屏蔽
7,设置中止服务进口程序

外部中止按键按一下进入中止程序对应LED灯闪一下

  1. #include”2440addr.h”
  2. #include”option.h”//这个文件中界说了中止服务程序的开始地址
  3. #defineLED1_ON(rGPBDAT&=~(1<<5))
  4. #defineLED1_OFF(rGPBDAT|=(1<<5))
  5. #defineLED2_ON(rGPBDAT&=~(1<<6))
  6. #defineLED2_OFF(rGPBDAT|=(1<<6))
  7. #defineLED3_ON(rGPBDAT&=~(1<<7))
  8. #defineLED3_OFF(rGPBDAT|=(1<<7))
  9. #defineLED4_ON(rGPBDAT&=~(1<<8))
  10. #defineLED4_OFF(rGPBDAT|=(1<<8))
  11. voidDelay(void)
  12. {
  13. inti;
  14. for(i=0;i<100000;i++);
  15. }
  16. void__irqIRQ_KEY1(void)
  17. {
  18. rSRCPND|=(1<<1);//铲除中止标志位
  19. rINTPND|=(1<<1);
  20. LED1_ON;
  21. Delay();
  22. LED1_OFF;
  23. }
  24. void__irqIRQ_KEY2(void)
  25. {
  26. rSRCPND|=(1<<4);//铲除中止标志位
  27. rINTPND|=(1<<4);
  28. rEINTPEND|=(1<<4);//铲除ENIT4的中止标志位
  29. LED2_ON;
  30. Delay();
  31. LED2_OFF;
  32. }
  33. void__irqIRQ_KEY3(void)
  34. {
  35. rSRCPND|=(1<<2);//铲除中止标志位
  36. rINTPND|=(1<<2);
  37. LED3_ON;
  38. Delay();
  39. LED3_OFF;
  40. }
  41. void__irqIRQ_KEY4(void)
  42. {
  43. rSRCPND|=1<<0;//铲除中止标志位
  44. rINTPND|=1<<0;
  45. LED4_ON;
  46. Delay();
  47. LED4_OFF;
  48. }
  49. voidEint_Init(void)
  50. {
  51. rGPFCON&=~(0x33f);
  52. rGPFCON|=0x22a;//设置GPF0、1、2、4为中止输入功用
  53. rEXTINT0=0x20222;//ENIT0、1、2、4下降沿触发中止
  54. rSRCPND=0x17;//铲除ENIT0、1、2、4的中止标志位
  55. rINTPND=0x17;//铲除ENIT0、1、2、4的中止标志位
  56. rEINTPEND=(1<<4);//铲除ENIT4的中止标志位
  57. rINTMOD=0x0;//一切中止为IRQ中止
  58. rINTMSK&=~0x17;//ENIT0、1、2、4中止服务有用(这儿便是使能外部中止)
  59. rEINTMASK&=~(1<<4);//EINT4中止服务有用
  60. pISR_EINT0=(unsigned)IRQ_KEY4;//设置各中止服务子程序地址
  61. pISR_EINT1=(unsigned)IRQ_KEY1;
  62. pISR_EINT2=(unsigned)IRQ_KEY3;
  63. pISR_EINT4_7=(unsigned)IRQ_KEY2;
  64. }
  65. voidMain(void)
  66. {
  67. rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//对GPBCON[10:17]清零
  68. rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//设置GPB5~8为输出
  69. rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//设置GPB5~8的上拉功用
  70. rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);//封闭LED
  71. Eint_Init();
  72. while(1);
  73. }

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部