|
使用ENC28J60移植uip搭建网络,以太网控制器收到数据时,会产生中断,于是把中断口连接到GPIO口,设置为外部中断,当接收到数据时,进入中断把中断标志ETH_INT置1,然后轮询ETH_INT为1时接收数据;
在使用中发现:在接收少量数据时,可以正常运行,但是连续发送大量数据时,一段时间后单片机就无法收到;甚至持续ping一段时间就会无响应。
检查问题时,发现竟然无法进入中断;反复调试结果还是不行,不知道是什么问题导致的,上网也没找到比较有用的结论。
后来想到额一个解决办法,在主循环中直接通过SPI接口读取ENC28J60的对应寄存器来获取状态;
EPKTCNT是以太网数据包计数寄存器,当接收到一个数据包并将其完整写入缓冲器时,EPKTCNT寄存器将递增,所以只要EPKTCNT非0即代表有未处理数据,因此在轮询中使用 enc28j60Read(EPKTCNT)函数来判断是否有数据并进行处理。
这种方式经测试运行非常稳定,现在就干脆不用中断了。
|
|