导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:老古,我错了:)[easy]

 *第1128篇: 硬件:老古,我错了:)

  
楼 主:easy 2001年11月17日14:27
 硬件:老古,我错了:)
老古大虾:您给我指出的错误是我的笔误,我是用0x0a读的:就差这一步了
您曾提到PC上的DMA只有16位方式,486,386呢?
但是我读出来的数据还是不对,我把我的把程序写一下,大虾指点:
 在此之前是初始化NIC,处于接收等待状态(300H=0x22)
Receive( )
{     //变量声明不写了
  outportb(0x309,nextpage);//nextpage 是指向下一包的起始地址,初始化为00x4d
                           //在每次接收完一包后根据第二个信息控制byte调整,
                           //同时,也是让BNRY按此调整
  outportb(0x308,0);
  outportb(0x30a,18);      //这里,我先读前18个byte,一是为了得到信息控制字,二
  outportb(0x30b,0);       //是看看是否收得对
  outportb(0x300,0x0a);    //开读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时出错。怎么办?
  
2楼:leech42 2001年11月17日15:44
 你的nextpage是不是等于当前BNRY+1呀!
  
3楼:easy 2001年11月17日16:00
 leech42,在初始化网卡时nextpage=0x4d(4c-7f是接收缓冲),在收完包后,随即按控制信息字的第二个byte调整,是BNRY+1。
  
4楼:leech42 2001年11月17日20:05
 还有你的初始化程序看一下,会不会是你的初始值可能出错的哦!我就是这样子的。
  
5楼:easy 2001年11月17日21:53
 leech42,我的初始化设定是
init8019()
{ page(0);
  01=0x4c;
  02=0x80;
  03=0x4c;
  04=0x40;
  07=0xff;
  08=0;09=0;
  0a=0;=b=0;
  0c=0x04;
  0d=0x02;
  0e=0x48;
  0f=0xff;
  
 readmymac();//把00--12的mac读到page 1的01-06里
 page(1);
 07=0x4d;
 08--0f 按老古说的设置;
 nextpage=0x4d;
 00=0x22;//处于等待接首状态。
 0d=0 ;//正常工作模式,自动追加CRC,采用改变后退算法,这些与接收应该没什么关系的
}请您指点一下
  
6楼:huangyan 2001年11月17日22:40
 你先关所有屏蔽,再读试试。
用CURR 与NBRY来测试是否有包,测后再读看是否正确。
我就是这样读的。只是少一字节读不出来其它倒差不多。
你可以用我给你的程序改成单片机试试。

>>>>>>对该主题发表你的看法

本主题贴数6,分页: [第1页]


[上一篇主题]:闲聊:介绍两种带数据接口的来电显示接收装置

[下一篇主题]:MSP430单片机:有关时钟问题