WINCE下网络PING通一会就断,解决方法
根本原因在于中断处理服务中,把已经产生的中断标志给清除掉了!
这样就丢失一次中断。因为原驱动里配置中断为上升沿触发!一次中断丢失,就导致不会再产生中断信号跳变,因为,只有在中断服务中读取了cs8900的 Interrupt status queue寄存器后,才会产生下一次中断!(见cs8900 datasheet 的 14页中关于 INTRQ的解释!
关于为什么,原驱动会把已经产生的中断标志给清除掉了!你可以跟踪一下 cs8900驱动中断服务中开中断关中断的过程!解决cs8900+s3c2410+wince平台网络断线的问题!
解决办法:
找到E:\WINCE420\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c
找到 BOOLOEMInterruptEnable() 函数里 case SYSINTR_ETHER:
if(Inited == FALSE)
{
s2410IOP->rEINTPEND = 0x200;
s2410INT->rSRCPND = BIT_EINT8_23; // byshim
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;