搜索

w5500中断处理程序中的问题

[复制链接]
254|5
 楼主 | 2020-6-17 19:51 | 显示全部楼层 |阅读模式
本帖最后由 hszhzwd 于 2020-6-17 19:54 编辑

*******************************************************************************
* 描述    : W5500中断处理程序框架
*******************************************************************************
void W5500_Interrupt_Process(void)
{
        unsigned char i,j;

IntDispose:

        i=Read_W5500_1Byte(SIR);//读取端口中断标志寄存器        
        if((i & S0_INT) == S0_INT)//Socket0事件处理
        {
                j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器
                Write_W5500_SOCK_1Byte(0,Sn_IR,j);
                if(j&IR_CON)//在TCP模式下,Socket0成功连接
                {
                        S0_State|=S_CONN;//网络连接状态0x02,端口完成连接,可以正常传输数据
                }
                .
                .
                .
        }
        if(Read_W5500_1Byte(SIR) != 0)
                goto IntDispose;
}
上面程序中:
j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器
随后又将j写入Sn_IR(Write_W5500_SOCK_1Byte(0,Sn_IR,j);)
不理解其中的含义,请高手指教!


使用特权

评论回复
 楼主 | 2020-6-18 11:14 | 显示全部楼层
请高手指教,我都想破脑袋了,不知是啥意思。

使用特权

评论回复

评论

科技猎人 2020-6-19 09:37 回复TA
对于ir寄存器的各个位,是写1清0的,数据手册有明确说明。 你也可以读取后,写0xff,也肯定是全部清0。 
 楼主 | 2020-6-19 10:08 | 显示全部楼层
j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器
Write_W5500_SOCK_1Byte(0, ,j);//将j写回Sn_IR,相当于主机将Sn_IR中为1的位,再置1,结果是该位被清零。清除该中断。之后的程序是对该中断的处理。这样理解对吗?

使用特权

评论回复

评论

zlf1208 2020-6-19 10:33 回复TA
有的单片机的标志寄存器是写1清0的,你可以查阅单片机的相关技术文档。 
 楼主 | 2020-6-19 11:15 | 显示全部楼层
谢谢!!

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表