注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Joyin的个人空间 https://home.eeworld.com.cn/space-uid-415548.html [收藏] [复制] [分享] [RSS]
日志

W5100的中断方式与单片机联合编程

已有 4921 次阅读2012-5-24 18:21 |个人分类:|

    w5100是自带网络协议的芯片,具体我不讲了,我就讲下中断方式应用,这个应用是采用TCP/IP网络协议,单片机是客户端跟服务器进行相连的。
    这里先讲两种寄存器,W5100_IR和W5100_S0_IR,后面这个这个芯片总共有4个S0\S1\S2\S3,这里我只用一个端口0,也就是W5100_S0_IR。W5100_IR是W5100中断寄存器,W5100_S0_IR是W5100端口0寄存器,是两个不同的寄存器。如果端口0有了一个连接信号,则W5100_IR里面的端口0中断位置1,同时W5100_S0_IR里面的连接位置1。其他的断开信号、接收到数据信号、超时信号类似。
    w5100有一个引脚INT,这个引脚正常的时候是高电平,当5100的端口产生连接、断开、接收到数据或超时时会产生低电平,这个低电平会一直保持低电平直到W5100_IR这个寄存器里面的值为0才会恢复成高电平。我就是用这个引脚来设计。将这个INT与单片机的某一个中断引脚相连就可以检测W5100模块是否有信号来了。
    当单片机检测到INT中断信号,进入中断服务程序,先读W5100_IR寄存器里面的值,如果端口0位置1了,就继续读W5100_S0_IR寄存器里面的值,如果寄存器里面的接收到数据位置1了,就置端口0接收到数据标志,下面就可以随功能进行设置了。
    成都浩然电子有相应的例程,例程都是用查询方式编程的,其实查询方式跟中断方式大多都相同,只是例程里面有一个部分的处理需要修改下才能使中断方式正常运行。就是void W5100_Interrupt_Process(void)这个中断处理程序框架,这个程序里面只进行了一次中断处理。如果有多个中断连续来了,这个程序就会导致以太网连接失败。我们只需要在这个函数最后再次读一下W5100_IR寄存器是不是等于0了,如果不是要返回到程序的开始重新执行下。这样一改,中断方式就没有问题了。
    这个问题出现我记录下,我在这里多花了一个星期的时间找原因,最后还是由一个前辈点醒了,所以说前辈是宝藏啊宝藏!我最初开始测试的时候在我自己的电脑上是可以连接服务器的,不停连接断开连接断开有时就会变成无法连接了。到了其他电脑,情况更差,基本上就只有刚上电那会儿才连接上,总之,我的程序肯定不行。后来经过单步调试、示波器测试发现,以太网的工作模式在每个电脑上是不一样的,这个方面我完全不懂,我只知道插上网线后,无法连接的电脑的以太网会有很多信号到我W5100上,我的单片机在W5100接收到很多中断的时候无法处理好,就是W5100_IR里面的值在我清了后会立即置位,也就是多中断的问题。后来前辈说你只要在中断处理程序后面再确认一下中断都处理好了再跳出程序就好了。最终是改好了,也就是上一个段落的方法。
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章