日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

wince6.0 s5pv210 中断

發(fā)布時間:2023/12/10 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wince6.0 s5pv210 中断 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 在smdkv210\src\oal\oallib\ksarm.h頭文件里可以看到wince的中斷定義。

?? ?設(shè)備中斷的起始編號即wince預(yù)定義的設(shè)備中斷ID的基值

?? ?SYSINTR_DEVICES EQU 8

?? ?一共支持64個設(shè)備中斷 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?? ?SYSINTR_MAX_DEVICES EQU 64 ? ? ? ? ? ? ? ? ? ?


?? ?可用的設(shè)備中斷ID的基值

?? ?SYSINTR_FIRMWARE ? ?EQU SYSINTR_DEVICES+16 ? ? ?

?? ?中斷總數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?? ?SYSINTR_MAXIMUM EQU SYSINTR_DEVICES+SYSINTR_MAX_DEVICES ? ? ? ? ??

?? ?

?? 那我們自己增加的外設(shè)的中斷需要以SYSINTR_FIRMWARE為基值來定義所有自定義的系統(tǒng)中斷號都應(yīng)該基于該值進(jìn)行累加加1,這些自定義的系統(tǒng)中斷號用于和IRQ一一對應(yīng)。如下:

?? #define ?SYSINTR_SHUTPOWER_DETECT ?(SYSINTR_FIRMWARE+N) ?

??SYSINTR_SHUTPOWER_DETECT為我定義的關(guān)機(jī)中的中斷。? ? ??

???N為當(dāng)前已定義的最大值(以保證此中斷未使用過)。


2. 在datasheet上查要使用的中斷號。

?? ?

?? 我用的是XEINT1/GPH01----->EINT1


3. 在s5pv210_sec_v1\oal\inc\intr_reg.h 中找到我們要用的虛擬中斷號IRQ_EINT1。


4. 在smdkv210\src\oal\oallib\intr.c中的BSPIntrInit()函數(shù)中加入對GPH01的初始化。

????//gph01 as eint1

??? v_pGPIOregs->GPH0.GP_CON &=? ~(0xf<<4);

??? //gph01 as eint1

????v_pGPIOregs->GPH0.GP_CON |=? (0xf<<4);

??? //gph01 pull disable
??? v_pGPIOregs->GPH0.GP_PUD &=~(0x3<<2);

??? //gph01 low level triggered???????

??? v_pGPIOregs->EINTCON.EXT_INT0_CON &=~(0xF<<4);????

??? //enable eint1?

??? v_pGPIOregs->EINTMSK.EXT_INT0_MASK &=~(0x1<<1);

??? //Filter Enable for EXT_INT[1] ---DISBLE

??? v_pGPIOregs->EINTFLT.EXT_FLT0_CON._FLT_CON0?? &=~(0x3<<14);?

??? //EINT1 interrupt clear???

??? v_pGPIOregs->EINTPND.EXT_INT0_PEND |=(0x1<<1);??

?? ?然后調(diào)用OALIntrStaticTranslate(SYSINTR_SHUTPOWER_DETECT, IRQ_EINT1)來注冊中斷。

?? ?然后使能中斷。

?? ?value = IRQ_EINT1;
?? ?OALIntrEnableIrqs(1, &value);

?? ?BSPIntrInit這個函數(shù)由s5pv210_sec_v1\oal\intr\intr.c的OALIntrInit()來調(diào)用,

?? ?OALIntrInit()最終由OEMInit()來調(diào)用。

?? ?看這個函數(shù)的注釋。

?? ?// ?This is Windows CE OAL initialization function. It is called from kernel
?? ?// ?after basic initialization is made.

?? ?他由內(nèi)核來調(diào)用的。


5. 修改OALIntrEnableIrqs函數(shù),加入我們對此中斷的使能。

??? if (PhysicalIRQ == PHYIRQ_EINT1)
??????? {
??????????? g_pGPIOReg->EINTMSK.EXT_INT0_MASK &=~(0x1<<1); //enable eint1
??????????? OALMSG(1, (L"+OALIntrEnableIrqs(%d,)\r\n", PhysicalIRQ));
??????? }

???????6. 修改OALIntrDisableIrqs函數(shù),加入我們對此中斷的關(guān)閉。

????????if (PhysicalIRQ == PHYIRQ_EINT1)
??????? {
?????????????????? g_pGPIOReg->EINTMSK.EXT_INT0_MASK |=(0x1<<1); //enable eint1
?????????????????? g_pGPIOReg->EINTPND.EXT_INT0_PEND |=(0x1<<1);? // Clear pending EINT1
?????????????????? OALMSG(1, (L"+OALIntrDisableIrqs(%d,)\r\n", PhysicalIRQ));??
??????? }

?? ?至此,對bsp修改完成,接下來寫驅(qū)動。

1. 在驅(qū)動的初始化函數(shù)中創(chuàng)建一個事件對象

?? ?gShutpowerIntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

?? ?此事件對象用于和中斷綁定,來阻塞我們自己寫的IST。


2. 然后將剛才創(chuàng)建的事件對象與中斷綁定。

?? ?InterruptInitialize(SYSINTR_SHUTPOWER_DETECT,gShutpowerIntrEvent, NULL, 0)


3. 創(chuàng)建我們自己的IST

?? ?gShutpowerIntrThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShutpowerIntrThread,this, 0, NULL);


4. 編寫IST完成我們在中斷到來時需要完成的關(guān)機(jī)動作。

?? ?IST的框架如下:

?? ?int WINAPI ShutpowerIntrThread(void) {

?? ? ? ? ?while(1) {

?? ? ? ? ? ? ? ? ?WaitForSingleObject(gShutpowerIntrEvent?,INFINITE);

?? ? ? ? ? ? ? ? ?關(guān)機(jī)代碼

?? ? ? ? ?}

?? ? ? ? ?InterruptDone(SYSINTR_SHUTPOWER_DETECT);

?? ?}

至此一個簡單的CE中斷關(guān)機(jī)驅(qū)動完成。

總結(jié)

以上是生活随笔為你收集整理的wince6.0 s5pv210 中断的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。