- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)