[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);这两句有什么意义吗?读取一个值再写回去?
[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);这两句有什么意义吗?读取一个值再写回去?
举报