当前位置:首页 > 单片机 > 单片机
[导读] 五.发送数据包模块5.1发送数据包模块功能发送数据包时,先将待发送数据包通过远程DMA写入芯片RAM,给出发送缓冲区首地址和数据包长度,即可实现RTL8019AS的数据发送。RTL8019AS会自动按以太网协议完成发

五.发送数据包模块

5.1发送数据包模块功能

发送数据包时,先将待发送数据包通过远程DMA写入芯片RAM,给出发送缓冲区首地址和数据包长度,即可实现RTL8019AS的数据发送。RTL8019AS会自动按以太网协议完成发送并将结果写入状态寄存器。

5.2发送数据包模快的数据结构

1>_pkst

struct _pkst{

struct _pkst *STPTR;//前一个结构数组

unsigned intlength;//以太网帧报头长度长度14字节

unsigned char*DAPTR;//报头的指针

};

2>ipethernet

typedef struct{

uint8DestMacId[6];/*目的网卡地址*/

uint8SourceMacId[6];/*源网卡地址*/

int16NextProtocal;/*下一层协议*/

} ipethernet;

3>定义数据结构:

struct _pkst* TxdData;

struct _pkst *ExPtr;

5.3发送数据包模块组成


第一部分:ARM LPC2210把数据写到RTL8019AS RAM中

该过程涉及以下几个寄存器:

?RBCR0,RBCR1:远程DMA数据字节技术器

?RSAR0,RSAR1:远程DMA起始地址

?CR:发出远程DMA开始命令

1>计算发送包帧的长度

2>设置远程DMA起始地址寄存器(RSAR0,RSAR1),使远程DMA起始地址寄存器为发送缓冲区首地址

3>设置远程DMA字节计数器寄存器为发送数据帧的长度

4>启动远程DMA写

设置CR命令寄存器使DMA开始远程写。

5>将数据写到远程DMA 0x10号寄存器处

6>清零远程DMA字节计数器为0,并终止远程DMA写

7>清除所有中断标志

第二部分:RTL8019AS将数据发送到以太网

在ARM LPC2210把数据通过远程DMA写到RTL8019AS RAM之后,RTL8019AS芯片通过本地DMA将数据发送到以太网。

该过程涉及以下寄存器:

?TPSR:设置传输数据包开始页面地址

?TBCR0,TBCR1:设置传输数据包的字节计数。

?CR:发出发送数据包的指令。

设置寄存器结束后,RTL8019AS会自动用本地DMA发数据。

1>设置要发送包的起始页

配置TPSR(发送开始页寄存器):把发送缓冲区首地址赋值给TPSR.

2>判断数据包长度,若小于60字节,补足60字节

3>设置传输数据包的字节计数

设置TBCR0,TBCR1为数据包长度

4>发送数据前先清除所有中断源

5>启动本地DMA发送数据包

配置CR命令寄存器为3E发送数据包

6>包发送完后,判断是否出错,若发送错误则进行重发,但只重发六次

?读取命令寄存器(CR)中的TXP位:判断数据包是否发送完毕。没有发送完,则循环等待包发送完。

?读TSR(传输状态寄存器):判断PTX位是否为1,若为1说明传输正确,退出程序。否则启动DMA重新传输数据。

5.4发送数据包模块的接口

发送包模块调用了写数据子模块,读数据子模块和页面切换子模块

?读数据子模块:从RTL8019AS芯片中把数据读出。

?写数据子模块:将数据写入RTL8019AS芯片中

?页面切换子模块:可选择Page0,Page1,Page3三个页面。



5.5发送数据包模块程序

/****************************Copyright(c)********************

**西安邮电学院

**graduate school

**XNMS实验室

**Author:冀博

**Time:2011年2月21日

**http://blog.csdn.net/tigerjb

**

**--------------FileInfo---------------------------------------------------------------------

****************************Copyright(c)******************** /

/***************************************************

**函数原型:voidSend_Packet(struct _pkst *TxdData)

**入口参数:struct _pkst *TxdData:指向要发送数据的结构指针

**出口参数:无

**说明:发送数据包,以太网底层驱动程序,所有的数据发送都要通过该程序

***************************************************/

void Send_Packet(struct _pkst *TxdData)//

{

static uint8 Tx_Buff_Sel=0;

struct _pkst *ExPtr;

uint8 *TEPTR;

union send_temp{

uint16 words;

uint8bytes[2];

}send_buff;

uint16 ii,length=0;

//切换至第0页

page(0);

length=length+TxdData->length;

ExPtr=TxdData->STPTR;

//计算出要发送的数据的总长度

while(ExPtr!=NULL)

{

length=length+ExPtr->length;

ExPtr=ExPtr->STPTR;

}

ii=length;

//发送缓冲区的切换

Tx_Buff_Sel=Tx_Buff_Sel^1;

//设置远程DMA起始地址寄存器(RSAR0,RSAR1)

if(Tx_Buff_Sel)

{

WriteToNet(0x09,0x40);

}

else

{

WriteToNet(0x09,0x46);

}

WriteToNet(0x08,0x00);

//设置远程DMA字节计数器寄存器为发送数据帧的长度

WriteToNet(0x0b,ii>>8);

WriteToNet(0x0a,ii&0x00ff);

//启动远程DMA开始写

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

新的IEEE汽车以太网标准不断涌现,10BASE-T1S是最新的以太网标准之一。本文讨论汽车行业影响汽车电子/电气(E/E)架构变化的发展趋势,以及新10BASE-T1S标准如何支持和推动这种新架构的部署。

关键字: 以太网 汽车电子 传感器

该解决方案采用全新 1.6T 以太网控制器 IP、经过硅验证的224G PHY IP和验证IP,助力未来基础设施的升级建设

关键字: 数据中心 芯片 以太网

模拟与混合信号事业部将提供行业领先的技术为汽车、工业和云端市场提供全面的系统解决方案

关键字: 电源管理 传感器 以太网

2024年3月4日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 与Analog Devices联手推出全新电子书,详细分析用于支持可持续制造实践的技术。

关键字: 以太网 工业物联网 放大器

10BASE-T1L是在2019年11月7日经过IEEE认证的新以太网物理层标准(IEEE 802.3cg-2019)。这将通过与现场级器件(传感器和执行器)的无缝以太网连接显著提高工厂运营效率,彻底变革过程自动化行业。...

关键字: 以太网 传感器 自动化

第七期免费电子杂志全面介绍了未来工业的技术发展、趋势与技术

关键字: 工业4.0 电机编码器 以太网

本文介绍如何利用10BASE-T1L MAC-PHY连接越来越多的低功耗现场设备和边缘设备。此外,本文还将详细说明何时使用MAC-PHY与10BASE-T1L PHY以及这些系统如何满足未来的以太网互联制造和楼宇安装要求...

关键字: 处理器 以太网 传感器

采取适当的预防措施,可以防止雷击对以太网连接设备造成损坏。使用保护元器件的传统方法可能不完全有效,我们还需要辅以另外一种方法,其灵感基于对雷击能量传递给以太网电缆和相连设备的基础机制的深入分析,本文会详细介绍这些内容。

关键字: 以太网 浪涌 长电缆

工业自动化系统设计是一项涉及多个领域和技术的综合性任务。它旨在通过自动化设备和系统的集成,提高生产效率、降低能耗、确保产品质量和增强企业竞争力。本文将详细探讨工业自动化系统设计的原则、方法和实践,以期为相关从业人员提供有...

关键字: 工业自动化 设备 系统

为增进大家对以太网的认识,本文将对以太网中的车载以太网予以介绍。

关键字: 以太网 指数 车载以太网
关闭
关闭