在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設計應用 > TQ2440之按鍵中斷

            TQ2440之按鍵中斷

            作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
            這次是按鍵中斷,首先呢,中斷初始化方面確實比較麻煩。我自己設計的裸機程序是TQ板子上四個按鍵,當按鍵按下時觸發(fā)一次中斷,并且LED燈對應的就會亮,這里要贊一下TQ的板子,按鍵4用的是子中斷,當時我調(diào)程序的時候發(fā)現(xiàn)每次只要我按下按鍵4就陷入死循環(huán)出不來了,后來文彬指點了一句會不會是子中斷的問題一出口我就知道問題出在哪了,其實他是知道的,故意讓我糾結一下,還好沒讓我糾結那么久。程序是我自己編的,有一開始自己寫的有點亂然后后邊整理了一下并且參考了別人編程的風格習慣所以就形成了我下面給出的程序,有在板子上運行處成功,關于一些頭文件跟c文件就不說了,真正有心在做裸機的知道解決方法。
            #include "2440addr.h"
            #include"option.h"
            #define LED1_ON (rGPBDAT &= ~(1<<5) ) //置0燈亮,置1燈滅
            #define LED1_OFF (rGPBDAT |=(1<<5) )
            #define LED2_ON (rGPBDAT &= ~(1<<6) )
            #define LED2_OFF (rGPBDAT |=(1<<6) )
            #define LED3_ON (rGPBDAT &= ~(1<<7) )
            #define LED3_OFF (rGPBDAT |=(1<<7) )
            #define LED4_ON (rGPBDAT &= ~(1<<8) )
            #define LED4_OFF (rGPBDAT |=(1<<8) )
            void delay(void)
            {
            unsigned int i,j;
            for(i=0;i<1000;i++)
            for(j=0;j<6000;j++)//純粹是為了燈亮的好看不會閃爍;
            ;
            }
            void __irq Key1_ISR(void)//提前定義,不然下邊的pISR_EINT那里會報錯,原因c語言檢測不到函數(shù)定義
            {
            rSRCPND |= (1<<1);//清除中斷標志位,下面相同
            rINTPND |= (1<<1);
            LED1_ON;
            delay();
            LED1_OFF;
            }
            void __irq Key2_ISR(void)
            {
            rSRCPND |= (1<<4);
            rINTPND |= (1<<4);
            rEINTPEND |= (1<<4);//使能EINT4,因為它是復用的,所以要加上這句
            rEINTMASK &= (~(1<<4));//中斷屏蔽
            LED2_ON;
            delay();
            LED2_OFF;
            }
            void __irq Key3_ISR(void)
            {
            rSRCPND |= (1<<2);
            rINTPND |= (1<<2);
            LED3_ON;
            delay();
            LED3_OFF;
            }
            void __irq Key4_ISR(void)
            {
            rSRCPND |= (1<<0);
            rINTPND |= (1<<0);
            LED4_ON;
            delay();
            LED4_OFF;
            }
            void led_init(void)//初始化燈
            {
            rGPBCON = 0x15400;//全部設置為I/O輸出
            rGPBUP = 0x00;//使能上拉電阻
            rGPBDAT |= (1<<5)|(1<<6)|(1<<7)|(1<<8);//先讓燈全滅,不然看不到效果
            }
            void key_init(void)//初始化中斷
            {
            rGPFCON |= (1<<1)|(1<<3)|(1<<5)|(1<<9); //設置寄存器為中斷方式
            rEXTINT0 |= (1<<1)|(1<<5)|(1<<9)|(1<<17);//設置外部中斷為下降沿方式觸發(fā)
            rEINTMASK &= (~(1<<4));//EINT4中斷有效
            rEINTPEND |= (1<<4);//寫1清除EINT4中斷標志位
            rSRCPND |= (1<<0)|(1<<1)|(1<<2)|(1<<4);//EINT0、1、2、4等待請求服務
            rINTMSK &= (~(1<<0))&(~(1<<1))&(~(1<<2))&(~(1<<4));//設置cpu服務EINT0、1、2、4
            rINTPND |= (1<<0)|(1<<1)|(1<<2)|(1<<4);//優(yōu)先級的問題,IRQ決定服務哪個哪個中斷源先
            pISR_EINT0 = (unsigned)Key4_ISR;
            pISR_EINT1 = (unsigned)Key1_ISR;
            pISR_EINT2 = (unsigned)Key3_ISR;
            pISR_EINT4_7 = (unsigned)Key2_ISR;//就是這里啦,報unsigned錯誤讓我調(diào)了好幾天的地方,這里是設置中斷服務子程序地址
            }
            void Main(void)
            {
            MMU_Init();
            led_init();//初始化燈
            key_init();//初始化中斷
            while(1);//死循環(huán),等待按鍵中斷
            }
            最近比較懶,好久沒開博客看看了,下次再把串口裸機程序發(fā)上來,做好了,可是懶得寫。最近要復習期末考,做到nand flash的操作裸機程序就暫且放一放,等考完試后再把它完成之后就正式進入驅(qū)動的學習,同時可能會學習一下UC/OS ii。


            關鍵詞: TQ2440按鍵中

            評論


            技術專區(qū)

            關閉