4164|3

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

以太网的缓冲区不够用怎么办?请教各位帮忙! [复制链接]

IP数据报的最大长度是65535字节,然后它会分片,分成长度为1500字节的片(40多片)传给MAC层,发送

(1)小弟最近很困惑,假如来了一个接收中断,那如果接收端的以太网的buffer只有buffer[8][1500]这么大怎么办?
(2)9200手册上说这个缓冲区是循环的,我不太理解循环缓冲区的原理,假如说来了一次中断,那么进入中断处理函数,读了buffer[0][1500],然后把这个buffer置为可用,那中断函数不退出就能再接到数据存到buffer[0][1500]中么?
(3)9200手册上说EMAC_RBQP是接收缓冲队列指针,初始化成接收缓冲区的首地址
regs->EMAC_RBQP = (AT91_REG) tdList;
那这个指针是不是始终指向首地址啊?还是会根据接收到的不同的buffer自动增加?对硬件理解不够,困惑ing

以下是小弟写的接收处理函数,用的是9200的EMAC+DM9161的PHY,在lwip下的移植
希望熟悉9200EMAC的朋友给予指点,谢谢!

static struct pbuf *
low_level_input(struct netif *netif)
{
struct pbuf *p, *q;
struct pbuf *h;
u16_t len;
unsigned char *p_recv;
unsigned int pktlen,total_len=0;
u16_t rxBuffIndex=0;
u16_t i=0;


//得到本次接收数据的总长度
while(tdList[i++].addr & EMAC_DESC_DONE);
total_len+=MAX_RBUFF_SZ;

if(total_len==MAX_RBUFF_SZ)
total_len=0;


/* We allocate a pbuf chain of pbufs from the pool. */
p = pbuf_alloc(PBUF_RAW, total_len, PBUF_POOL);

if (p != NULL)
{

q=p;

#if ETH_PAD_SIZE
pbuf_header(q, -ETH_PAD_SIZE); /* drop the padding word */
#endif

//原来的bit0应该初始化成0,受到数据EMAC_DESC_DONE自动置位
while(tdList[rxBuffIndex].addr & EMAC_DESC_DONE)
{

p_recv =(char *)(tdList[rxBuffIndex].addr & 0xFFFFFFFC);;
pktlen = tdList[rxBuffIndex].size & 0x7ff; /* Length of frame including FCS */
if(q!=NULL)
{
memcpy((char *)q->payload, p_recv, pktlen);
q->len=pktlen;
}

//清零后这个缓冲区可以继续接收别的数据?
tdList[rxBuffIndex].addr &= ~EMAC_DESC_DONE; /* reset ownership bit */
if (rxBuffIndex == MAX_RX_DESCR-1) /* wrap after last buffer */
rxBuffIndex = 0;
else
rxBuffIndex++;

q=q->next;


}


#if ETH_PAD_SIZE
pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */
#endif


#if LINK_STATS
lwip_stats.link.recv++;
#endif /* LINK_STATS */
}
else
{
#if LINK_STATS
lwip_stats.link.memerr++;
lwip_stats.link.drop++;
#endif /* LINK_STATS */
}

return p;
}

最新回复

您好,不知道前面各位的问题解了没,你们说的问题小弟并不太懂,但我们目前是divacom在中国区域的总代理,从03年来一直专注于做DM9000及DIVACOM全线产品,通过我们可以找到原厂的工程师做技术支持,当然,是免费提供的,说不定我能帮得上大家的忙,以下是我的联系方式    QQ:1259987438 电话:027-87163610 (0)13554272382 王洪武  详情 回复 发表于 2009-12-14 13:27
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也想了解,谢谢LZ.
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
特价供应芯片:
〖DAVICOM〗 DM9000AEP/BEP/EP  DM9161AEP/EP  DM9102DEP  等等
〖LEADTREND〗 LD7535BL  LD7575PS LD7576  LD7552 等等
〖WINBOND〗 W25X16V  W25X20   W25X40AV  W25X80  等等
〖SAMSUNG〗 S3C44BOX01  S3C2410AL-20/26  S3C2440AL-40  等等
〖PHILIPS〗 UDA1341TS  SAA7121H  SAA7113H  SAA7131E  等等


   供应商:深圳市腾盛科技有限公司
   网  站:http://www.sztsic.com/
   电  话:0755-61329316,61329587
   传  真:0755-61329587
   E-MAIL:liancarol@126.com
   NSM :liancarol@live.cn  QQ:455026927
   地 址:深圳福田新亚洲电子城
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
您好,不知道前面各位的问题解了没,你们说的问题小弟并不太懂,但我们目前是divacom在中国区域的总代理,从03年来一直专注于做DM9000及DIVACOM全线产品,通过我们可以找到原厂的工程师做技术支持,当然,是免费提供的,说不定我能帮得上大家的忙,以下是我的联系方式    QQ:1259987438 电话:027-87163610 (0)13554272382 王洪武
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表