DM9000中断问题
开发板向pc机发送一个ARP包,然后电脑返回一个ARP包,开发板解析正常,但是DM9000的中断引脚的电平一直没有改变导致老是进入中断。不知道连接DM9000的中断引脚为什么中断后电平改变。按道理是我配置了INIT脚低电平有效。配置后设置低电平中断。当接收到数据的时候INIT为低电平,然后进入中断。但是一直就低了。没有高电平过导致一直进入中断。求救。void dm9000_handle()
{
__asm__(
"sub lr, lr, #4\n"
"stmfd sp!, {r0-r12, lr}\n"
:
:
);
recv_data();
/* 清除中断 */
EINT0PEND = ~0x0;
VIC0ADDRESS = 0;
VIC1ADDRESS = 0;
printf("\n******* %d**********\n\r",count);
count++;
if(count==1024)
count=10;
__asm__(
"ldmfd sp!, {r0-r12, pc}^ \n"
:
:
);
}
void init_irq()
{
GPNCON |= (0x2<<14);/*GPN7外部中断对应 ExtInterrupt*/
EINT0CON0 = (0x1<<12); /*高电平触发中断*/
EINT0MASK=0;
VIC0INTENABLE |= 0b10;/*使能Externalinterrupt 4 ~ 11*/
EINT7_VECTORADDR = (int)dm9000_handle;
__asm__(
"mrc p15,0,r0,c1,c0,0\n"
"orr r0,r0,#(1<<24)\n"
"mcr p15,0,r0,c1,c0,0\n"
"mrs r0,cpsr\n"
"bic r0, r0, #0x80\n"
"msr cpsr_c, r0\n"
:
:
);
}
u32 dm9000_rx(u8 *data)
{
u16 status,len;
u16 tmp;
u32 i;
u8 ready = 0;
/*判断是否产生中断,且清除*/
if(dm9000_reg_read(DM9000_ISR) & 0x01)
dm9000_reg_write(DM9000_ISR,0x01);
else
return 0;
/*空读*/
ready = dm9000_reg_read(DM9000_MRCMDX);
if ((ready & 0x01) != 0x01)
{
ready = dm9000_reg_read(DM9000_MRCMDX);
if ((ready & 0x01) != 0x01)
return 0;
}
/*读取状态*/
status = dm9000_reg_read(DM9000_MRCMD);
/*读取包长度*/
len = DM_DAT;
/*读取包数据*/
if(len<PTK_MAX_LEN)
{
for(i=0;i<len;i+=2)
{
tmp = DM_DAT;
data = tmp & 0x0ff;
data = (tmp>>8)&0x0ff;
}
}
return len;
} 我在这一块也遇到问题了,进入中断后串口上打印不出主机的IP和MAC地址,打印的是开发板的,我的QQ:1092352710,咱两个可以讨论一下 哥们方便把你的qq给搜说一下嘛?
页:
[1]