四.读取网卡的网卡地址

本文介绍了一个C语言实现的程序,用于读取网卡的物理地址。通过定义union数据结构,程序能够从特定RAM区域读取并存储网卡的48位物理地址。在读取过程中,使用了RSAR1、RSAR0、RBCR1和RBCR0寄存器进行DMA内存读取操作,最终将地址存储在mynodeid数组中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成上面的过程之后,网卡还不能正确的接收数据包,因为我们还没有对网卡的物理地址(网卡地址,48位的地址)进行设置。网卡还不知道它应该什么地址的数据包。要对网卡的物理地址进行设置,就必须知道网卡的物理地址是多少。
读取网卡的物理地址的子程序:
union u {uint word; struct{uchar high;uchar low;}bytes;}; //我定义的数据结构,为两个字节的结构 //,可以按照uint(unsigned int)来读取,也可以按照高低字节high和low来读取。

union u mynodeid[3];//存储网卡的物理地址
union u protocal; //临时变量
void readmynodeid()
{uchar data i,temp;
page(0);
reg09=0;//寄存器RSAR1 dma read highaddress=0
reg08=0;//RSAR0 dma read lowaddress=0;
reg0b=0; //RBCR1 read count high
reg0a=12;//RBCR0 count low
reg00=0x0a;//dma read and start
for (i=0;i<6;i++)
{ temp=reg10;//读取一个字节


if (i % 2==0)
{protocal.bytes.high=temp;}
else {protocal.bytes.low=temp;mynodeid[i/2].word=protocal.word;}

temp=reg10;//读取一个重复的字节&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值