新聞中心

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

        51單片機RTL8019AS網卡驅動程序

        作者: 時間:2010-08-23 來源:網絡 收藏

          page(0);

          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;

        51單片機相關文章:51單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 景洪市| 台前县| 翼城县| 湖北省| 察隅县| 彭山县| 赞皇县| 安阳市| 南皮县| 凤凰县| 乃东县| 吉木萨尔县| 鸡泽县| 南汇区| 西平县| 安化县| 定安县| 永安市| 南靖县| 右玉县| 曲周县| 泸定县| 沙坪坝区| 济阳县| 瑞昌市| 绥棱县| 革吉县| 宿州市| 酒泉市| 枣庄市| 尼勒克县| 兴国县| 西贡区| 亳州市| 阆中市| 盐池县| 晋城| 兰西县| 太康县| 福贡县| 拉孜县|