新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S3C2440中斷控制器

        S3C2440中斷控制器

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

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

        本文引用地址:http://www.104case.com/article/201611/319201.htm

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

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

        寫1時 對應位中斷源有中斷請求,寫0時,對應位中斷源無中斷請求

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

        寫1時 對應位中斷源被響應,寫0時,對應位中斷源未被響應

        。。。。。。。。。

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

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

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

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

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

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

        設置外部中斷的一般步驟

        1,選擇管腳功能為外部中斷功能
        2,設置觸發(fā)方式
        3,清中斷源掛起寄存器,中斷服務寄存器(可選,防止原有中斷干擾)
        4,設置中斷模式(IRQ、FRQ, 默認為IRQ)
        5,設置中斷優(yōu)先級(可選,一般默認)
        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下降沿觸發(fā)中斷
        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中斷控制

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 灵武市| 湘西| 临安市| 晋中市| 山西省| 德安县| 万年县| 安多县| 龙泉市| 延长县| 沙湾县| 前郭尔| 伊通| 新疆| 临武县| 城步| 中卫市| 贺州市| 芒康县| 晋宁县| 吉木乃县| 开阳县| 北宁市| 千阳县| 永川市| 苏尼特左旗| 渝中区| 多伦县| 阳新县| 富裕县| 会东县| 平乡县| 固始县| 宜川县| 浑源县| 浙江省| 威海市| 常德市| 怀集县| 略阳县| 开阳县|