s3c2440外部中斷
要使用外部中斷,首先要初始化外部中斷。外部中斷跟外部引腳F和G復(fù)用。要把相應(yīng)的引腳配置為中斷模式:
本文引用地址:http://m.butianyuan.cn/article/201611/318390.htm配置完引腳后,還需要配置具體的中斷功能。我們要打開某一中斷的屏蔽,這樣才能響應(yīng)該中斷,相對(duì)應(yīng)的寄存器為INTMSK有些位對(duì)應(yīng)著多個(gè)外部中斷;
由于存在位對(duì)應(yīng)著多個(gè)外部中斷,如上圖EINT4~7EINT8~23對(duì)應(yīng)INTMSK一個(gè)屏蔽位,所以要精確打開某一個(gè)外部中斷就要配置EINTMASK。下圖只列出了一部分,對(duì)于EINT4~23都適用。
外部中斷也要有一個(gè)觸發(fā)的方式,選擇低電平、高電平、上升沿、下降沿觸發(fā)等方式,這個(gè)要配置EXTINT寄存器
如前面博文gun-ucos的s3c2440處理器中斷部分所述,因?yàn)橹袛鄟?lái)的時(shí)候硬件會(huì)把SRCPND和INTPND置1,所以需要把相應(yīng)的位清零(通過(guò)置1來(lái)清零),對(duì)于外部中斷還要判斷具體是哪個(gè)外部中斷,這就要看EINTPEND寄存器了。這個(gè)寄存器同樣也要通過(guò)置1來(lái)清零。
下面給出段代碼,當(dāng)系統(tǒng)啟動(dòng)后開始蜂鳴,如果按下key2 那么設(shè)置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都是空函數(shù)(這里的對(duì)應(yīng)關(guān)系沒驗(yàn)證,比如按開發(fā)板上的K1不一定執(zhí)行到key_int1函數(shù))。
按鍵2由eint4_7處理,在這個(gè)函數(shù)里面清除 rEINTPEND,關(guān)閉蜂鳴器:
void eint4_7(void){UINT32 eintpnd;UINT8 index;eintpnd = rEINTPEND;for(index = 4;index < 24;index ++){if(eintpnd & (1<
評(píng)論