新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機RTL8019AS的網卡驅動程序

        基于51單片機RTL8019AS的網卡驅動程序

        作者: 時間:2012-01-20 來源:網絡 收藏

         page(0);

        本文引用地址:http://www.104case.com/article/172229.htm

          reg0a=0x00;

          reg0b=0x00;

          reg0c=0xE0; //monitor mode (no packet receive)

          reg0d=0xE2; //loop back mode

          //使用0x40-0x4B為的發送緩沖區,共12頁,剛好可以存儲2個最大的以太網包。

          //使用0x4c-0x7f為的接收緩沖區,共52頁。

          reg01=0x4C; //Pstart 接收緩沖區范圍

          reg02=0x80; //Pstop

          reg03=0x4C; //BNRY

          reg04=0x40; //TPSR 發送緩沖區范圍

          reg07=0xFF;/*清除所有中斷標志位*/

          reg0f=0x00;//IMR disable all interrupt

          reg0e=0xC8; //DCR byte dma 8位dma方式

          page(1); //選擇頁1的寄存器

          reg07=0x4D; //CURR

          reg08=0x00; //MAR0

          reg09=0x41; //MAR1

          reg0a=0x00; //MAR2

          reg0b=0x80; //MAR3

          reg0c=0x00; //MAR4

          reg0d=0x00; //MAR5

          reg0e=0x00; //MAR6

          reg0f=0x00; //MAR7

          initNIC(); //初始化MAC地址和網絡相關參數

          //將設置成正常的模式,跟外部網絡連接

          page(0);

          reg0c=0xCC; //RCR

          reg0d=0xE0; //TCR

          reg00=0x22; //這時讓芯片開始工作?

          reg07=0xFF; //清除所有中斷標志位

          }

          void send_packet(union netcard *txdnet,unsigned int length)//ne2000發包子程序

          {//發送一個數據包的命令,長度最小為60字節,最大1514字節需要發送的數據包要先存放在txdnet緩沖區

          unsigned char i;

          unsigned int ii;

          page(0);

          if(length60) length=60;

          for(i=0;i3;i++)

          txdnet->etherframe.sourcenodeid[i]=my_ethernet_address.words[i];

          txd_buffer_select=!txd_buffer_select;

          if(txd_buffer_select)

          reg09=0x40 ; //txdwrite highaddress

          else

          reg09=0x46 ; //txdwrite highaddress

          reg08=0x00; //read page address low

          reg0b=length>>8; //read count high

          reg0a=length0xFF; //read count low;

          reg00=0x12; //write dma, page0

          for(ii=4;ii reg10=txdnet->bytes.bytebuf[ii];

          for(i=0;i6;i++){ //最多重發6次

          for(ii=0;ii1000;ii++) //檢查txp為是否為低

          if((reg000x04)==0) break;

          if((reg040x01)!=0) break; //表示發送成功

          reg00=0x3E;



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 海宁市| 周口市| 庆安县| 临朐县| 曲沃县| 获嘉县| 兰考县| 闽清县| 临沂市| 龙游县| 体育| 西昌市| 襄樊市| 林口县| 民勤县| 高唐县| 红河县| 德安县| 湾仔区| 白银市| 兴化市| 云浮市| 尚志市| 保靖县| 蒙自县| 高雄县| 金湖县| 瑞安市| 仙居县| 响水县| 苏州市| 平阳县| 六安市| 台安县| 佛学| 西贡区| 津市市| 鹤岗市| 墨竹工卡县| 阜阳市| 阿拉善左旗|