邊沿觸發與電平觸發的區別

1、邊沿觸發

邊沿觸發包括上升沿觸發和下降沿觸發,邊沿觸發檢測的是電平變化,高電平轉低電平或低電平轉高電平時,觸發一次中斷。

邊沿沿觸發是鎖存中斷信號的,由D觸發器記憶,即:若CPU來不及響應中斷,外部中斷信號撤消後,由於D觸發器的記憶作用,消失的中斷信號仍然有效,直到中斷被響應並進入中斷ISR,記憶的中斷信號纔會由硬件自動清除。

 

2、電平觸發

電平觸發分爲高電平觸發和低電平觸發;電平觸發需要手動清除中斷信號

電平觸發根據硬件設計的不同,分爲即時觸發和信號鎖存觸發;

(1)即時的電平觸發,當外部中斷信號撤消時,中斷申請信號隨之消失。如果在外部中斷信號申請期間,CPU來不及響應此中斷,那麼有可能這次中斷申請就漏掉了。

即時的電平觸發是一個時間段,需要一直觸發中斷的,就用電平觸發。比如高電平觸發,只要檢測到是高電平就觸發中斷。

(2)信號鎖存的電平觸發,當檢測到高電平或低電平信號,該觸發信號也會被鎖存,類似於邊沿觸發,但是觸發信號需要進行手動清除;

 

3、邊沿觸發及電平觸發的區別

如果是採用邊沿檢測外部中斷,檢測到電平變化會中斷,但是如果中斷檢測口一直保持某一電平,則無法產生下次中斷,需要等下次檢測到電平變化纔會中斷。中斷得到響應後由硬件自動清除。

如果是採用電平檢測外部中斷,檢測到低/高電平會中斷,但是如果中斷檢測口一直保持低電平,中斷處理完成後,會繼續產生下次中斷,需要檢測到高電平纔會停止中斷產生。中斷得到響應後由硬件手動清除。

 

驗證:msm8909上,gpio中斷的對應寄存器TLMM_GPIO_INTR_STATUSn

The GPIO_INTR_STATUS[n] indicates the status of the summary interrupt for GPIO[n].

When read it returns the status for the interrupt on GPIO[n]. When written with a 1 in this position, it sets the interrupt for GPIO[n]. When it is written with a 0, it clears the interrupt.

實際發現對於邊沿中斷而言:

  1.  大部分情況下,中斷一旦觸發就被處理,所以寄存器的值都爲0
  2. 先通過disable_irq屏蔽一個gpio邊沿中斷,再觸發這個中斷,可以發現這個狀況下,寄存器的值keep爲1,然後通過enable_irq打開這個中斷,中斷處理將被調用。
  3. 先驗證寄存器的值在常態下爲0,然後手動寫入1,發現中斷處理被執行
  4. 問題:先通過disable_irq屏蔽一個gpio邊沿中斷,再觸發這個中斷,寄存器的值變爲1,然後手動寫入0,驗證成功寫入,enable_irq打開中斷,中斷處理也被調用了。所以寄存器描述裏的寫0可以清楚中斷這件事,我暫時很懷疑,但是手邊的資料沒有找到更多關於高通中斷寄存器相關的,有了解的朋友也可以和我分享下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章