新聞中心

s3c2440外部中斷

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
上文用到了pwm控制蜂鳴器,實(shí)現(xiàn)了蜂鳴器頻率的改變,有一點(diǎn)不好就是蜂鳴器一直響,可以用一個(gè)交互的方式來(lái)關(guān)閉蜂鳴器。這里就選擇按鍵,開發(fā)板上一共4個(gè)按鍵,對(duì)應(yīng)這4個(gè)外部中斷EINT0,EINT1,EINT2和EINT4(為什么不是EINT0~3呢,讓人蛋疼)

要使用外部中斷,首先要初始化外部中斷。外部中斷跟外部引腳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<


關(guān)鍵詞: s3c2440外部中

評(píng)論


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

關(guān)閉