77范文网 - 专业文章范例文档资料分享平台

RTL8019AS使用 - 图文(5)

来源:网络收集 时间:2019-04-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

shl al,cl ; set the correct bit,

;逻辑左移1位,高位进c,地位补0 or [bx+di],al pop cx ret ;

; dx is high, ; bx is low. ; al is data

;====================== upd_crc: push cx

mov cx,8 ; do 8 bits;cx=次数 mov ah,0 upd_crc1:

shl bx,1 ; shift bx ;bx在最开始时被设置为0xffff ;逻辑左移1位,高位进c,地位补0

rcl dx,1 ; through dx;dx最开始被设置为0xffff ;带进位循环左移,高位进c,c进低位 rcl ah,1 ; carry is at bottom of ah ;带进位循环左移,高位进c,c进低位 xor ah,al ; xor with lsb of data

;逻辑异或,结果放在左边的ah里,相同为0,不同为1 rcr ah,1 ; and put in carry bit ;带进位的循环右移,c进高位,低位进c jnc upd_crc2 ;

; autodin is

x^32+x^26+x^23x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1 ;

xor dx,0000010011000001b

xor bx,0001110110110110b + 1 ;plus one for end-around carry. upd_crc2:

shr al,1 ; shift the data ; 循环右移,高位补0,低位进c loop upd_crc1 pop cx ret

以下是在keil c51里的c语言程序,为斑竹所写 点击这里打开。

//作者laogu http://www.laogu.com

//程序的功能是根据多播地址multicast_address[6]的值,计算出MAR0-MAR7,就是

21

multicast_filter[8];

//本程序指计算一个多播地址。如果有多个多播地址,将每个多播地址生成的multicast_filter[8]相或就可以了,

//例如根据多播地址 01:00:5e:00:00:01生成的 value1=multicast_filter[8]; //根据多播地址 01:00:5e:00:00:02生成的 value2=multicast_filter[8]; //那么对这两个多播地址生成的multicast_filter[8]=value1 | value2 ;将两个值相或 //很容易从这里得到如果要接收所有多播地址的数据包,MAR0--MAR7必须设置为0xff,就是说 //multicast_filter[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; #define al ax_value.bytes.low #define bl bx_value.bytes.low #define cl cx_value.bytes.low #define ah ax_value.bytes.high #define bh bx_value.bytes.high #define dh dx_value.bytes.high #define ax ax_value.word #define bx bx_value.word #define cx cx_value.word #define dx dx_value.word

#define shl_bx if((bx&0x8000)!=0){cf=1;}else{cf=0;};bx=bx<<1; #define shl_al if((al&0x80)!=0){cf=1;}else{cf=0;};al=al<<1; #define shr_al if((al&0x01)!=0){cf=1;}else{cf=0;};al=al>>1; #define rcl_dx

if((dx&0x8000)!=0){cf_temp=1;}else{cf_temp=0;};dx=dx<<1;if(cf){dx=dx+1;};cf=cf_temp; #define rcl_ah

if((ah&0x80)!=0){cf_temp=1;}else{cf_temp=0;};ah=ah<<1;if(cf){ah=ah+1;};cf=cf_temp; #define rcr_ah

if((ah&0x01)!=0){cf_temp=1;}else{cf_temp=0;};ah=ah>>1;if(cf){ah=ah+0x80;};cf=cf_temp;

#define rol_al if((al&0x80)!=0){cf=1;}else{cf=0;};al=al<<1;if(cf){al=al+1;}; #define ror_al

if((al&0x01)!=0){cf=1;}else{cf=0;};al=al>>1;if(cf){al=al+0x80;}; union u {unsigned int word;

struct{unsigned char high;unsigned char low;}bytes;//字节顺序为高位在前的2byte结构 };

union u ax_value; union u bx_value; union u cx_value; union u dx_value; bit cf; bit cf_temp;

unsigned char multicast_address[6]={0x01,0x00,0x5e,0x00,0x00,0x00};

22

//unsigned char multicast_address[6]={0x00,0x00,0x00,0x5e,0x00,0x01}; //只计算一个多播地址

//unsigned char multicast_address[6]={0x01,0x80,0xc2,0x00,0x00,0x00}; unsigned char multicast_filter[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //结果放在这里,就是MAR0--MAR7的值 //;;0x41,0x00,0x00,0x80,0x00,0x00,0x00,0x00; void up_crc(unsigned char al_byte) {

al=al_byte; ah=0;

for (cx=0;cx<8;cx++) { shl_bx; rcl_dx; rcl_ah; ah=ah^al; rcr_ah; if(cf){

dx=dx^0x04c1;// 0000,0100,1100,0001b

bx=bx^0x1db7; //0001,1101,1011,0110b + 1 ;plus one for end-around carry. } shr_al; } }

void add_mc_bits() {

unsigned char i; bx=0xffff; dx=0xffff; for(i=0;i<6;i++) {

up_crc(multicast_address[i]); } cl=8; al=dh; rol_al; rol_al; rol_al; al=al&0x07; bl=al; bh=bh^bh; al=dh;

23

ror_al; ror_al; al=al&0x07; cl=al; al=1;

for(i=0;i

multicast_filter[bx]=multicast_filter[bx] | al; } main() {

add_mc_bits(); //计算多播地址的MAR0-MAR7. while(1); }

24

RTL8019AS--如何接收一个数据包

我们在上面谈到了网卡的ram的结构,网卡ram是以256字节为一页,是按页存储的结构,16位的ram的地址的高8位又叫页码.

网卡的16k的ram地址从0x4000-0x7fff,从页0x40到页0x7f,一共有64页.这64页被用来接收和发送数据包用.

一般把前面的12页用来存放发送的数据包,后面的52页用来存放接收的数据包. 当然你也可以配置成前面52页用来接收,而后面的12页用来发送.

或者你也可以不使用那么多的缓冲区,比如只用32页来做为缓冲区,前面的6页用来发送,接下来的26页用来接收,而把空出来的32页给单片机使用,用来存储别的数据. 那么哪些页被用来做接收缓冲区由两个寄存器决定: Pstart(page start register) Pstop(page stop register)

PSTART,PSTOP是16位ram地址的高8位,也就是页码. 举个例子: PSTART=0x4c PSTOP =0x80

这时网卡将使用0x4c00-0x7fff的ram来存储接收到的数据包.PSTOP是0x80而不是0x7f,PSTOP

25

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库RTL8019AS使用 - 图文(5)在线全文阅读。

RTL8019AS使用 - 图文(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/596681.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: