基于RTL8019的以太网应用系统.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于RTL8019的以太网应用系统 2007-11-06 10:57:09 本文已公布到博客频道校园·教育分类 基于RTL8019的以太网应用系统 基于RTL8019的以太网应用系统 以太网接口模块是构造一给通用的基于网络的嵌入式Linux系统的基础,该接口模块的主要任务就是完成与外界信息的交互,以达到网络监控的目的。 使用RTL8019作为以太网的物理层接口,它的基本工作原理:是在收到由主机发来的数据报后(从目的地址域到数据域),侦听网络线路。如果线路忙,就等到线路空闲为止,否则,立即发送数据桢。 RTL8019为台湾芯片生产商Realtek公司第三代快速以太网连接而设计,它支持多种嵌入式处理器芯片,内置FIFO缓存器用于发送和接受数据。 系统硬件电路结构图: 系统工作流程图: 网络数据的发送流程: ? 网络数据的接收: RTL8019工作代码: //RTL8019.c #include GloblDef.h #include MMenage.h #include RTL8019.h extern BYTE MemAllocation(WORD size); extern void FreePage(BYTE page); extern BYTE xdata *MemPageToPoint(BYTE page); extern BYTE WriteQueue(BYTE page,struct Queue xdata * pQueue); BYTE xdata LocalMACAddr[6]={0x52,0x54,0x4c,0x30,0x2e,0x2f}; struct Queue xdata QueueNetPacketIn; BYTE StartPageOfPacket; ??????????/* 接收头文件信息 */ struct RTLReceiveHeader { ?BYTE ReceiveStatus; ?BYTE NextPacketStartPage; ?BYTE PacketSizeLow; ?BYTE PacketSizeHigh; }Head; Head 须为全局变量. BYTE xdata Head[4]; ??????????/* 上一次传输起始页*/ BYTE LastSendStartPage; sbit RTLResetPin = RTL_RESET_PIN; ????????/* 读rtl8019 寄存器端口*/ BYTE ReadReg(WORD port) { ?BYTE xdata * p; ?p = (BYTE xdata *)port; ?return *p; } ????????????????/* 写寄存器*/ void WriteReg(WORD port,BYTE value) { ?BYTE xdata * p; ?p = (BYTE xdata *)port; ?*p = value; } ?????????????/* 选择寄存器页使用*/ void RTLPage(BYTE Index) { ??????????/* 设置 CR, CR_TXP 7-6位为 0(为 1 ,包重传) */ ?BYTE temp; ?temp = ReadReg(CR); ?temp = temp 0x3B;?????/*set 7-6 and 3 bit to 0*/ ?Index = Index6; ?temp = temp | Index; ?WriteReg(CR,temp); } ??????????????/* PRA 为物理地址 */ void RTLInitial() { ?BYTE temp; ?int i; ? ??????????????/* 硬件重启 */ ?RTLResetPin = 1; ?for(i = 0;i255;i++); ?RTLResetPin = 0; ???????????/* 如果硬件重启时延很大, rtl自我初始化 */ ?for(i=0;iDELAY_AFTER_HARDWARE_RESET;i++);? ? ???????????????/* 写重启口 */ ?temp = ReadReg(RESET_PORT); ?WriteReg(RESET_PORT,temp); ? ???????????????/* 初始化RTL 寄存器*/ ?WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); ?????????????/* 设置page0, stop command */ ?WriteReg(PSTART_WPAGE0,?RECEIV

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档