WINCE下s3c2410+cs8900 板子的网络问题解决
扫描二维码
随时随地手机看文章
CS8900+s3c2410上网掉线的问题及其解决办法
自我理解是,系统在运行网络的时候,经常会去使能网络中断,而造成网络复位了
找到 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通一会就断,解决方法
根本原因 在于 中断处理服务中,把已经产生的 中断 标志 给 清除掉了!
这样就丢失一次中断。因为原驱动里配置中断为上升沿触发!一次中断丢失,就导致不会再产生中断信号跳变,因为,只有在中断服务中读取了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;