久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440中斷控制器

S3C2440中斷控制器

作者: 時間:2016-11-21 來源:網絡 收藏
S3C2440A 中的中斷控制器接受來自 60 個中斷源的請求。提供這些中斷源的是內部外設,如 DMA 控制器、

UART、IIC等等。在這些中斷源中,UARTn、AC97 和EINTn中斷對于中斷控制器而言是“或”關系。
當從內部外設和外部中斷請求引腳收到多個中斷請求時,中斷控制器在仲裁步驟后請求ARM920T 內核的FIQ
或IRQ。

本文引用地址:http://cqxgywz.com/article/201611/319201.htm

中斷控制器所用到的專業寄存器,其詳細的使用請看數據手冊

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"http://這個文件中定義了中斷服務程序的起始地址
  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. }



關鍵詞: S3C2440中斷控制

評論


技術專區

關閉