2008年11月4日 星期二

Windows CE - Edge triger vs Level triger

最近小素開始在看Driver的一些Issue。
然後遇到了所謂中斷服務發生時,有兩種驅動方法,分別是Edge triger 和 Level triger。

這兩種的差別簡單的說,就是對於電壓忽然由Low到High的兩種不同識別方式。

Edge triger:
當裝備要發出中斷請求時.就把 IRQ的訊號由低拉往高這時候,由於電位的"變化的瞬間",Cpu就會接收到這個訊號表示有一個中斷請求。當中斷完成時 IRQ訊號會被降回低電位.IRQ訊號還是在高電位表示有另外一個裝備發出同一個中斷請求。這種方式可由多個裝備共用一個中斷。標準的PCI的裝備就是使用這種方式。缺點就是如果這個時候Cpu漏掉這一次中斷的瞬間,則這個中斷服務就會漏掉,因此這種中斷方式只支援no-block socket。

Level triger:
當裝備要發出中斷請求時,就把 IRQ的訊號由低拉往高,這時候電位由低到高Cpu就會一直收到中斷,當Cpu開始處理的時候,一般就會先disable掉這一個中斷,直到處理完之後再Enable起來,否則中斷就會一直衝進Cpu造成錯誤的發生但是相對的Level的中斷就比較不會漏掉,因為他是持續性的!除非Cpu有去處理這次的中斷,不然會一直收到中斷的事件。缺點就是Cpu 接收到這個訊號時表示只有一個中斷請求。若有二個以上的裝備使用同一個中斷就無法正常工作。但是這種中斷方式支援block和no-block socket。

參考文章:
1.PIC中斷控制器介紹,http://stenlyho.blogspot.com/2008/08/pic.html
2.epoll LT VS ET,http://hi.baidu.com/seraphsky/blog/item/2aec23c2b9a08230e4dd3be0.html

沒有留言: