WINCE下s3c2410+cs8900 板子的網絡問題解決
CS8900+s3c2410上網掉線的問題及其解決辦法
自我理解是,系統(tǒng)在運行網絡的時候,經常會去使能網絡中斷,而造成網絡復位了
找到 E:WINCE420WINCE420PLATFORMSMDK2410KERNELHALcfw.c
找到 BOOL OEMInterruptEnable() 函數 里 case SYSINTR_ETHER:
使網卡的初始化只出現一次,因為每次初始化以后,連接就會斷掉
加一個全局變量 Inited == FALSE
case SYSINTR_ETHER: // Ethernet on EINT9.
if(Inited == FALSE) // edit by andy
{
s2410IOP->rEINTPEND = 0x200;
s2410INT->rSRCPND = BIT_EINT8_23; // by shim
if (s2410INT->rINTPND & BIT_EINT8_23)
s2410INT->rINTPND = BIT_EINT8_23;
Inited = TRUE;
}
s2410IOP->rEINTMASK &= ~0x200;
s2410INT->rINTMSK &= ~BIT_EINT8_23;
break;
http://hi.baidu.com/fei_chen/blog/item/c961e933ff04d342ac4b5f3c.html
WINCE下網絡PING通一會就斷,解決方法
根本原因 在于 中斷處理服務中,把已經產生的 中斷 標志 給 清除掉了!
這樣就丟失一次中斷。因為原驅動里配置中斷為上升沿觸發(fā)!一次中斷丟失,就導致不會再產生中斷信號跳變,因為,只有在中斷服務中讀取了cs8900的 Interrupt status queue寄存器后,才會產生下一次中斷!(見cs8900 datasheet 的 14頁 中關于 INTRQ的解釋!
關于為什么 , 原驅動 會 把已經產生的 中斷 標志 給 清除掉了! 你可以跟蹤一下 cs8900驅動 中斷服務中 開中斷 關中斷的過程! 解決cs8900+s3c2410+wince平臺網絡斷線的問題! <解決辦法: 找到 E:WINCE420WINCE420PLATFORMSMDK2410KERNELHALcfw.c
找到 BOOL OEMInterruptEnable() 函數 里 case SYSINTR_ETHER:
if(Inited == FALSE) s2410IOP->rEINTPEND = 0x200; s2410INT->rSRCPND = BIT_EINT8_23; // by shim
if (s2410INT->rINTPND & BIT_EINT8_23) s2410INT->rINTPND = BIT_EINT8_23; Inited = TRUE; s2410IOP->rEINTMASK &= ~0x200; s2410INT->rINTMSK &= ~BIT_EINT8_23; break;在 全局 定義: BOOL Inited = FALSE;這樣改過后! 可能需要 全部重新編譯, clean 后 再重新 build !! 再測試網絡!就沒有問題了!
轉貼,測試正確
解決辦法:
找到 E:WINCE420WINCE420PLATFORMSMDK2410KERNELHALcfw.c
找到 BOOL OEMInterruptEnable() 函數 里 case SYSINTR_ETHER:
if(Inited == FALSE)
{
s2410IOP->rEINTPEND = 0x200;
s2410INT->rSRCPND = BIT_EINT8_23; // by shim
if (s2410INT->rINTPND & BIT_EINT8_23)
s2410INT->rINTPND = BIT_EINT8_23;
Inited = TRUE;
}
s2410IOP->rEINTMASK &= ~0x200;
s2410INT->rINTMSK &= ~BIT_EINT8_23;
break;
在 全局 定義: BOOL Inited = FALSE;





