新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > s3c2440外部中斷

        s3c2440外部中斷

        作者: 時間:2016-11-19 來源:網絡 收藏
        上文用到了pwm控制蜂鳴器,實現了蜂鳴器頻率的改變,有一點不好就是蜂鳴器一直響,可以用一個交互的方式來關閉蜂鳴器。這里就選擇按鍵,開發板上一共4個按鍵,對應這4個外部中斷EINT0,EINT1,EINT2和EINT4(為什么不是EINT0~3呢,讓人蛋疼)

        要使用外部中斷,首先要初始化外部中斷。外部中斷跟外部引腳F和G復用。要把相應的引腳配置為中斷模式:

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


        配置完引腳后,還需要配置具體的中斷功能。我們要打開某一中斷的屏蔽,這樣才能響應該中斷,相對應的寄存器為INTMSK有些位對應著多個外部中斷;




        由于存在位對應著多個外部中斷,如上圖EINT4~7EINT8~23對應INTMSK一個屏蔽位,所以要精確打開某一個外部中斷就要配置EINTMASK。下圖只列出了一部分,對于EINT4~23都適用。




        外部中斷也要有一個觸發的方式,選擇低電平、高電平、上升沿、下降沿觸發等方式,這個要配置EXTINT寄存器



        如前面博文gun-ucos的s3c2440處理器中斷部分所述,因為中斷來的時候硬件會把SRCPND和INTPND置1,所以需要把相應的位清零(通過置1來清零),對于外部中斷還要判斷具體是哪個外部中斷,這就要看EINTPEND寄存器了。這個寄存器同樣也要通過置1來清零。


        下面給出段代碼,當系統啟動后開始蜂鳴,如果按下key2 那么設置GPB0位輸出模式,并且輸出低電平,蜂鳴器停止!

        void init_key(void){rGPFCON	&= ~0x33f;rGPFCON	|= 0x22a;rINTMSK &= ~( (1<<0)|(1<<1)|(1<<2)|(1<<4));		/// enable eintrEINTMASK	&= ~(1<<4);				/// enable eint4rEXTINT0	&= ~0x70777;rEXTINT0	|= 0x20222;pIRQ_EINT0	= (uint32)key_int0;pIRQ_EINT1	= (uint32)key_int1;pIRQ_EINT2	= (uint32)key_int3;pIRQ_EINT4_7	= (uint32)eint4_7;}

        其中 key_int 0 1 3都是空函數(這里的對應關系沒驗證,比如按開發板上的K1不一定執行到key_int1函數)。

        按鍵2由eint4_7處理,在這個函數里面清除 rEINTPEND,關閉蜂鳴器:

        void eint4_7(void){UINT32 eintpnd;UINT8	index;eintpnd	= rEINTPEND;for(index = 4;index < 24;index ++){if(eintpnd & (1<


        關鍵詞: s3c2440外部中

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 台安县| 盘山县| 巴里| 涿鹿县| 德格县| 开江县| 襄垣县| 余姚市| 佛山市| 云安县| 乐都县| 岢岚县| 台湾省| 乌苏市| 大荔县| 从化市| 吉林市| 威信县| 深圳市| 湘乡市| 香格里拉县| 上虞市| 加查县| 玉山县| 双江| 梁山县| 奎屯市| 天台县| 普兰县| 北票市| 会同县| 通州市| 彩票| 辽源市| 桦川县| 化州市| 望城县| 苍梧县| 吉木萨尔县| 凤阳县| 嘉兴市|