S3C2440一共有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每一位相對應,其他45個中斷源與SRCPND中的每一位相對應。要注意的是EINT4~7對應的是同一位SRCPND[4],而EINT8~23對應的也是SRCPND[5]一位
1 S3C2440的中斷寄存器
中斷分兩大類:外部中斷和內部中斷。
1.1 外部中斷寄存器
24個外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,并且不要上拉。具體可參考datesheet數據手冊。
寄存器:
EXTINT0-EXTINT2:分別設置EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的觸發方式(高電平觸發、低電平觸發、下降沿觸發、上升沿觸發)。
EINTFLT0-EINTFLT3:控制濾波時鐘和濾波寬度。
EINTPEND:這個是中斷掛起寄存器,清除時要寫1,后面還有幾個是寫1清除。當一個外部中斷(EINT4-EINT23)發生后,那么相應的位會被置1。為什么沒有EINT0-EINT3,因為它們分別由SRCPND寄存器的后4位控制。
EINTMASK:這個簡單,是屏蔽中斷用的,也就是說位為1時,此次中斷無效。
1.2 內部中斷寄存器
內部中斷有8個寄存器:
寄存器:
SUBSRCPND:當一個中斷發生后,那么相應的位會被置1,表示一個中斷發生了。
INTSUBMSK:與上一個是一樣的,中斷屏蔽寄存器。
SRCPND:當一個中斷發生后,那么相應的位會被置1,表示一個或一類中斷發生了。
INTMSK:用來屏蔽SRCPND寄存器所標識的中斷。但只能屏蔽IRQ中斷,不能屏蔽FIQ中斷。
INTMOD:當INTMOD中某位被設置為1時,它對應的中斷被設為FIQ,CPU將進入快速中斷模式。
PRIORITY:用于設置IRQ中斷的優先級。具體使用方法可參考芯片手冊。
INTPND:中斷優先級仲裁器選出優先級最高中斷后,這個中斷在INTPND寄存器中的相應位被置1,隨后,CPU進入中斷模式處理它。同一時間內,此寄存器只有一位被置1。
INTOFFSET:用來表示INTPND寄存器中哪位被置1了,即記錄INTPND中位[x]為1的位x的值。清除INTPND、SRCPND時自動清除。
2 中斷過程
2.1 內部中斷過程
a 如果是不帶子中斷的內部中斷:發生后SRCPND相應位置1,如果沒有被INTMSK屏蔽,那么等待進一步處理。
b 如果是帶子中斷的內部中斷:發生后SUBSRCPND相應位置1,如果沒有被INTSUBMSK屏蔽,那么SRCPND相應位置1,等待進一步處理,幾個SUBSRCPND可能對應同一個SRCPND,對應表如下(P381):
2.2 外部中斷過程
a 如果是外部中斷:EINT0-EINT3發生后SRCPND相應位置1,如果沒有被INTMSK屏蔽,那么等待進一步處理。EINT4-EINT23發生后EINTPEND相應位置1,如果沒有被EINTMASK屏蔽,那么SRCPND相應位EINT4-7 或EINT8-23置1,如果沒有被INTMSK屏蔽,等待進一步處理,幾個EINTPEND對應同一個SRCPND,對應表如下:
各個外部中斷與管腳的對應關系如下圖所示:
三種中斷都等待進一步處理了。接下來從SRCPND往下看,看INTMSK。如果中斷被屏蔽了,就不用說了(注意:快中斷也能被屏蔽)。如果沒有被屏蔽,那么會進一步到INTMOD。如果是快中斷,那么直接出來,進入FIQ(即CPU進入快中斷模式處理)。如果是普通中斷,那么SRCPND可以有多為置1(FIQ只能有一個),這時就會經過PRIORITY選出一個優先級高的,然后把根據選出的中斷把INTPND相應位置1(注意:只能選出一個),進入IRQ,讓CPU處理。
2.3 中斷優先級
中斷優先級分組:
ARB_MODEx: 控制中斷優先級是否輪轉
ARB_SELx: 控制輪轉順序
2.4 中斷的開啟
a.如果是不帶子中斷的內部中斷,只需設置INTMSK,讓它不屏蔽中斷就可以了。
b 如果是帶子中斷的內部中斷,需設置INTSUBMSK和INTMSK,讓它們不屏蔽中斷就可以了。
c 如果是外部中斷,對于EINT8-23需要設置EINTMASK和INTMSK。對于EINT0-EINT3只需設置INTMSK。
2.5 中斷的清除
a.如果是不帶子中斷的內部中斷,只需清除SRCPND,注意清除需位置1。
b 如果是帶子中斷的內部中斷,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因為,如果你先清除SRCPND的話,然后在清除SUBSRCPND的過程中,SRCPND會以為又有中斷發生,又會置1。也就是說一次中斷會響應兩次。所以必須先掐斷源頭。
c 如果是外部中斷,對于EINT8-23需要清除EINTPEND和SRCPND(同樣注意順序)。對于EINT0-EINT3只需清除SRCPND。
下面來看一段代碼:
void key_init()
{
rGPGCON &= ~(0x3 << 0); //設置GPGO—EINT[8]
rGPGCON |= (0x2 << 0); //設置GPGO—EINT[8]
rEXTINT1 &= ~(0xf << 0); //觸發方式為低電平有效
rEINTPEND |= (1 << 8); //清中斷
rEINTMASK &= ~(1 << 8); //允許外部中斷
pISR_EINT8_23 = (U32)Key_handler; //中斷服務程序
EnableIrq(BIT_EINT8_23); //允許中斷(INTMSK)
}
static void __irq key_handler()
{
if (rINTPND == BIT_EINT8_23) //INTPND同時只能有一位為1
ClearPending(BIT_EINT8_23); //清SRCPND、INTPND #define BIT_EINT8_23 (0x1 << 5)
if (rEINTPEND & (1 << 8)) //清外部中斷EINTPEND
rEINTPEND |= 1 << 8;
............
}
結合上面的圖,我們就很清楚的了解哪句代碼清哪個中斷或者設置哪個寄存器,關于底層的細節了解一下是非常有必要的,當然還有幾個寄存器(比如 INTOFFSET)會在后面介紹他們,follow....
設置外部中斷的一般方法:
1、設置GPIO口功能(挑選GPx組),00:輸入,01:輸出,10:第二功能 P292
2、設置EXTINTx寄存器,設定中斷觸發類型(EXTINT0 — 2) P301
3、設置EINTPND,若發生中斷則某位置1,使用前先清零(寫1清零) P306
4、設置EINTMASK,0表示允許中斷,1表示禁止,默認禁止 P305
5、清IRQ中斷EXTINT8_23屬于IRQ中斷號5,ClearPending(BIT_EINT8_23);
6、設置中斷處理函數,pISR_EINT8_23 = (U32)Key_ISR;
7、允許中斷,EnableIrq(BIT_EINT8_23);
上一篇:s3c2440裸板_時鐘系統及定時器
下一篇:兩片STM32使用HAL完成SPI全雙工主從通信
推薦閱讀
史海拾趣
AD Semiconductor是一家專注于模擬和數字混合信號集成電路的設計、生產和銷售的公司。以下是該公司發展的五個相關故事:
公司成立與初期發展: AD Semiconductor成立于1990年,總部位于美國馬薩諸塞州。公司的創始人具有豐富的集成電路設計和制造經驗,致力于開發高性能、高可靠性的模擬和數字混合信號芯片。初期,公司主要專注于功率管理、數據轉換和信號處理等領域。
技術創新與產品推出: AD Semiconductor在技術創新方面取得了多項突破,不斷推出具有領先性能的芯片產品。公司的產品涵蓋了模擬轉換器、運算放大器、數據采集系統、功率管理器等多個系列,廣泛應用于通信、工業控制、汽車電子等領域。
市場拓展與國際化發展: 隨著產品線的不斷完善和市場認可度的提升,AD Semiconductor逐步拓展了國內外市場。公司在美國、中國、歐洲等地設立了銷售和技術支持中心,與全球各地的客戶建立了合作關系。通過與國際合作伙伴的合作,AD Semiconductor的產品遠銷至全球各地,贏得了廣泛的市場認可。
并購與戰略合作: 為了加強自身的技術實力和市場地位,AD Semiconductor進行了一系列的并購和戰略合作。其中最重要的是2015年,AD Semiconductor收購了一家專注于RF和微波集成電路設計的公司,進一步拓展了在無線通信領域的業務布局。
持續創新與未來展望: AD Semiconductor致力于持續創新,不斷推出符合市場需求的新產品和解決方案。公司將繼續加強技術研發投入,提升產品性能和穩定性,以滿足客戶在不斷變化的市場需求。未來,AD Semiconductor將繼續致力于成為模擬和數字混合信號領域的領先企業,并為全球客戶提供更加優質的產品和服務。
Datatronic公司自創立之初,就致力于電子技術的創新。在早期,公司開發了一款具有革命性的數據處理器,該處理器以其高效的運算能力和穩定性迅速在市場上獲得了認可。通過不斷的技術迭代和優化,Datatronic公司逐漸在數據處理領域樹立了技術領先的地位,吸引了大量客戶。
Econais的超低功耗Wi-Fi模塊在醫療保健領域取得了廣泛的應用。通過連接醫療設備,如監護儀、血糖儀等,這些模塊實現了患者數據的實時傳輸和監控,提高了醫療服務的效率和質量。同時,Econais還針對醫療保健領域的特點,提供了定制化的軟件開發工具包(SDK),幫助客戶快速開發符合行業標準的物聯網應用。
芯旺微電子自2012年成立以來,始終致力于高可靠性MCU器件的研發設計。公司憑借其自主研發的KungFu內核架構處理器,迅速在汽車級和工業級混合信號MCU領域嶄露頭角。隨著技術的不斷積累和市場的深入拓展,芯旺微電子逐漸從一家初創公司發展成為國內車規級MCU市場的領軍企業。
隨著市場競爭的加劇,CDI-DIODE公司意識到傳統的營銷方式已經無法滿足市場需求。于是,公司開始嘗試新的營銷策略,如線上推廣、社交媒體營銷等。這些創新的營銷方式不僅提升了公司的知名度,也增強了與客戶的互動和聯系,進一步提升了品牌影響力。
作為一家有社會責任感的企業,Acculin Inc積極參與公益事業,為社會做出貢獻。公司定期舉辦慈善活動,支持教育、環保等公益事業。此外,Acculin還注重環保生產,通過采用環保材料和節能技術,降低生產過程中的環境影響。這些舉措不僅提升了公司的社會形象,也增強了消費者對品牌的信任度。
這些故事雖然基于虛構,但反映了電子行業中企業可能面臨的一些常見挑戰和機遇。通過技術創新、國際合作、戰略調整、人才培養和社會責任等方面的努力,一個電子行業的企業可以逐漸發展壯大,并在市場中取得一席之地。
各位老兄,我看PDA和手機都有這個功能,裝一個沒有源碼的藍牙相關應用軟件,發送文件圖片等,如果沒有打開,那么會彈出個打開的對話框,初始化藍牙設備,這些手機的系統是mobile的,現在我想在wince下也這么做,但是發現串口打開一次 ...… 查看全部問答∨ |
|
向"91program"提問 wince串口通信不用線程方式行嗎? 如問題標題! 我原本參考一些代碼來建立wince平臺的串口通訊程序. 后來我一個主管說\"wince下的串口通訊最好不用線程方式進行接收數據...\" 讓我用其他方式進行接收串口返回的數據. 可我的水平有限,想不到什么方法解決! 請專家或高手給我提示( ...… 查看全部問答∨ |
|
準備用觸摸屏配原來的儀器,8\",TFT.考慮到質量和成本,想觸摸屏和TFT屏都用臺灣廠家的,不用Sharp那個8寸的,不知哪位大俠對此有研究或心得啊?請推薦一下.… 查看全部問答∨ |
我的板子好像不發BOOTME信號了,請高手幫幫忙,以前還是可以正常從pb5下載nk.bin到目標設備,可是這兩天就是不好用,attach device時總是一點進度也沒有,中間的提示是“waiting for bootme from cepc”,而目標設備就停在“jumping to....”不動了 ...… 查看全部問答∨ |
花了一個星期研究STM8 Touch Sensing Library, 還是沒完全看明白其中的代碼, 特別是MultiChannelKey中的IIR濾波, 終于發覺自己笨了. 是不是直接拿來用就可以了的? 組合按鍵能否可以這樣用的? if (sSCKeyInfo[0].Setting.b ...… 查看全部問答∨ |