新聞中心

S3C2440中斷控制器

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
S3C2440A 中的中斷控制器接受來(lái)自 60 個(gè)中斷源的請(qǐng)求。提供這些中斷源的是內(nèi)部外設(shè),如 DMA 控制器、

UART、IIC等等。在這些中斷源中,UARTn、AC97 和EINTn中斷對(duì)于中斷控制器而言是“或”關(guān)系。
當(dāng)從內(nèi)部外設(shè)和外部中斷請(qǐng)求引腳收到多個(gè)中斷請(qǐng)求時(shí),中斷控制器在仲裁步驟后請(qǐng)求ARM920T 內(nèi)核的FIQ
或IRQ。

本文引用地址:http://m.butianyuan.cn/article/201611/319201.htm

中斷控制器所用到的專業(yè)寄存器,其詳細(xì)的使用請(qǐng)看數(shù)據(jù)手冊(cè)

SRCPND 中斷標(biāo)志(掛起)寄存器

寫(xiě)1時(shí) 對(duì)應(yīng)位中斷源有中斷請(qǐng)求,寫(xiě)0時(shí),對(duì)應(yīng)位中斷源無(wú)中斷請(qǐng)求

INTPND 中斷服務(wù)(掛起)寄存器

寫(xiě)1時(shí) 對(duì)應(yīng)位中斷源被響應(yīng),寫(xiě)0時(shí),對(duì)應(yīng)位中斷源未被響應(yīng)

。。。。。。。。。

現(xiàn)在主要說(shuō)下外部中斷(其寄存器使用說(shuō)明在數(shù)據(jù)手冊(cè)的輸入輸出端口章節(jié))

S3C2440有24個(gè)外部中斷,GPF0--GPF7對(duì)應(yīng)于外部中斷EINT0--EINT7,GPG0--GPG15對(duì)應(yīng)于外部中斷EINT8--EINT23,支持上升沿、下降沿、高電平、低電平、雙邊沿觸發(fā)。

EXTINTn(外部中斷控制寄存器)

EINTFLTn(外部中斷濾波寄存器)

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

EINTPEND(外部中斷掛起寄存器)

設(shè)置外部中斷的一般步驟

1,選擇管腳功能為外部中斷功能
2,設(shè)置觸發(fā)方式
3,清中斷源掛起寄存器,中斷服務(wù)寄存器(可選,防止原有中斷干擾)
4,設(shè)置中斷模式(IRQ、FRQ, 默認(rèn)為IRQ)
5,設(shè)置中斷優(yōu)先級(jí)(可選,一般默認(rèn))
6,打開(kāi)外部中斷屏蔽
7,設(shè)置中斷服務(wù)入口程序

外部中斷按鍵按一下進(jìn)入中斷程序?qū)?yīng)LED燈閃一下

  1. #include"2440addr.h"
  2. #include"option.h"http://這個(gè)文件中定義了中斷服務(wù)程序的起始地址
  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);//清除中斷標(biāo)志位
  19. rINTPND|=(1<<1);
  20. LED1_ON;
  21. Delay();
  22. LED1_OFF;
  23. }
  24. void__irqIRQ_KEY2(void)
  25. {
  26. rSRCPND|=(1<<4);//清除中斷標(biāo)志位
  27. rINTPND|=(1<<4);
  28. rEINTPEND|=(1<<4);//清除ENIT4的中斷標(biāo)志位
  29. LED2_ON;
  30. Delay();
  31. LED2_OFF;
  32. }
  33. void__irqIRQ_KEY3(void)
  34. {
  35. rSRCPND|=(1<<2);//清除中斷標(biāo)志位
  36. rINTPND|=(1<<2);
  37. LED3_ON;
  38. Delay();
  39. LED3_OFF;
  40. }
  41. void__irqIRQ_KEY4(void)
  42. {
  43. rSRCPND|=1<<0;//清除中斷標(biāo)志位
  44. rINTPND|=1<<0;
  45. LED4_ON;
  46. Delay();
  47. LED4_OFF;
  48. }
  49. voidEint_Init(void)
  50. {
  51. rGPFCON&=~(0x33f);
  52. rGPFCON|=0x22a;//設(shè)置GPF0、1、2、4為中斷輸入功能
  53. rEXTINT0=0x20222;//ENIT0、1、2、4下降沿觸發(fā)中斷
  54. rSRCPND=0x17;//清除ENIT0、1、2、4的中斷標(biāo)志位
  55. rINTPND=0x17;//清除ENIT0、1、2、4的中斷標(biāo)志位
  56. rEINTPEND=(1<<4);//清除ENIT4的中斷標(biāo)志位
  57. rINTMOD=0x0;//所有中斷為IRQ中斷
  58. rINTMSK&=~0x17;//ENIT0、1、2、4中斷服務(wù)有效(這里就是使能外部中斷)
  59. rEINTMASK&=~(1<<4);//EINT4中斷服務(wù)有效
  60. pISR_EINT0=(unsigned)IRQ_KEY4;//設(shè)置各中斷服務(wù)子程序地址
  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));//對(duì)GPBCON[10:17]清零
  68. rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//設(shè)置GPB5~8為輸出
  69. rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//設(shè)置GPB5~8的上拉功能
  70. rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);//關(guān)閉LED
  71. Eint_Init();
  72. while(1);
  73. }



關(guān)鍵詞: S3C2440中斷控制

評(píng)論


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

關(guān)閉