學(xué)習(xí)2440外部按鍵中斷后的理解和疑問
一、2440按鍵中斷的步驟
1,初始化寄存器GPGCON,設(shè)置對應(yīng)的GPG0,GPG3,GPG5,GPG6,GPG7,GPG11為外部中斷的功能接口,它們分別對應(yīng)外部中斷EINT8,EINT11,EINT13,EINT14,EINT15,EINT19
2,設(shè)置外部按鍵中斷的觸發(fā)方式
這里包括EXTINT1和EXTINT2兩個(gè)寄存器的配置,分別對EINT8,EINT11,EINT13,EINT14,EINT15,EINT19六個(gè)外部中斷設(shè)定!按鍵沒按下時(shí)為高電平,被按下后為低電平;所以設(shè)定為低電平觸發(fā)!
3,設(shè)定各個(gè)按鍵的中斷源不屏蔽!
這里就是設(shè)置寄存器EINTMASK,將對應(yīng)EINT8,EINT11,EINT13,EINT14,EINT15,EINT19的位,置0!也就是不屏蔽! 置1表示屏蔽,初始化時(shí)為屏蔽的!
4,設(shè)定寄存器EINTPEND,SRCPND,INTPND(2440官方代碼中設(shè)置了,個(gè)人覺得沒必要,測試通過了)
官方設(shè)置是這樣的: 將EINTPEND,SRCPND,INTPND中對應(yīng)的EINT8,EINT11,EINT13,EINT14,EINT15,EINT19位全部置1處理;根據(jù)2440文檔9-33,14-8,14-15的說明,1=Occur interrupt.表示中斷發(fā)生!It is cleard by writing “1” PS:因?yàn)槭侵袛嗟某跏蓟?,?fù)位后怎么會(huì)立馬有中斷請求呢?可能我沒能理解這里置1的意思.所以,我對這三個(gè)寄存器初始化時(shí) 沒有設(shè)置,取默認(rèn)的復(fù)位值,即0x00
5,將中斷服務(wù)函數(shù)的地址傳給對應(yīng)的中斷向量處(重點(diǎn)理解,解釋pISR_EINT8_23=(U32)extint8_23)
代碼為pISR_EINT8_23=(U32)extint8_23;//extint8_23為中斷服務(wù)函數(shù)的地址!pISR_EINT8_23為指向中斷向量表的HandleEINT8_23(2440init.s中). //#define pISR_EINT8_23 (_ISR_STARTADDRESS+0x34) 這里的_ISR_STARTADDRESS=0x33ffff00,為什么是這個(gè)數(shù)呢,在網(wǎng)上查了很多,有位網(wǎng)友是這樣解釋的:_ISR_STARTADDRESS=_RAM_ENDADDRESS-0x100,那么_RAM_ENDADDRESS又是多少呢(參考2440用戶手冊1.3.2),因?yàn)?440采用了2片32M的SDRAM芯片并接形成32位總線數(shù)據(jù)寬度。物理起始地址為0x30000000,再加上64M的空間,就是_RAM_ENDADDRESS的值0x34000000,那這里為什么是_RAM_ENDADDRESS-0x100呢,為什么是減去0x100(256字節(jié)的空間)呢?誰能幫我解釋下,謝謝
答: