wince5 0 Eboot下USB中斷機制

2021-05-11 08:41:29 字數 982 閱讀 4049

開始在eboot中使用usb的時候很奇怪中斷響應。因為在eboot和stepldr中都沒有看到有對中斷向量表部分的處理。那麼這個中斷是怎麼觸發?

最後在usb.c中的isr_init找到這句話:

pisr =(unsigned)(0xea000000)+(((unsigned)isrhandler - (0x80000000 + 0x18 + 0x8) )>>2);

這個實現了將usb的handler交給中斷向量部分的處理,很簡潔,下面分析這句話:

0xea00000000 是機械碼,將彙編中的無條件跳轉指令 b

(unsigned)isrhandler 是彙編中的isr處理程式的首位址。

0x80000000 是mmu以後的對映的首位址。

0x18是中斷向量表中的isr部分的位址偏移量。

0x8 是進行arm的**流水的補償。

((unsigned)isrhandler - (0x80000000 + 0x18 + 0x8) )的意思就是計算isrhandle函式相對於首位址的偏移位址。>>2是取word對齊。

(unsigned)(0xea000000)+(((unsigned)isrhandler - (0x80000000 + 0x18 + 0x8) )>>2)就是乙個機械碼。ea******,跳轉到相對於首位址的isrhandle位置。

意思就是指向中斷向量表中isr位址。

所以pisr =(unsigned)(0xea000000)+(((unsigned)isrhandler - (0x80000000 + 0x18 + 0x8) )>>2);

就是將isrhandle的程式指向到中斷向量表中的isr。

當有usb的中斷發生時,會先進入到isrhandler程式進行判斷。然後再這段彙編中跳轉到isrusbd中進行對usb的各種中斷處理。

在其中還有一點疑惑。

1. pisr是乙個指向函式/位址的指標。而等式後面是乙個機械碼。相當於將乙個這個機械碼寫到某個位址上面。不知道這樣是否ok@

WINCE下的USB驅動開發

首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...

WINCE下的USB驅動開發

首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...

wince下usb驅動攻堅戰

首先給出乙個ed和td的鍊錶結構圖,相信有了這個圖對 的理解就容易多了!headptr ed ed ed ed ed td td td.根據ohci spec 每個ed endpoint descriptor 描述usb裝置的乙個端點的所有資料傳輸,所有的ed被連線在一起 而td transfer ...