打印

w5500中断处理程序中的问题

[复制链接]
933|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hszhzwd|  楼主 | 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);)
不理解其中的含义,请高手指教!


使用特权

评论回复

相关帖子

沙发
hszhzwd|  楼主 | 2020-6-18 11:14 | 只看该作者
请高手指教,我都想破脑袋了,不知是啥意思。

使用特权

评论回复
评论
科技猎人 2020-6-19 09:37 回复TA
对于ir寄存器的各个位,是写1清0的,数据手册有明确说明。 你也可以读取后,写0xff,也肯定是全部清0。 
板凳
hszhzwd|  楼主 | 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的,你可以查阅单片机的相关技术文档。 
地板
hszhzwd|  楼主 | 2020-6-19 11:15 | 只看该作者
谢谢!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

38

帖子

1

粉丝