There are currently 5 posts.
Font size: Small - 100% (Default)  Content converter: No conversion
 
Clicks Replies
1505 4
发现了AVR uip网卡程序的一个bug
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 1 Posted at: 5/11/17 23:02
当笔记本没有插电源的时候插上USB线供电,尽管LED灯已亮,但连接状态一直为未连接。
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 2 Posted at: 5/11/17 23:06

【故障2】

ping 192.168.1.50

不通,数码管一直为1, 70

巨大八爪鱼
武林盟主 二十一级
Reply
Floor 3 Posted at: 5/11/17 23:07
故障2的现象是没有输出网卡中断。
巨大八爪鱼
武林盟主 二十一级
Reply
Floor 4 Posted at: 5/11/17 23:21

这些故障应该都是INT2上的低电平干扰造成的。为了增强抗干扰能力,可以在主循环中每5秒就自动检查一次pkt_cnt=0时中断EIE是否处于关闭状态(也就是判断是否产生了死锁),若判断出产生了死锁,则应及时打开EIE使系统恢复正常。

同时也要检查连接状态改变中断是否是开启的状态,并定时自动更新连接状态,而不是完全依靠中断来通知。

巨大八爪鱼
武林盟主 二十一级
Reply
Floor 5 Posted at: 5/11/17 23:43

if (pkt_in)
{
    asm("wdr");
    GICR &= ~_BV(INT2); // 进入临界区之前必须关网卡中断!
    read_packet();
    ENC28J60_SelectBank(1);
    if (!ENC28J60_Read(EPKTCNT)) // 若已接收完全部数据包
    {
        pkt_in = 0;
        ENC28J60_SetBits(EIE, EIE_PKTIE, ENCSET); // 则重开数据包接收中断
    }
    GICR |= _BV(INT2); // 重开网卡中断
}


在上面的代码中,当pkt_in等于0时若中断PKTIE处于关闭状态,就会发生死锁。

Reply the post
Content:
User: You are currently anonymous.
Captcha:
Unclear? Try another one.
(Shortcut key: Ctrl+Enter)
Post Information
Clicks: 1505 Replies: 4
Author: 巨大八爪鱼
Last reply: 巨大八爪鱼
Last reply time: 5/11/17 23:43
Bar Hot Posts
Bar Good Posts
Announcements