初级会员
- 积分
- 157
- 金钱
- 157
- 注册时间
- 2016-1-21
- 在线时间
- 30 小时
|
楼主 |
发表于 2016-9-5 09:09:46
|
显示全部楼层
本帖最后由 漆黑丨夜 于 2016-9-5 11:25 编辑
[mw_shl_code=c,true]//外部中断线6的中断服务函数
void EXTI9_5_IRQHandler(void)
{
EXTI->PR=1<<6; //清除LINE6上的中断标志位
while(DM9000_INT==0)
{
DMA9000_ISRHandler();
}
} [/mw_shl_code]
[mw_shl_code=c,true]//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 \r\n");
if(int_status & ISR_ROOS)printf("overflow counter overflow \r\n");
if(int_status & ISR_PRS) //接收中断
{
//接收完成中断,用户自行添加所需代码
}
if(int_status & ISR_PTS) //发送中断
{
//发送完成中断,用户自行添加所需代码
}
DM9000->REG=last_io;
}[/mw_shl_code]
我在接收完成和发送完成中试过添加打印语句,发现程序每隔一段时间(大约几个ms)就进入一次。按了KEY0发送数据到PC机上,反而没有看到打印的信息,这是不是代表着发送数据没有进入到这个中断?
另外,请问代码中:int_status=DM9000_ReadReg(DM9000_ISR);
DM9000_WriteReg(DM9000_ISR,int_status);这两句有什么意义吗?读取一个值再写回去?
|
|