W5500中断寄存器的理解
W5500中断部分,W5500中文手冊V1.0 写的不够清楚,该文是本人结合中英文手冊及自己理解,整理出有关中断部分的理解,如有不对的请指正。
一:引脚 INTn 为中断输出(Interrupt output)
低电平:W5500的中断生效。
高电平:无中断或者处于中断生效等待中
二:中断相关寄存器
2.1 IR (连接中断寄存器) [R/W] [0x0015] [0x00]
该寄存器主要指示网络连接错误或唤醒引起当的中断。
某位为1 且 该位中断没有被屏蔽就能够引发中断,INTn引脚将会被拉低。中断处理完成后,能够由主机写为‘1’清除该位中断. IR 为‘0×00’时,INTn引脚将会被拉高。 attachment_id=6553" rel="attachment wp-att-6553" style="margin:0px; padding:0px; border:0px; font-family:inherit; font-size:undefined; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; color:rgb(33,117,155); text-decoration:none">
2.2 IMR (连接中断屏蔽寄存器) [R/W][0x0016][0x00]
中断屏蔽寄存器(IMR)是用来屏蔽中IR中断的,某位写‘1’。则开启中断。写‘0’,关闭中断。
每一个中断屏蔽位相应中断寄存器(IR)中的一个位. 假设IMR某位写0,即使IR中相应位为1了。也不会引发中断。INTn引脚不会被拉低。

2.3 SIR ( Socket 中断寄存器) [R/W] [0x0017] [0x00]
SIR就是指示哪个Socket发生的中断的。
假设某个Socket发生的中断。该寄存器的相应位将被置为1 ,直到被主机置‘1’清除。
假设Sn_IR不等于‘0×00’, 就会引发中断,INTn引脚将被拉低。

2.4 SIMR (Socket 中断屏蔽寄存器) [R/W] [0x0018] [0x00]
SIMR寄存器来屏蔽中SIR中断的,某位写‘1’,则开启中断。写‘0’。关闭中断。

每一个中断屏蔽位相应中断寄存器(SIR)中的一个位. 假设SIMR某位写0,即使IR中相应位为‘1’了,也不会引发中断,INTn引脚不会被拉低。
2.5 Sn_IR (Socket n 中断寄存器) [R] [0x0002] [0x00]
Sn_IR 寄存器用于提供给Socket n 中断类型信息,如建立(Establishment)、终止(Termination)、接收数据(Receiving data)和超时(Timeout)。
当触发一个中断即Sn_IMR的相应位是’1′的时候,Sn_IR的相应位也将会变成‘1’。
假设想把Sn_IR位清零的话。主机应该将该位置‘1’

这里的[R],而不是[R/W] 表示不能由主机写‘1’让W5500产生中断。仅仅能由主机设置‘1’ 。清除某一位中断。
2.6 Sn_IMR (Socket n 中断屏蔽寄存器) [R/W] [0x002C] [0xFF]
Sn_IMR 负责屏蔽Socket n的中断。某位写‘1’。则开启中断;写‘0’。屏闭中断。
每一位都相应了Sn_IR寄存器的相应位。Socket n的中断触发而且Sn_IMR的相应位为‘1’时,Sn_IR的相应位变为‘1’。
假设Sn_IMR和Sn_IR的相应位均为‘1’且SIR 寄存器的相应为‘1’,INTn 引脚便会拉低并使主机产生中断。 attachment_id=6559" rel="attachment wp-att-6559" style="margin:0px; padding:0px; border:0px; font-family:inherit; font-size:undefined; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; color:rgb(33,117,155); text-decoration:none">
2.7 INTLEVEL (低电平中断定时器寄存器) [R/W] [0x0013 – 0x0014] [0x0000]
该寄存器用于设置中断生效等待的时间(IAWT)。当下一个中断触发。中断引脚将会在INTLEVEL时间后。拉低中断引脚(INTn)。 
如果某一时段 先后发生2个中断 ,Socket 0 和scoket1
A. 当Socket 0的超时中断被触发。 SIR[0]& S0_IR[3]设置为‘1’,指出是第0个Socket发生了超时中断。
接着 INTn 引脚才被拉低,告知主机发生了中断。
B. 当Socket 1的连接中断在前一个中断未处理完毕之前被触发,则INTn 引脚仍然为低,S1_IR[0] & SIR[1]位设置为‘1’。
C. 假设主机处理完中断。然后清理S0_IR[3]位及SIR[0],尽管此时S1_IR[0] & SIR[1]仍然保持为‘1’,INTn引脚仍将被拉高。
D. 即使S1_IR[0] & SIR[1]位被设置为‘1’,可是在 INTLEVEL 期间,INTn不能被拉低。
仅仅有过了INTLEVEL时间。INTn才干被拉低。
三:中断方式设计程序
通过以上介绍。可知几个寄存器之间有例如以下关系:
A:3个中断寄存器 IR,SIR ,Sn_IR,它们相应的3个中断屏蔽寄存器IMR。SIMR,Sn_IMR(也能够觉得是中断使能寄存器)。仅仅有使能相应位中断,该位为‘1’时才干引发中断。拉低INTn。
B:一次中断处理结束,清除相应状态位后。都会拉高INTn。假设还有别的中断状态寄存器为‘1’,就等待一定时间再拉低INTn。这个时间是由INTLEVEL寄存器来设定的。对于主机来说来一次中断,仅仅能处理一个事件。
C :IR寄存器与网络连接状态有关的寄存器。跟SIR,Sn_IR 没有直接关系。而SIR 和Sn_IR 是同一时候出现的,SIR 指出是第n个Socket 发生了中断事件,Sn_IR指出了Socket n 发生了什么类型中断事件,如收到数据 超时等。
因此假设主机採用中断方式,检測到INTn才干被拉低了。进入中断服务函数能够採用先推断是不是IR中断。不是再读取SIR状态,找到触发中断的那个Socket n,接着读取对应的Sn_IR 进行处理。每次处理完,须要主机对应寄存器的对应位清除。
By William
欢迎与我们很多其它交流:wiznetbj@wiznet.co.kr
WIZnet官方中文站点:http://www.iwiznet.cn
WIZnet官方中文博客:http://blog.iwiznet.cn
WIZnet MakerSpace博物馆:http://wiznetmuseum.com/
W5500中断寄存器的理解的更多相关文章
- W5500问题集锦(二)
attachment_id=5620" rel="attachment wp-att-5620" style="margin:0px; padding:0px; ...
- 高性能以太网芯片W5500 数据手册 V1.0(二)
继续给大家介绍W5500 数据手册. 2.4 固定数据长度模式(FDM) 在外设主机不能控制 SCSn 时,可以使用固定数据长度模式. 此时,SCSn 必须连接到低电平(保持接地).与此同 ...
- USB学习小记-HID类键盘的报告描述符的理解
前言 断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的.利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧. 在学习过程中, ...
- 基于W5500+Yeelink的远程灯光控制设计
概述 工具:物联网云平台Yeelink DHT11温湿度传感器 W5500EVB 编译环境:Keil4 目的:通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯.通过W ...
- 基于STM32F1的局域网通信模块W5500驱动
目录 说明 W5500 W5500.c 使用方法 说明 需要调整的内容为W5500.h中关于IP地址.端口号.子网掩码.网关等参数 W5500 #ifndef _W5500_H_ #define _W ...
- 操作系统 | 结合 CPU 理解一行 Java 代码是怎么执行的
根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...
- 理解CSS视觉格式化
前面的话 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...
- 彻底理解AC多模式匹配算法
(本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...
- 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
随机推荐
- PHP电影小爬虫(2)
学习了别人的爬虫后自己改的一个,算是又回顾了一下php的使用 我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们 ...
- IOS开发之Swift学习笔记
1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.
- 316 Remove Duplicate Letters 去除重复字母
给定一个仅包含小写字母的字符串,去除重复的字母使得所有字母出现且仅出现一次.你必须保证返回结果是所有可能结果中的以字典排序的最短结果.例如:给定 "bcabc"返回 "a ...
- IIS Express配置多站点同时运行
环境:Win10 Pro.Visual Studio 2015 Community.IIS Express 10 VS2015集成IIS Express,所以无需单独下载, 默认安装位置:C:\Pro ...
- 在已有spring的基础上集成hibernate
1.导入hibernate的包和spring的包 hibernate3.hibernate-jpa-2.0-api-.必须的包,log4j,log4j配置文件 1.1 导入Spring的依赖包 ...
- linux 安装 mongo
整个安装过程:下载安装包--> 解压,添加系统路径(是滴,不用安装解压即可) --> 创建数据目录 --> 启动mongod服务 --> 运行mongo 1.下载安装包 Mon ...
- html5——动画案例(大海)
太阳的发散效果主要是利用transform: scale(1.3),将物体变大 <!DOCTYPE html> <html lang="en"> <h ...
- 2016.01.22 前端学习 HTML/CSS
学习HTML/CSS http://edu.51cto.com/course/course_id-3116.html 明日实践
- 查看APK包名签名等信息
有些游戏第三方比如分享需要配置游戏包名和签名,不同渠道包名签名又不同,所以时常需要查看不同apk包等签名信息,之前是使用等微博开放平台的手机客户端查看apk签名,前提是知道包名,网上找了下查看签名和包 ...
- jenkins配置邮件通知
参考: https://www.cnblogs.com/imyalost/p/8781759.html 谢谢大佬~
