天线|RF射频
直播中

龙献益

7年用户 998经验值
私信 关注
[问答]

为什么DMA9000_ISRHandler()处理函数中没有添加代码也能收发数据?

最近在研究原子哥的网络通信实验,发现在dm9000.c中有一个外部中断线6的中断服务函数EXti9_5_IRQHandler(),里面调用了一个dm9000的中断处理函数DMA9000_ISRHandler()。但是在这个处理函数中没有添加代码,为什么程序也能跟PC机通讯收发数据?
在这个实验里发送和接收数据都是查询方式吗?会被其它中断打断而导致收发出错?
请大神们指教一下!

回帖(2)

王秀云

2019-11-7 09:08:24
这是DM9000的中断输入啊。。。你上代码,应该是有处理的。
举报

彭玉林

2019-11-7 09:20:14
[C] 纯文本查看 复制代码
//外部中断线6的中断服务函数void EXTI9_5_IRQHandler(void){        EXTI->PR=1<<6;                  //清除LINE6上的中断标志位                 while(DM9000_INT==0)        {                DMA9000_ISRHandler();        }}
[C] 纯文本查看 复制代码
//DM9000中断处理函数void DMA9000_ISRHandler(void){        u16 int_status;        u16 last_io;         last_io = DM9000->REG;        int_status=DM9000_ReadReg(DM9000_ISR);         DM9000_WriteReg(DM9000_ISR,int_status);//清除中断标志位,        DM9000的ISR寄存器的bit0~bit5写1清零                if(int_status & ISR_ROS)printf("overflow rn");    if(int_status & ISR_ROOS)printf("overflow counter overflow rn");                if(int_status & ISR_PRS)                //接收中断        {                   //接收完成中断,用户自行添加所需代码        }         if(int_status & ISR_PTS)                        //发送中断        {                 //发送完成中断,用户自行添加所需代码        }        DM9000->REG=last_io;        }
我在接收完成和发送完成中试过添加打印语句,发现程序每隔一段时间(大约几个ms)就进入一次。按了KEY0发送数据到PC机上,反而没有看到打印的信息,这是不是代表着发送数据没有进入到这个中断?
另外,请问代码中:int_status=DM9000_ReadReg(DM9000_ISR);
                           DM9000_WriteReg(DM9000_ISR,int_status);这两句有什么意义吗?读取一个值再写回去?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分