欢迎来到天天文库
浏览记录
ID:58863454
大小:30.00 KB
页数:10页
时间:2020-09-22
《基于RTL8019的以太网应用系统.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于RTL8019的以太网应用系统2007-11-0610:57:09本文已公布到博客频道校园·教育分类基于RTL8019的以太网应用系统基于RTL8019的以太网应用系统以太网接口模块是构造一给通用的基于网络的嵌入式Linux系统的基础,该接口模块的主要任务就是完成与外界信息的交互,以达到网络监控的目的。使用RTL8019作为以太网的物理层接口,它的基本工作原理:是在收到由主机发来的数据报后(从目的地址域到数据域),侦听网络线路。如果线路忙,就等到线路空闲为止,否则,立即发送数据桢。RTL8019为台湾芯片生产商Realtek公司第三代快速以太网连接
2、而设计,它支持多种嵌入式处理器芯片,内置FIFO缓存器用于发送和接受数据。系统硬件电路结构图:系统工作流程图:网络数据的发送流程: 网络数据的接收:RTL8019工作代码://RTL8019.c#include"GloblDef.h"#include"MMenage.h"#include"RTL8019.h"externBYTEMemAllocation(WORDsize);externvoidFreePage(BYTEpage);externBYTExdata*MemPageToPoint(BYTEpage);externBYTEWriteQueue
3、(BYTEpage,structQueuexdata*pQueue);BYTExdataLocalMACAddr[6]={0x52,0x54,0x4c,0x30,0x2e,0x2f};structQueuexdataQueueNetPacketIn;BYTEStartPageOfPacket; /*接收头文件信息*/structRTLReceiveHeader{ BYTEReceiveStatus; BYTENextPacketStartPage; BYTEPacketSizeLow; BYTEPacketSizeHigh;}Head
4、;Head须为全局变量.BYTExdataHead[4]; /*上一次传输起始页*/BYTELastSendStartPage;sbitRTLResetPin=RTL_RESET_PIN; /*读rtl8019寄存器端口*/BYTEReadReg(WORDport){ BYTExdata*p; p=(BYTExdata*)port; return*p;} /*写寄存器*/voidWriteReg(WORDport,BYTEvalue){ BYTExdata*p; p=(BYTExdata*)
5、port; *p=value;} /*选择寄存器页使用*/voidRTLPage(BYTEIndex){ /*设置CR,CR_TXP7-6位为0(为1,包重传)*/ BYTEtemp; temp=ReadReg(CR); temp=temp&0x3B; /*set7-6and3bitto0*/ Index=Index<<6; temp=temp
6、Index; WriteReg(CR,temp);} /*PRA为物理地址*/voidRTLInitial(){ BYTEtemp;
7、inti; /*硬件重启*/ RTLResetPin=1; for(i=0;i<255;i++); RTLResetPin=0; /*如果硬件重启时延很大,rtl自我初始化*/ for(i=0;i8、PAGE09、CR_ABORT_COMPLETE_DMA10、CR_STOP_COMMAND)); /*设置page0,stopcommand*/ WriteReg(PSTART_WPAGE0, RECEIVE_START_PAGE); /*Pstart */ WriteReg(PSTOP_WPAGE0, RECEIVE_STOP_PAGE); /*Pstop */ WriteReg(BNRY_WPAGE0, RECEIVE_START_PAGE); /*BNRY */ WriteReg(TPSR_WPAGE0, SE11、ND_START_PAGE0); /*TPSR */ WriteReg(RCR_WPAGE
8、PAGE0
9、CR_ABORT_COMPLETE_DMA
10、CR_STOP_COMMAND)); /*设置page0,stopcommand*/ WriteReg(PSTART_WPAGE0, RECEIVE_START_PAGE); /*Pstart */ WriteReg(PSTOP_WPAGE0, RECEIVE_STOP_PAGE); /*Pstop */ WriteReg(BNRY_WPAGE0, RECEIVE_START_PAGE); /*BNRY */ WriteReg(TPSR_WPAGE0, SE
11、ND_START_PAGE0); /*TPSR */ WriteReg(RCR_WPAGE
此文档下载收益归作者所有