新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機RTL8019AS網(wǎng)卡驅(qū)動程序

51單片機RTL8019AS網(wǎng)卡驅(qū)動程序

作者: 時間:2010-08-23 來源:網(wǎng)絡 收藏

  page(0);

  reg0a=0x00;

  reg0b=0x00;

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

  reg0d=0xE2; //loop back mode

  //使用0x40-0x4B為的發(fā)送緩沖區(qū),共12頁,剛好可以存儲2個最大的以太網(wǎng)包。

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

  reg01=0x4C; //Pstart 接收緩沖區(qū)范圍

  reg02=0x80; //Pstop

  reg03=0x4C; //BNRY

  reg04=0x40; //TPSR 發(fā)送緩沖區(qū)范圍

  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地址和網(wǎng)絡相關(guān)參數(shù)

  //將設置成正常的模式,跟外部網(wǎng)絡連接

  page(0);

  reg0c=0xCC; //RCR

  reg0d=0xE0; //TCR

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

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

  }

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

  {//發(fā)送一個數(shù)據(jù)包的命令,長度最小為60字節(jié),最大1514字節(jié)需要發(fā)送的數(shù)據(jù)包要先存放在txdnet緩沖區(qū)

  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++){ //最多重發(fā)6次

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

  if((reg000x04)==0) break;

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

  reg00=0x3E;

51單片機相關(guān)文章:51單片機教程




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉