嵌入式Internet以太网接口的设计与实现

发布者:自在堂最新更新时间:2011-09-07 关键字:嵌入式  以太网接口 手机看文章 扫描二维码
随时随地手机看文章

  在电子设备日趋网络的背景下,目前广泛使用的以太网及TCP/IP协议已经成为事实上最常用的网络标准之一,它的高速、可靠、分层及可扩充性使得它在各个领域的应用越来越灵活,很多情况下运用以太网和TCP/IP能够简化结构和降低成本。目前关于嵌入式以太网的设计方案不是很多,其中大多是基于单片机的,缺点是速度慢、成本太高。DSP作为一种特殊的嵌入式微处理器系统,具有嵌入的协处理器和用于快速数据处理的并行数据通道,在嵌入式网络设备中引入DSP技术可以使嵌入式以太网变得更快、更便宜、更容易进行功能扩充。本文介绍了基于TMS320LF2407型的嵌入式系统与LAN91C111型自适应10Mb/s/100Mb/s嵌入式以太网控制芯片的接口电路和实现方法。

  1  LAN91C111嵌入式以太网控制器芯片

  LAN91C111是SMSC公司推出的为嵌入式应用系统设计的第三代快速以太网控制器。在LAN91C111芯片上集成了CSMA/CD协议的媒体层(MAC)和物理层(PHY),其系统结构图如图1所示。该以太网控制器的主要功能特性如下。

  (1)自适应地选择传输速率,支持10M/100Mbps。

  (2) 8KB的内部存储器用于接收和发送的缓存。

  (3) 支持突发数据传输。

  (4) 提前发送和接收功能。

  (5) 支持总线8位、16位和32位的CPU访问。

  该以太网控制器遵循的标准与协议为IEEE颁布的802.3以太网传输协议。8~32位数据总线接口单元由控制总线、地址总线和数据总线与外部的CPU控制芯片相连。该单元还集成了E2PROM接口,所有内部寄存器的初始值可先放在E2PROM中,自举时通过E2PROM接口输入到芯片中,实现自动初始化。总线仲裁器(Arbiter)监视以太网总线的数据交流情况,一旦发生阻塞,一方面通过总线接口单元与外部CPU联系,另一方面控制内存控制单元(MMU),实现总线数据协调。内存控制单元控制8KB动态SRAM的存储情况,实现与DMA控制器之间的数据联络。DMA控制器与总线控制器一起控制数据在DMA与以太网协议处理器(EPH)之间的交换。由以太网协议处理器输出的数据最终经过10M/100M的物理层直接到达以太网总线。

  2  硬件电路组成

  出于性价比的考虑,采用了DSP控制器作为主CPU。TMS320LF2407是TI公司发布的240X系列中功能最强的一种控制器,有很大的存储空间(高达32K字的Flash程序存储器,可扩展外部64K字存储器和64K字I/O寻址空间),非常适合于处理复杂的TCP/IP协议。

  由于LAN91C111是为嵌入式系统设计,其外围电路相对比较简单,其硬件接口框图如图2所示。LANC91C111内部寄存器可通过地址线A0~A15来访问。地址总线A1~A15与DSP的A1~A15相连,A0没有被悬空;数据总线D0~D15与DSP的D0~D15相连,可以传输16位数据。D16~D32悬空(因为LF2407是16位数据总线);LAN91C111的片选信号AEN由DSP的外部I/O接口选通信号IS提供。二元件的读电平RD和写电平WR分别相连。LAN91C111端的中断输出信号INTR0送入DSP的外部中断脚XINT1 触发中断。TG110-S050N2是针对10M/100M以太网的变压滤波器。LAN91C111模块的Protel原理图如图3所示。

  3  软件设计

  编写控制以太网接口程序的步骤如下。

  3.1 μC/OSⅡ实时操作系统的移植

  μC/OSⅡ是一种开放源码的实时嵌入式操作系统,具有很好的实时性。它是可移植、可裁减、可固化的占先式多任务操作系统,其大部分源码由ANSI C语言编写。

  移植工作包括以下几个内容:(1)用汇编语言改写OS_ CPU_ A.ASM。(2)用C语言改写OS_CPU_C。C。(3)编写OS_ CPU.H。(4)适当处理OSMapTbl[ ]和OSUnMapTbl[ ]。

  ①OS_ CPU_ A.ASM文件包括4个子程序:OSStart-HighRdy、OSCtxsw、OSIntCtxSw和OSTickISR。

  1)OSStartHighRdy()函数

  当程序执行内核的OSStart函数时,表示多任务系统开始启动, OSStart函数将调用OSStartHighRdy函数从最高优先级任务的TCB块中获得该任务的堆栈指针,通过该指针,依次从该任务的任务堆栈中恢复CPU的现场。由于任务在堆栈初始化时,已经设定了弹出到程序指针寄存器PC的是该任务函数的入口地址,因此,OSStartHighRdy函数只需依次弹出任务栈内容到处理起寄存器,该任务便将得以运行。

  2)OSCtxSw()函数

  该函数是任务级的上下文切换函数,当任务被阻塞而主动请求CPU开始任务调度时执行,其过程是将当前任务的的CPU现场保存到该任务堆栈中去,然后从 OSTCBHighRdy中获得更高优先级任务的堆栈指针,再从该指针指向的堆栈中恢复此任务的CPU现场,使之继续执行,从而完成一次任务级别的切换。表2为OSCtxSw函数的伪代码。

  void OSCtxSw(void) {

  保存处理器寄存器;/*将欲挂起的任务的CPU寄存器压入当前堆栈*/

  OSTCBCur->OSTCBStkPtr = sp; /*OSTCBCur目前指向的是被打断的任务TCB,此操作

  将该任务的栈顶指针保存到其OSTCBStkPtr中去,便于下次恢复时从这里获取栈顶指针*/

  OSTCBCur = OSTCBHighRdy; /*OSTCBHighRdy 指向的是就绪的高优先级任务的TCB,

  将其装载到OSTCBCur 中来*/

  SP = OSTCBHighRdy->OSTCBStkPtr; /*取得就绪的高优先级任务的栈顶指针*/

  恢复该任务的现场(); /*于是便可通过刚取得的栈顶指针恢复该任务 */

  执行中断返回指令; /*若OSCtxSw含有软中断指令则需中断返回,本移植不使用软中断*/

  }

  表2 OSCtxSw函数的伪代码

  3) OSIntCtxSw() 函数

  该函数用于中断级的上下文切换。由于CPU响应时钟节拍中断后,处理器从svc进入了irq模式,并进入时钟节拍中断服务函数OSTickISR, OSTickISR函数发现若有高优先级任务需要运行,则系统不返回中断前的任务,而直接调度就绪的高优先级任务使之尽快得到执行,以保证实时性能。但是由于OSTickISR函数一开始已经保存过任务中断前的CPU现场,因此OSIntCtxSW()不需要再进行类似的操作。当OSTickISR调用 OSIntExit函数找出需要运行的更高优先级任务后,OSIntExit会将该任务的TCB指针放在OSTCBHighRdy中,然后 OSIntExit在最后调用OSIntCtxSW函数来从OSTCBHighRdy中获取堆栈指针然后恢复该高优先级任务的现场,使得其继续执行,并不再返回时钟节拍中断服务程序。显然,OSIntCtxSW函数的过程和OSCtxSW函数的后半部分操作相同,因此,OSCtxSW可以借用 OSIntCtxSW的代码。

  4) OSTickISR()函数

  在CPU响应时钟节拍中断后,程序指针PC发生跳转后进入该函数,由于OSTickISR调用OSTimeTick函数使得所有的延时节拍不为0的任务延时节拍数减1,并调用OSIntExit函数来找出就绪的高优先级任务,若需要切换,则最后由OSIntCtxSw来完成新任务的调度,否则仍然返回到被时钟节拍中断的任务。

  ②OS_CPU_C.C文件:本文件仅包括一个OSTaskStkInit( )子程序。该函数模仿TI公司的I$$SAVE库函数对任务堆栈进行初始化,被函数OSTaskCreate( )和OSTaskCreateExt( )所调用并返回任务堆栈初始化后的指针值。注意:2407A的堆栈与一般MCU不同,芯片本身的堆栈(以下简称 US)只有 8 级,无法作为系统堆栈使用,所以C编译器将它内部的2个寄存器AR0和AR1保留。AR1作为堆栈指针SP,AR0用做堆栈中临时变量指针FP(在汇编程序中不要使用这2个寄存器,如果必须使用,要关中断,并注意保存和恢复)。编译器将函数和中断压进 US ,并将其返回地址弹出放在SP(AR1)指向的堆栈中,保留当前环境,不同的是函数只保留程序要使用的寄存器,中断要调用 I$$SAVE 保存所有寄存器,返回时要跳转到(不是调用)I$$REST(这2个函数可以在RTS.SRC中看到源代码)恢复寄存器。这2个函数就像8086中的中断进入和指令IRET,是移植的基础。

  ③OS_CPU.H文件:内容可根据μC/OS-Ⅱ中80x86的内容进行修改。

  ④适当处理OSMapTbl[ ]和OSUnMapTbl[ ]:移植时还需要对μC/OSⅡ的OSMapTbl[ ]和OSUnMapTbl[ ]2个表进行适当处理,否则会出现寻址错误而使μC/OSⅡ无法正常运行,这是移植能否成功的重要因素之一。由于TMS320LF2407的存储器采用的是哈佛结构,Flash存储器(或外扩的ROM)位于程序区,因此可按如下方法处理:将μC/OSⅡ中OSMapTbl[ ]和OSUnMapTbl[ ]的数据类型从“INT8U const”改为“INT8U”,并在链接器命令文件(。CMD)中将“。cinit”块分配到Flash存储器(或外扩的ROM)中,链接选项用“。C”(ROM初始化)。这样,在程序运行时自动对数据区的RAM进行初始化,即运行时自动将“。cinit”块中的数据复制到数据区的RAM中。

  按需要配置OS_FG.H,修改CPU中断向量表和外设向量表后,根据实际需要对其他文档中的内容进行相应设置即可。至此,μC/OSⅡ在TMS320LF2407上的移植就完成了。

  3.2 LAN91C111的编程

  对LAN91C111主要包括初始化、发送数据包和接收数据包三部分。

  3.2.1 初始化

  上电后,LAN91C111内部的寄存器的值设置为缺省值,CPU根据需要设置它里面的Configuration、Base和Individual Address寄存器,以保证它正常工作。

  3.2.2 发送数据包流程

  (1)DSP向控制器发送ALLOCATE MEMORY命令(设置MMUCOM寄存器,通常设置为0x0020)。MMU负责在控制器内部的packet buffer中为待发送的包分配存储空间。

  (2)DSP查询中断状态寄存器中的ALLOC INT位,直到该位被置为1,也可以设置中断掩码中的ALLOC INT位,然后等待硬件中断,这时MMU已经分配好存储空间。而且TX packet number放在Allocation Result寄存器中。

  (3)将Allocation Result寄存器中的packet Number拷贝到Packet NUMBER寄存器中,设置Pointer寄存器(设置为TX、WR、AUTOINC,即0x4000)。然后将包的数据从upper layer发送队列传送到控制器的数据寄存器。要求依次写人Status Word、Byte Count、destination address、source address、packet size、packet data和control word。

  (4)DSP向控制器发送“ENQUEUE PACKET NUMBER TO TX FIFO”命令(设置MMUCOM寄存器,通常设置为Ox00C0),该命令将Packet Number寄存器中的packet number拷贝到TX FIFO,说明发送的包已经放入队列中。同时设置传输控制寄存器中的TXENA位,启动transmitter。到目前为止,DSP的设置工作已完成,它可以空闲,直到接收到一个控制器产生的发送中断。

  (5)当控制器传送完包以后,内存中的第1个字(16位)被CSMA/CD写入相应的状态字,然后将TX FIFO中的packet number移到TX completion FIFO,当TX completion FIFO不为空时产生中断。

  (6)DSP接收到中断后,开始执行中断处理程序,它读入中断状态寄存器,如果产生发送中断,则从FIFO端口寄存器读入发送包的Packet Number,并将它写入Packet Number寄存器。然后从内存中读入状态字(包括设置Pointer寄存器为TX、RD、AUTOINC,即0x6000,然后从数据寄存器中读入包的状态字),它是EPH寄存器的镜像,根据状态字判断包发送是否成功。如果成功则DSP向控制器发布RELEASE命令(设置MMUCOM寄存器,设置为Ox00A0),控制器将释放发送包所使用的存储空间,同时设置TX INT Acknowledge寄存器,它将TX completion FIFO中的packet number清除。有二种产生发送中断的方案:①每发送一个包产生一个中断。②每发送一个序列的包产生一个中断。通过控制寄存器的Auto Release位来选择这二种方案,而且这二种方案所使用的发送中断位也有所不同。

  TX INT:当TX completion FIFO不为空时置0;

  TX EMPTY INT:当TX FIFO为空时置1;

  AUTO RELEASE:如果置为1,发送包成功后,packet number不写到TX completion FIFO中,而且它所使用的存储空间被自动释放。

  (7)选择使用“每发送一个包产生一个中断”方案:允许TX INT中断,AUTO RELEASE=0,这种方案的流程如上所示。

  (8)选择使用“每发送一个序列的包产生一个中断”方案:允许TX EMPTY INT和TX INT,AUTO RELEASE=1,当发送完FIFO中的最后一个包后,产生TX EMPTY INT中断。当发生严重的发送错误时,产生TX INT中断,同时将发送失败的包的packet number保存到FIFO Ports寄存器,这样DSP就可以知道发送过程停止了。该方案可以减少DSP的负担,而且存储空间的释放也更迅速。当AUTO RELEASE=1时,DSP不能得到成功发送包的packet number。

  3.2.3 接收数据包流程

  (1)DSP设置接收控制寄存器中的RXEN位,允许接收包。

  (2)含有正确地址的包被接收到,从MMU请求存储空间,并分派一个packet number,内部的DMA逻辑产生连续的地址,并将接收到的字写到内存中。如果超界,则包被丢弃,存储空间被释放。当检测到包结束时,状态字被写到接收包的最前面,byte count写到第2个字。如果CRC校验正确,则packet number被写到RX FIFO。当RX FIFO非空时,产生RCV INT中断;如果CRC校验不正确,则存储空间被释放,而且不产生中断。

  (3)DSP接收到中断后开始执行中断处理程序,它读入中断状态寄存器,如果产生接收中断(RCV INT位为1),则可以从FIFO端口寄存器得到接收的包的packet number,而且可以从数据寄存器将接收包传送到DSP的内存或外存中。当处理结束时,DSP向处理器发布REMOVE AND RELEASE FROM TOP OF RX命令(即设置寄存器MMUCOM,设置为0x0060),释放使用的存储空间和packet number。

  4  结束语

  对以太网和快速以太网的自动协商模式使LAN 91C111具有很高的性价比,应用领域广泛。本设计利用LAN91C111和DSP芯片组成嵌入式以太网通信系统,能够正确地接入快速以太网,具备10M/100Mbps、全双工/半双工自适应等多种功能,符合IEEE802.3/802.3u-100Base-TX/lOBase-T规范,实现的嵌入式以太网接口支持RJ45和以太网的连接,可以通过以太网接入Internet,以实现从Internet上监控嵌入式设备。

关键字:嵌入式  以太网接口 引用地址:嵌入式Internet以太网接口的设计与实现

上一篇:基于高速USB接口模块的数据采集系统
下一篇:嵌入式Internet以太网接口的设计与实现

推荐阅读最新更新时间:2024-05-02 21:34

嵌入式虹膜图像采集及预处理
0 引言 随着计算机和网络技术的发展,信息安全显示出前所未有的重要性,而身份识别作为保证信息安全的必要前提,也越来越受到重视。虹膜识别技术是基于眼睛虹膜的生物识别技术。虹膜的终生不变性以及信息提取的非接触性等特性,使其成为各项生物识别技术中最突出的一项。本文论述了在基于Blackfin561的嵌入式操作系统uClinux的虹膜图像采集以及预处理。为后期在嵌入式平台上进行虹膜图像运算提供了图像来源。 1 Blackfin561中的DMA Blackfin系列DSP产品是ADI公司的基于微信号体系结构的DSP,适用于各种视频、音频、通信领域。 ADSP-BF561有多个独立的DMA控制器,能够以最小的DSP内核开销完成数据自动传
[单片机]
<font color='red'>嵌入式</font>虹膜图像采集及预处理
基于ARM和FPGA的嵌入式超声探伤系统
    进行数字信号处理,利用TCP/IP协议实现C/S模式下的数据传输,实现了超声探伤的跨平台远程监控。嵌入式探伤仪通过多线程技术进行多任务处理,集超声探伤、数据存储、网络通信于一体。     1 引言     超声技术是无损检测的一种重要方法,很多数字探伤仪以单片机(MCU)为核心,单片机固有的性能瓶颈制约了仪器的性能指标和功能扩展,存在存储体积太小、实时性低等缺点。     嵌入式系统是以应用为中心,以计算机技术为基础,硬件和软件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗等严格要求的专用计算机系统。基于ARM的处理器具有良好的性能并在嵌入式系统中得到了广泛的应用 。在超高速数据采集方面, FPGA (Fie
[嵌入式]
嵌入式实时操作系统μC/OS-II及其应用
早在上世纪六十年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及。其在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。针对国内大部分用户使用的51系列的8位处理器,我们可以选择μC/OS-II 。 μC/OS-II是由Labrosse先生编写的一个开放式的内核,它最主要的特点就是源码公开的自由软件。这一点对于用户来说可谓利弊各半;好处在于,一方面它是免费的;另一方面用户可以根据自己的需要对它进行修改。坏处在于,它缺乏必要的支持。它没有功能强大的软件包,用户通常得自己编写驱动程序,特别当用户使用的是不太常用的单片机,还必须自己编写移植程序。   μC/OS-I
[嵌入式]
纷繁标准呼唤创新算法,可配置内核前景看好
对嵌入式CPU内核市场来说,近年来兴起的可配置(configurable)内核技术,随着采用的客户日益增加,已逐渐受到市场的关注。市场研究机构Semico Research公司的技术长Tony Massimini日前表示,对于需要大量数据运算以及标准不断演进的新兴消费性电子产品来说,可配置内核确实有其优势,并预期此一市场将能够持续成长。 回顾嵌入式内核的发展历程,Tony Massimini指出,在1990年代初期,32位嵌入式控制只是非常小的一块市场,直到手机与游戏机产品的兴起,才让ARM、MIPS公司开始崭露头角。到现在,随着消费性电子市场的增温,嵌入式CPU内核也有许多不同的类型以及不同的设计方法,包括ASSP、高
[焦点新闻]
物联网嵌入式系统日趋重要
作者:Tom Trill 如今,Spansion 宣布推出了用于工业领域的微控制器,即基于ARM Cortex-M 处理器的Spansion FM 微处理器(MCU)家族(通用内核微处理器)。这些高度可扩展的MCU是一系列新的处理器,能够实现类型多样的特定应用处理解决方案。本次推出的新产品家族面向的是工业客户,Spansion则认为本次发布的新品能将其市场从传统工业应用领域——如智能电表到血糖测量仪,大幅扩展到 “物联网”。近期的Forrester研究博客讨论了“物联网”或其在2001年所宣称的“某联网”,尽管这些概念还未实现,不过消费类市场和一般的商业应用已经开始起步。 一切都会实现互联,而不仅仅是“物品”被连到一起,或是
[嵌入式]
物联网<font color='red'>嵌入式</font>系统日趋重要
汽车电子开发流程浅析
汽车电子产品是软硬件结合的嵌入式系统。为了节约资源,缩短产品开发周期,一般应采取软硬件同步开发的方案。 1、汽车电子产品的开发流程    汽车电子产品是软硬件结合的嵌入式系统。为了节约资源,缩短产品开发周期,一般应采取软硬件同步开发的方案。汽车电子产品的开发工具对软硬件的同步开发、调试提供了很好的支持。汽车电子产品的软件开发分为功能描述、软件设计、代码生成、操作系统环境下高级调试等步骤。汽车电子产品的硬件开发分为硬件描述、硬件设计、硬件调试等步骤。当软件设计完成后,通过使用相应的工具,完成在虚拟ECU平台上的验证。当硬件设计完成后,与硬件一起进行软硬件集成调试。通过这种开发方式,缩短了产品上市的时间。 软硬件并行的开发方案
[嵌入式]
07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-查询+中断+引入poll机制的按键驱动程序
一、查询方式的按键驱动程序 查询方式的按键驱动程序,与LED驱动程序类似,我们来复习一下上节的写好的字符设备驱动程序框架,改写出查询方式的按键驱动程序。 (1)按键驱动程序如下: Open中配置引脚 Read中返回引脚状态 入口函数:地址映射 虚拟地址 #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #
[单片机]
07-S3C2440驱动学习(一)<font color='red'>嵌入式</font>linux字符设备驱动-查询+中断+引入poll机制的按键驱动程序
基于ARM的嵌入式TCP/IP协议的实现
在网络应用日益普遍的今天,越来越多的嵌入式设备实现Internet网络化。TCP/IP协议是一种目前被广泛采用的网络协议。嵌入式Internet的技术核心是在嵌入式系统中部分或完整地实现TCP/IP协议。由于TCP/IP协议比较复杂,而目前嵌入式系统中大量应用低速处理器,受内存和速度限制,有必要将TCP/IP协议简化。 1 TCP/IP协议的实现 嵌入式TCP/IP协议一般实现:ARP/RARP、IP、ICMP、TCP、UDP、HTTP、SMTP、FTP、TELNET等协议,协议处理的主要流程如图1所示。 1.1 TCP协议的实现 工业控制领域传输层采用TCP协议、不用UDP协议,是考虑到实时监控系统中传输量并不大,
[单片机]
基于ARM的<font color='red'>嵌入式</font>TCP/IP协议的实现
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved