28J60接收中断的问题
开始正常收发UDP数据包,一段时间后就没接收。调试后发现28J60的中断不产生了,有谁试过这种情况吗 ffxz大哥在吗~请帮帮忙我读回28J60的状态
-- enc28j60 registers:
Filter: 0xbf
HwRevID: 0x06
Cntrl: ECON1 ECON2 ESTATEIREIE
0x040x800x010x000xc8
MAC: MACON1 MACON3 MACON4
0x0d 0x33 0x40
Rx : ERXSTERXNDERXWRPT ERXRDPT ERXFCON EPKTCNT MAMXFL
0x0000 0x19fe 0x0a500x0a500xbf 0x00 0x05ee
Tx : ETXSTETXNDMACLCON1 MACLCON2 MAPHSUP
0x19ff 0x1a33 0x0f 0x3f 0x10
现在是正常状态的。
到收不到数据后(不产生中断了) EIR寄存器就变成0x40 继续发数据变会成0x41 ESTAT 也为0x41 很有可能还是enc28j60与MCU之间的中断状态不一致,导致MCU认为中断已经清楚,而enc28j60外设认为中断状态还未清楚,从而导致问题的发生。 这问题有什么方法测试一下呢。 回复【楼主位】guocai
-----------------------------------------------------------------------
能不嫩把你的测试程序发我一份,我邮箱452920081@qq.com。 准确来讲,应该是 stm32某一次未捕获到 28j60的中断管脚 的下降沿跳变,从而使 28j60发生堵包(数据包一直未被处理)
http://cache.amobbs.com/bbs_upload782111/files_41/ourdev_649733HDB3FN.jpg
上面为正常处理情况,下面为数据包接收不到的情况 (原文件名:未命名1.jpg) 回复【5楼】zjwzcc无尘之剑
-----------------------------------------------------------------------
难道还要定时去查询28J60的状态吗?有没有其它办法啊? 我现在解决的方法:
程序里面肯定有定时器的,在某个定时中断里面,如:
void TIM4_IRQHandler(void)
{
enc28j60WriteOp(ENC28J60_BIT_FIELD_CLR, EIE, EIE_INTIE);//暂时关闭网络芯片全局中断
......
//定时中断处理
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE);//继续开启网络芯片接收中断
}
这样可以保证上面说的第二种情况发生时,通过关闭网络中断 拉高 电平,使cpu重新可以判断外部中断
页:
[1]