wince5 0 中斷 詳解

2021-05-17 16:22:40 字數 1925 閱讀 9872

原帖位址http://topic.csdn.net/u/20071008/11/d54df4a6-09ef-4d7f-aadb-2f60ff3824fc.html

1 wince中第一次對中斷的處理是在oal的oeminit()中,該函式呼叫oalintrinit()完成對中斷的初始化.

2 oalintrinit()對中斷的初始化做了如下工作:

2.1 通過配置ipr0-ipr33設定中斷優先順序,優先順序定義在g_intpriorities和g_intpriorities2中,其中irq_osmr0為最高優先順序, irq_keypad為最低優先順序.

2.2 設定iccr,在空閒模式時只對有效的,非遮蔽的中斷響應.

2.3 bspintrinit().該函式對bsp中需要處理的中斷進行初始化工作,主要是設定icmr暫存器使gpio1(cpld)和gpio2為非遮蔽狀態,然後通過oalintrstatictranslate建立irq和sysintr之間的關聯.

2.4 對於wince來說,中斷可以作如下分類:

1> 與bsp無關的kernel使用的內部中斷, 比如irq_osmr0(forsched),irq_rtcalarm;

2> 與bsp有關的cpu內部中斷,比如irq_usbohci, irq_osmr1, irq_keypad, irq_ffuart, irq_btuart, irq_stuart, irq_dmac, irq_usbfn;

3> cpld所管理的中斷,以gpio1通知cpu中斷的產生,在收到gpio1 產生的中斷後可以通過讀取位址0x0a00_0010判斷具體的中斷源,比如irq_gpio1_mmccd(mmc_in_int, mmc_out_int), irq_gpio1_usbcd(usb_in_int, usb_out_int), irq_gpio1_pcmcia_s0_csc(cf_in_int. cf_out_int),還有在**中沒有處理的sim卡中斷(sim_in_int, sim_out_int).

4> gpio2_120產生的中斷,通過暫存器icip的位10-gpio_x通知cpu中斷的產生,然後查詢暫存器gedr_x可以判斷具體的中斷源,比如irq_gpio12_maratho, irq_gpio10_ethernet,irq_gpio13_ucb1400;

5> 以installable isr形式產生的中斷,這類中斷通常是以dll的形式安裝,在登錄檔中定義其實際的irq中斷值,比如irq_mmc_detect,irq_mmc_control;

2.5 有幾種方式可以建立實際中斷irq到系統中斷sysintr之間的關聯,對於build-in裝置,可以在oeminit中通過 oalintrstatictranslate來建立靜態的關聯;但是對於installable isrs,可以在登錄檔中定義實際的中斷irq,然後通過在kerneliocontrol中使用ioctl_hal_request_sysintr來實時分配新的sysintr,這有助於驅動的移植.

3 在cpu接收到中斷後,對中斷的處理是在 oeminterrupthandler()中,該函式的首先遮蔽該中斷,最後得到實際中斷irq所對應的sysintr的值.

3.1 首先它通過中斷暫存器ichp得到實際的irq值;

3.2 對於gpio產生的中斷,通過清空gfer和grer暫存器來遮蔽相同的中斷;對於其餘的cpu內部中斷,通過清空icmr暫存器的相應位來遮蔽中斷;

3.3 對於kernel使用的irq_osmr0和irq_osmr2,分別進行處理,得到sysintr;

3.4 對於通過gpio0,gpio1和gpio2_120產生的中斷,將irq的值進行轉化,使之與oal/intr.c和bulverder_intr.h中所定義的新的irq值相對應,此時的irq值就不是在icip中對定義的irq值了;

3.5 接著呼叫nkcallintchain(irq)判斷該irq是否已經被加入中斷列表,同時開始呼叫該中斷的isr程式.

4 當中斷處理完成後,呼叫oalintrdoneirqs(),重新使能中斷.

wince5 0 中斷 詳解

原帖位址http topic.csdn.net u 20071008 11 d54df4a6 09ef 4d7f aadb 2f60ff3824fc.html 1 wince中第一次對中斷的處理是在oal的oeminit 中,該函式呼叫oalintrinit 完成對中斷的初始化.2 oalintri...

wince5 0中斷分析 精闢

原帖位址http topic.csdn.net u 20071008 11 d54df4a6 09ef 4d7f aadb 2f60ff3824fc.html 1 wince中第一次對中斷的處理是在oal的oeminit 中,該函式呼叫oalintrinit 完成對中斷的初始化.2 oalintri...

WinCE 5 0 的目錄結構

platform builder 5已經自帶wince 5.0,安裝過程會指定wince 5.0的安裝路徑,預設為x wince500,wince500即為wince 5.0的根目錄。根目錄下主要有以下幾個目錄 public,platform,private,pbworkspaces,others,...