新聞中心

        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單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 仪陇县| 青田县| 许昌市| 南通市| 张家港市| 江口县| 新巴尔虎右旗| 阿鲁科尔沁旗| 宜都市| 江西省| 建平县| 都匀市| 孟州市| 涿鹿县| 潼南县| 昆山市| 西安市| 新巴尔虎右旗| 颍上县| 台南县| 南城县| 威远县| 襄垣县| 苍南县| 怀集县| 扶绥县| 青河县| 抚松县| 肇源县| 遂昌县| 淳安县| 漳浦县| 东丰县| 尚志市| 襄垣县| 芒康县| 邓州市| 手游| 崇信县| 兴宁市| 固镇县|