在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440之中斷操作(MDK4.22)

            S3C2440之中斷操作(MDK4.22)

            作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
            背景知識:

            2440中斷控制器接收60個(gè)中斷源。

            本文引用地址:http://www.biyoush.com/article/201611/318143.htm

            中斷被分為多種類別,此處為32類別,正好用32位。


            圖上可以很好的表示整個(gè)中斷的流程。有些中斷源對應(yīng)一個(gè)中斷類別,比如串口中斷發(fā)送,接收最后都對應(yīng)到串口中斷。submask屏蔽子類別,未屏蔽的會引起srcpnd相應(yīng)位置位,如果mask未屏蔽的話,就會緊接著判斷優(yōu)先級,最后導(dǎo)致intpnd置位,然后產(chǎn)生了IRQ,而FIQ不需要優(yōu)先級判斷,會直接產(chǎn)生,由intmod設(shè)置。

            注意的是:進(jìn)入ISR后,清除中斷的順序很重要,首先是srcpnd接著是intpnd,如果還需要清除eintpnd的話,要最先清除。

            實(shí)驗(yàn)過程:

            編譯工具--MDK4.22

            硬件圖

            首先需要配置GPF0/1/2/4的腳為EINT0/1/2/4。

            由于用到了外部4-7中斷,需要開啟EINTMASK寄存器相應(yīng)位。設(shè)置優(yōu)先級寄存器,設(shè)置INTMSK寄存器。

            在2440A.s中已經(jīng)設(shè)置了I F位開啟,可以接收中斷了。

            在中斷初始化代碼里,需要將中斷函數(shù)的地址安裝到中斷向量表中。

            程序如下:

            MDK4.22的啟動代碼設(shè)置


            配置了堆,棧,以及中斷向量表的地址為0x33ffff20處。配置了B口和F口,B口試LED的燈顯示,F(xiàn)口是連接按鍵的外部中斷。按一個(gè)鍵會亮一個(gè)LED。

            int.c代碼

            view plain
            1. #include"S3C2440.h"
            2. #include"int.h"
            3. voidinit_irq(void)
            4. {
            5. pHandleEINT0=EINT0_Handle;
            6. pHandleEINT1=EINT1_Handle;
            7. pHandleEINT2=EINT2_Handle;
            8. pHandleEINT4_7=EINT4_7_Handle;
            9. rEINTMASK&=(~(1<<4));
            10. rPRIORITY=(rPRIORITY&(~(0x01)))|(0x01<<7);
            11. rINTMSK&=(~(1<<0))&(~(1<<1))&(~(1<<2))&(~(1<<4));
            12. }
            13. void__irqEINT0_Handle(void)
            14. {
            15. rSRCPND=1<<0;
            16. rINTPND=1<<0;
            17. rGPBDAT|=(0x0f<<5);
            18. rGPBDAT&=~(1<<8);
            19. }
            20. void__irqEINT1_Handle(void)
            21. {
            22. rSRCPND=1<<1;
            23. rINTPND=1<<1;
            24. rGPBDAT|=(0x0f<<5);
            25. rGPBDAT&=~(1<<5);
            26. }
            27. void__irqEINT2_Handle(void)
            28. {
            29. rSRCPND=1<<2;
            30. rINTPND=1<<2;
            31. rGPBDAT|=(0x0f<<5);
            32. rGPBDAT&=~(1<<7);
            33. }
            34. void__irqEINT4_7_Handle(void)
            35. {
            36. rEINTPEND=(1<<4);
            37. rSRCPND=1<<4;
            38. rINTPND=1<<4;
            39. rGPBDAT|=(0x0f<<5);
            40. rGPBDAT&=~(1<<6);
            41. }

            主程序:

            view plain
            1. #include"S3C2440.h"
            2. #include"int.h"
            3. intmain(void)
            4. {
            5. rGPBDAT|=(0xf<<5);
            6. init_irq();
            7. while(1);
            8. }

            scatter文件如下:

            LR_ROM1 0x00000000 0x00001000 { ; load region size_region
            ER_ROM1 0x00000000 0x000001000 { ; load address = execution address
            *.o (RESET, +First)
            *(InRoot$$Sections)
            .ANY (+RO)
            }


            RW_RAM1 0x30000000 0x40000000 { ; RW data
            .ANY (+RW +ZI)
            }


            ISR 0x31000000{
            int.o(*)
            }

            HEAP 0x30000800 {
            S3C2440A.o(HEAP)
            }


            STACK 0x30000c00{
            S3C2440A.o(STACK)
            }


            }

            驗(yàn)證,可以按一個(gè)鍵亮一個(gè)鍵。

            over



            關(guān)鍵詞: S3C2440中斷操作MDK4.2

            評論


            相關(guān)推薦

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

            關(guān)閉