初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2013-11-26
- 在线时间
- 0 小时
|
原子哥,能帮我解释下下面代码什么意思吗?谢谢!!
下面的代码在第52个实验ENC28J60网络模块实验 寄存器版本中的enc28j60.c中
//从网络获取一个数据包内容
//maxlen:数据包最大允许接收长度
//packet:数据包缓存区
//返回值:收到的数据包长度(字节)
u32 ENC28J60_Packet_Receive(u32 maxlen,u8* packet)
{
u32 rxstat;
u32 len;
if(ENC28J60_Read(EPKTCNT)==0)return 0; //是否收到数据包?
//设置接收缓冲器读指针
ENC28J60_Write(ERDPTL,(NextPacketPtr));
ENC28J60_Write(ERDPTH,(NextPacketPtr)>>8);
// 读下一个包的指针
NextPacketPtr=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0);
NextPacketPtr|=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0)<<8;
//读包的长度
len=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0);
len|=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0)<<8;
len-=4; //去掉CRC计数
//读取接收状态
rxstat=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0);
rxstat|=ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0)<<8;
//限制接收长度
if (len>maxlen-1)len=maxlen-1;
//检查CRC和符号错误
// ERXFCON.CRCEN为默认设置,一般我们不需要检查.
if((rxstat&0x80)==0)len=0;//无效
else ENC28J60_Read_Buf(len,packet);//从接收缓冲器中复制数据包
//RX读指针移动到下一个接收到的数据包的开始位置
//并释放我们刚才读出过的内存
ENC28J60_Write(ERXRDPTL,(NextPacketPtr));
ENC28J60_Write(ERXRDPTH,(NextPacketPtr)>>8);
//递减数据包计数器标志我们已经得到了这个包
ENC28J60_Write_Op(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);
return(len);
}
读下一个包的指针,读包的长度和读取接收状态都用到了ENC28J60_Read_Op(ENC28J60_READ_BUF_MEM,0)这个函数;
这个我函数明白是什么意思,但不知道这两个参数传进去后有什么作用,为什么能读到这么多东西???
原子哥,,,各位大神,,,求帮助啊!!!小弟在此先谢谢各位大神了!!!
|
|