求助!!!!!!!!!!8019接收中断的配置问题!!小弟给各位大侠鞠躬了!!!!!
我遇到的问题是这样的:我想让我的lwip能用中断的方式接收数据包,但是我在写完中断这部分程序后发现,当rtl8019as在接收到数据包后并没有发送中断信号给CPU(用示波器观察没有中断信号产生).用轮询的方式就可以接收到网络上的ARP广播,这说明数据包肯定是被8019接收到了,但是却没有产生中断,我怀疑是网卡初始化配置的问题,我将IMR写入了0xff,初始化代码如下:
想了好久都没想通,请各位大侠帮帮忙,给我这个菜鸟指点一下迷津,我给各位鞠躬了.
void NicInit(void)
{
u8_t i;
u8_t j;
IODIR=IODIR|NET_RST;
IOCLR=NET_RST;
for(i=0;i <200;i++)
{
for(j=0;j <200;j++);
}
IOSET=NET_RST;
for(i=0;i <200;i++)
{
for(j=0;j <200;j++);
}
IOCLR=NET_RST;
for(i=0;i <200;i++)
{
for(j=0;j <200;j++);
}
WriteToNic(0x1f,0x00);
for(i=0;i <200;i++)
{
for(j=0;j <200;j++);
}
/**********************************************************************
1.Reg00命令寄存器: CR,命令寄存器,地址偏移量00H,为一个字节
位: 7 6 5 4 3 2 1 0
名字: PS1 PS0 RD2 RD1 RD0 TXP STA STP
//============================================
2.
RD2,RD1,RD0: 这3个位代表要执行的功能。
0 0 1 : 读网卡内存
0 1 0 : 写网卡内存
0 1 1 : 发送网卡数据包
1 * * : 完成或结束DMA的读写操作
//============================================
3.TXP位置1时发送数据包,发完自动清零
//============================================
4.
STA,STP:
这两个位用来启动命令或停止命令
1 0
启动命令
0 1
停止命令
//============================================
********************************************************/
WriteToNic(0x00,0x21); //使芯片处于停止模式,这时进行寄存器设置
for(i=0;i <200;i++)
{
for(j=0;j <200;j++);
} //延时10毫秒,确保芯片进入停止模式
page(3);
WriteToNic(0x04,0x00); //CONFIG1 :enable interrupt
page(0);
WriteToNic(0x0a,0x00); //清rbcr0
WriteToNic(0x0b,0x00); //清rbcr1
WriteToNic(0x0c, 0xe4); //RCR,监视模式,接收广播包
WriteToNic(0x0d, 0xe2); //TCR,loop back模式
page(0);
WriteToNic(0x01,0x4c); //PSTART=0X4C
WriteToNic(0x02,0x80); //PSTOP=0X80
WriteToNic(0x03,0x4c); //bnry=0x4c;
page(0);
WriteToNic(0x04,0x40); //TPSR,发送起始页寄存器
WriteToNic(0x07,0xff); //清除所有中断标志位,中断状态寄存器
WriteToNic(0x0f,0xff); //中断屏蔽寄存器, 写0的位置表示被屏蔽
WriteToNic(0x0e,0xcb); // 数据配置寄存器,8位dma方式
page(1);
WriteToNic(0x07,0x4d); //curr=0x4d
WriteToNic(0x01,0x52); //PAR硬件的物理地址(MAC地址)
WriteToNic(0x02,0x54);
WriteToNic(0x03,0x4c);
WriteToNic(0x04,0x19);
WriteToNic(0x05,0xf7);
WriteToNic(0x06,0x42);
WriteToNic(0x08,0x00); //MAR(全部写0,不接受多播)
WriteToNic(0x09,0x00);
WriteToNic(0x0a,0x00);
WriteToNic(0x0b,0x00);
WriteToNic(0x0c,0x00);
WriteToNic(0x0d,0x00);
WriteToNic(0x0e,0x00);
WriteToNic(0x0f,0x00);
WriteToNic(0x00,0x22); //这时让芯片开始工作
page(3);
WriteToNic(0x04,0x80); //CONFIG1 :enable interrupt
page(0);
WriteToNic(0x0c,0xcc); //将芯片设置成正常模式,跟外部网络连接
WriteToNic(0x0d,0xe0);
WriteToNic(0x00,0x22); //启动芯片开始工作
WriteToNic(0x07,0xff); //清除所有中断标志位
}
发表时间:2007年8月20日17:42:36