当前位置:首页 > 单片机 > 单片机
[导读]针对Cortex—M3核的微控制器LM3S9B96,提出了一种基于μDMA的高速网络驱动程序的设计方案。在简要介绍LM3S9B96的以太网控制器、网络驱动程序的作用后,对该网络驱动程序设计的各个部分进行了详细描述,包括网络驱动初始化程序、数据包发送程序、数据包接收程序和中断处理程序等。

 引言

LM3S9B96是德州仪器针对工业应用设计的Cortex—M3核的微控制器,应用领域包括远程监控、电子贩售机、测试和测量设备、网络设备和交换机、工厂自动化以及火警安防等。LM3S9B96的主频最高为80 MHz,性能可达100 DMIPS,其以太网控制器集成了媒体访问控制器和物理层接口,以太网控制器遵循IEEE 802.3规范,完全支持10BASE—T和100BASE—TX标准。

德州仪器为微控制器LM3S9B96提供了轻量级TCP/IP协议lwIP下的网络驱动程序,该驱动程序使用数据拷贝方式实现网络层与发送FIFO(TX FIFO)和接收FIFO(RX FIFO)之间的数据交换,效率低,无法满足高速网络通信的要求。文中详细描述了实时操作系统μC/OS—II环境下,基于微型直接存储器访问(Micro Direct Memory Access,μDMA)传输的LM3S9B96网络驱动程序的设计,以提高网络层与底层FIFO之间数据交换的效率,实现高速网络通信。

1 LM3S9B96的以太网控制器

LM3S9B96的以太网控制器包含媒体访问控制器(Media Access Controller,MAC)层和网络物理层(Network Physical,PHY)2个部分,如图1所示,以太网控制器内部结构如图2所示。

LM3S9B96的以太网控制器包含了网络物理层的自动交叉校验MDIX、自动协商、时钟参考、MAC LED控制、媒体独立接口(Media Indepen dent Interface,MII)寄存器组、发送编码、脉冲整形、时钟恢复、接收解码、载波感应和冲突检测等单元,用于实现10 BASE—T/100BA SETX的自动协商、MDI与MDIX校验、数据的编码发送和解码接收,以及网络接口指示灯的控制;也包含了MAC层的TX FIFO、RX FIFO、接收控制、发送控制、数据访问、独体媒体接口控制、定时器支持、MAC地址寄存器、中断控制等单元,用于实现MAC地址的设置、物理层MII寄存器组的设置、中断的产生和控制、网络层与MAC层FIFO之间数据的传输。

2 网络驱动程序的作用

网络驱动程序是网络层与物理层硬件的直接接口,它屏蔽了物理层硬件的细节,利用物理层硬件,为网络层提供了接收和发送数据的接口,如图3所示。

网络数据发送时,网络驱动程序从网络层接收数据包后,检查数据发送缓冲队列和TX FIFO是否为空,若均为空,程序会通过TX FIFO发送数据包;否则将数据包放入发送缓冲队列,等待TX FIFO为空时,网络中断触发数据发送。网络数据接收时,RX FIFO从物理层接收数据包后,触发网络接收中断,网络驱动程序从RX FIFO读取数据包,并交由网络层处理。

3 基于μDMA的网络驱动程序的设计

LM3S9896内置一个直接存储器访问(Direct Memory Access,DMA)控制器,称之为微型DMA(μDMA)控制器。μDMA控制器所提供的工作方式能够分载处理器参与的数据传输任务,从而更加高效地使用内核以及总线带宽。

LM3S9B96的以太网控制器支持μDMA功能,具有专用的μDMA通道,通过合理的编程配置,通过μDMA控制器,当需要时自动在网络控制器的TX FIFO、RXFIFO与存储器之间传输数据,使得以太网MAC具有更高的性能,并大大减轻LM3S9B96内核的数据传输负担。

LM3S9B96的μDMA网络驱动程序主要包含4个单元:初始化程序、数据包发送程序、数据包接收程序和中断处理程序。

3.1 初始化程序

网络驱动初始化程序主要用于初始化网络接口、设置μDMA参数和网络中断,具体工作如下:

①初始化网络接口结构体的各个参数,如网络接口名称、MAC地址、接口层发送函数地址等。

②设置MAC地址及其长度、最大传输单元大小、网络接口时钟。

③配置以太网控制器操作参数,此处需要使能双工传输、发送填充、自动CRC校验产生、多播数据接收等。

④使能μDMA单元并设置μDMA控制表基地址。

⑤禁止以太网发送通道μDMA,并设置该通道μDMA控制参数一一传输大小32位,源地址以32位大小自增,目标地址不增加,仲裁大小8位。

⑥禁止以太网接收通道μDMA,并设置该通道μDMA控制参数——传输大小32位,源地址不增加,目标地址以32位大小自增,仲裁大小8位。

⑦设置网络中断类型,并使能网络中断等功能,为了简化中断处理,此处仅使能网络接收和发送中断,禁止发送错误、接收错误、接收溢出等其他中断类型。

3.2 数据包发送程序

网络数据的发送,是在中断处理程序的协助下由网络数据包发送程序实现。

数据包发送程序主要包含2个函数:网络数据输出函数stellarisif_output()和网络数据传输函数stellarisif_transmit(),函数流程如图4(a)、(b)所示。

stellarisif_output()函数并不进行实际的数据发送,它只是将数据包放入缓冲队列,或者是调用网络数据传输函数进行数据发送。如图4(a)中标注,该函数需要注意:

①一个新的网络数据包,必须检查当前发送缓冲区是否为空。如果发送缓冲区不为空,即使TX FIFO为空,也要把待发送的网络数据包放入发送缓冲区,这样才能保证网络数据先进先出的发送次序。

②表明实际进行网络数据发送的是stellarisif_transmit()函数。

stellarisif_transmit()函数进行实际的网络数据发送,它以DMA方式复制网络数据到TX FIFO,标识中断处理程序设置网络发送标志,启动网络数据的物理层传输;或以内核执行拷贝方式复制网络数据到TX FIFO,并置位网络发送标志,启动网络数据的物理层传输。如图4(b)中标注,需要注意:

③由于以太网发送通道μDMA的传输大小被初始化32位(即传输数据宽度为4个字节),而μDMA传输要求源地址、目的地址必须按照传输数据宽度对齐。因此进行μDMA传输前,应首先判断数据的源地址(即被传输的净荷数据地址)是否为4字节边界对齐(以太网发送通道μDMA的目的地址为TX FIFO的地址,即0x40048010,已为4字节对齐,无需检查)。若为4字节地址对齐,才能进行μDMA数据传输,否则不能进行μDMA传输,只能进行由LM3S9B96内核执行的数据拷贝。需要说明的是,通过合理分配LWIP协议栈的堆内存、缓冲及待发送数据的地址,是可以保证净荷数据地址为4字节对齐的。

④设置μDMA通道为以太网发送通道,自动传输模式,源地址为净荷数据地址,目的地址为TX FIFO地址,传输长度(以传输数据宽度为单位,即以32位或4字节为单位,实际传输的字节总长度=传输长度x传输数据宽度)。

3.3 数据包接收程序

网络数据的接收,是在中断处理程序的协助下,由网络数据包接收程序(主要由网络数据接收函数stellarisif_receive()构成)实现。

stellarisif_receive()函数负责以μDMA或内核执行拷贝方式,从RX FIFO读取网络数据帧到接收缓冲区pbuf。其流程如图4(c)所示,该函数实现需要以下说明:

⑤即使分配接收缓冲区pbuf失败,也需要从RX FIFO中清空该数据帧,以免影响后续的数据帧接收。

⑥进行以太网接收通道的μDMA传输前,也需要检查接收缓冲区pbuf的地址是否为4字节边界对齐。在LWIP协议栈的堆内存、缓冲分配合理时,每次都以4字节整数倍的长度申请分配接收缓冲区pbuf,是能保证pbuf地址为4字节边界对齐的,从而实现每次网络数据接收都通过μDMA实现RX FIFO至pbuf数据拷贝,无需LM3S9B96内核参与。

⑦设置μDMA通道为以太网接收通道,自动传输模式,源地址为TX FIFO地址,目的地址为接收缓冲区pbuf地址,传输长度(以传输数据宽度为单位,即以32位或4字节为单位,实际传输的字节总长度=传输长度×传输数据宽度)。

⑧需要等待中断处理程序发送的网络接收μDMA传输结束信号量,成功获取该信号量,才能标志此次μDMA传输的结束。

3.4 中断处理程序

中断处理程序为lwIP协议栈处理以太网中断,从底层接收网络数据包,提交给上一层来处理,检查网络发送缓冲队列、通过以太网MAC层进行数据包发送。

中断处理程序主要包括2个部分:以太网中断服务程序lwIPEthernetIntHandler()和以太网中断任务lwIPInterruptTask(),流程如图5所示。

LM3S9B96的以太网中断产生时,内核自动跳转至中断向量表的57号处(LM3S9B96的以太网中断向量号),该处定义了“DCD lwIPEthernet IntHandler”,进而转入中断服务程序lwIPEthernetIntHandler()执行。如图5(a)中标注,此程序根据3种不同类型的中断源进行相应的处理:

①处理网络接收和发送中断。网络接收、发送中断产生后,程序释放一个网络中断服务信号量,以太网中断任务获取该信号量后,调用stellarisif_receive()函数读取数据帧,或调用stellarisif_transmit()函数发送数据帧。

②处理网络接收通道的μDMA中断。该中断产生,表明从RX FIFO至接收缓冲区pbuf的μDMA传输结束,此时应释放传输结束信号量,以解除stellarisif_receive()函数的传输结束等待。

③处理网络发送通道的μDMA中断。该中断产生,表明从发送缓冲区pbuf至TX FIFO的μDMA传输结束,此时应置位网络发送请求标志,启动网络数据的物理层传输。

lwIPinterruptTask()函数负责从RX FIFO读取网络数据帧,并提交上层协议处理;或者从发送缓冲队列读取并调用stellarisif_trans mit()函数发送网络数据帧,其流程如图5(b)所示,该函数实现也需要注意:

④以太网中断任务以阻塞模式等待网络中断服务信号量,直至网络接收或发送中断产生时,lwIPEthernetIntHandler()释放该信号量,任务才解除阻塞,开始执行网络数据帧的接收、发送操作。

⑤无论以太网中断源为接收中断,还是发送中断,以太网中断任务总是首先调用stellarisif_receive()函数读取网络数据帧(若成功读取数据帧,则提交上层协议处理),然后检查TXFIFO和网络发送缓冲队列,满足发送条件时,进行数据帧发送操作。此种处理方式,貌似没有对网络发送与接收中断进行有效地区分处理,但事实上,在同时处理大量网络数据的接收、发送时,具有极高的执行效率。

结语

本文针对德州仪器的微控制器LM3S9B96,提出了一种面向高速网络的、基于μDMA的网络驱动程序设计方案,该设计方案充分利用了LM3S 9B96的μDMA、网络中断等资源,大大提高了TCP/IP协议栈的网络层与底层FIFO之间数据交换的效率。实验测试表明,该网络驱动设计方案较之内核拷贝方式实现的网络驱动程序,通信效率提高了十余倍。

由于大多数德州仪器Cortex—M3核的微控制器的以太网控制器结构都非常相似,因此文中针对微控制器LM3S9B96提出的网络驱动程序设计方案,可适用于大多数德州仪器Cortex—M3核的微控制器的网络驱动程序设计。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭