真的是大虾不愧是大虾,果然如此!
但是我读出来的数据还是不对,我把我的把程序写一下,大虾指点:
在此之前是初始化NIC,处于接收等待状态(300H=0x22)
Receive( )
{ //变量声明不写了
outportb(0x309,nextpage);//nextpage 是指向下一包的起始地址,初始化为00x4d
//在每次接收完一包后根据第二个信息控制byte调整,
//同时,也是让BNRY按此调整
outportb(0x308,0);
outportb(0x30a,18); //这里,我先读前18个byte,一是为了得到信息控制字,二
outportb(0x30b,0); //是看看是否收得对
outportb(0x300,0x12); //开读remote DMA
for(i=0;i<18;i++)
{ temp=inportb(0x310);
rcvbuf[i]=temp;
printf("%x\n",temp); //显示前18个byte
}
……//还有一些就是把数据收了存起来,不浪费您时间了。
}
但是我每次收到显示出来都是一些毫不正确的:
1.比如说,受到广播包时应该是:
| RSR的状态 |下一包的起始地址 | 长度低位 | 长度高位 |ff|ff|ff|ff|ff|ff|
|……本NIC的MAC 6 bytes……|……
2.如是单播包则应该是:
| RSR | nextpage |length | length| sending MAC | my MAC |…………
而我的却或是全0,或是全ff,或是全(别的数),反正,清一色一个数
我想应该是 读写DMA时出错。怎么办?