当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]本文介绍了PowerPC MPC8260工作在ATM模式的原理,给出了在VxWorks实时操作系统下的END模式的ATM驱动程序设计及实现,实验证实该驱动通过Mux层在IP层与链路层之间建立了数据传输通道。

摘 要:本文介绍了PowerPC MPC8260工作在ATM模式的原理,给出了在VxWorks实时操作系统下的END模式的ATM驱动程序设计及实现,实验证实该驱动通过Mux层在IP层与链路层之间建立了数据传输通道。

PowerPC MPC8260的

FCC工作在ATM模式的原理

MPC8260 PowerQUICCⅡ是飞思卡尔PowerPC系列CPU芯片主导产品,它的通信处理机模块(CPM)同时支持三个快速串行通信控制器(FCC),FCC支持同步高速率协议HDLC、Ethernet和ATM。FCC控制器工作在ATM模式时,通过UTOPIA接口与物理层连接,原理图如图1所示。

在设备接收数据时,对接收到的信元(cell,53字节)进行地址映射,把VPI/VCI映射为逻辑通道号,对应有缓冲描述符及缓冲内容。发送数据时,把带有数据缓冲信息的通道号通过ATM步长控制器调度,再由FCC发送到物理层设备,转换为光信号后通过光口发送出去。

VxWorks实时操作系统下

END程序框架设计

VxWorks是WindRiver 公司开发的高性能实时操作系统,其网络结构与OSI参考模型相比是在IP 层和链路层之间有一Mux层,屏蔽了网络层和数据链路的直接交互,通过END(增强型网络驱动:Enhanced Network Drivers) 实现IP 层与链路层之间的数据交互。END向上通过Mux 层与IP 层相连,向下与链路层直接相连,从而在IP 层与链路层之间建立一个数据传输通道。
END驱动程序的核心数据结构是END对象,即END_OBJ,在end.h中定义。驱动程序的装载函数返回一个指向数据结构END_OBJ的指针。这个数据结构为MUX提供了描述驱动程序的信息和指向数据结构NET_FUNCS的指针,而NET_FUNCS填充的是有关END驱动程序的标准进入配给函数。
END驱动程序输出到MUX的进入配给函数,即数据结构NET_FUNCS中用以输出到MUX接口的标准进入配给函数如表1所示。

ATM驱动程序的实现

驱动程序中重要的数据结构

DRV_CTRL

DRV_CTRL是定义的ATM设备控制结构,包括了MPC8260的FCC基地址、驱动的单元号、中断号、存储管理相关等信息。在驱动程序中,此结构是初始化、发送、接收、中断处理等主要函数的入口参数。
需要指出的是,此结构与以太网控制器中为其驱动定义的控制结构类似,不同之处在于以太网控制器是为一个FCC定义一个BD(缓冲描述符)链表;ATM要求每个通道都有一些特定参数并要求每个通道有一个BD链表。因此,需要定义连接控制结构来管理这些与通道相关的参数。

AtmConnectionData

连接控制结构是ATM建立链路时用到的最重要的数据结构,规定了链路的逻辑地址、信元速率等信元传输时用到的重要参数以及发送、接收数据帧时用到的BD表。在本驱动中,对每个通道建立了一个BD表,并采用了循环链表结构,提高了缓冲的利用效率。在建链前必须对该结构进行分配,并初始化。
驱动程序的实现

本END驱动主要是实现IP层与ATM层之间的数据交互,ATM网络是面向连接的,对于IPOA(IP over ATM)来说,TCP/IP只是将其作为像以太网一样的另一种物理网络来看待,因而,本驱动的设计可参考以太网驱动的设计思想。按照以上END的程序设计框架编制END所用到的全部基本函数,因这里的END 与地址处理无关,故endMCastAddrDel()、endMCastAddrGet()、endMCastAddrAdd()、endAddressForm()和endAddressGet()这几个函数可直接返回一个值即可。驱动程序大体分为四部分 :控制器的初始化、中断处理和内存管理、数据帧的接收和数据帧的发送 。

控制器的初始化

初始化包括两部分 ,一是配置:首先,在 config. h中定义 INCLUDE_ END,以保证在编译时加入 MUX接口 ;其次,在 configNet. h中定义指向本设备载入函数的宏 ,并定义初始化时要用到的字符串 ,定义增强型设备的列表结构体以保证正确登录本设备 。二是对本控制器设备加载,必须初始化一个 END_ OBJ结构体,载入函数首先要分配并初始化此结构体 ,以方便 MUX接口使用其中的工具管理堆栈及调用各接口函数。本控制器设备的初始化流程如下 :首先通过函数muxDevLoad()调用motFccEndLoad()实现对ATM驱动的加载,当成功加载后,接着用函数muxDevStart()调用motFccStart ()实现对驱动的启动,成功启动后,再接着用函数muxIoCtl()调用motFccIoCtl()实现对END网络接口控制,成功后用IpAttach函数将END 与IP 层相连。如果以上的步骤都能成功完成,在Shell 下输入muxShow 命令,将看到加载起的END(Device:motFccAtm,Unit:0)。
中断处理程序和内存管理

中断处理程序必须分为两个部分,第一部分是响应中断的函数,它需要被绑定到 BSP分配的中断向量上,不能有耗时较大的操作 (如对堆栈的操作 ) ,这是由中断的特点所决定的;第二部分是对数据帧的处理,这个函数可以用系统函数netJobAdd( )在响应中断的函数中向网络工作队列添加新的工作 ,这将唤醒网络处理任务去调用相应的数据帧处理函数(例如接收函数 )处理数据帧。

对于内存的管理,VxWorks定义了三种统一的存储结构:cluster(簇)、clBlk(簇模块)和 mBlk(存储模块)。其中簇是存储数据的最基本单元,长度灵活可变,在ATM控制器驱动程序中一般使用同样长度的簇,即最大的数据帧长9180字节。数据在协议栈内各层之间的传送过程中只需要传送数据帧的指针,这样,方便程序员设计数据的存储结构 ,并减少了在各层次之间数据的拷贝,节省了时间,提高了效率。VxWorks还给出了几个标准的系统函数统一管理内存的占用和释放,程序员可以很方便地调用这些系统函数创建这三级结构来接收数据帧,并在完成数据帧接收时调用相应系统函数释放内存。驱动程序中的内存管理函数是motFccInitMem()和motFccBdFree(),参数都为DRV_CTRL类型指针。motFccInit Mem()完成对存储池的初始化;motFccBdFree()由motFccStop()调用,释放与接收缓冲描述符链表相连的簇,以便在设备停止时彻底地释放资源。

数据帧的接收

一般情况下,数据帧的接收是用中断方式实现的 。当一个数据帧到来时触发一个中断,中断响应程序会向任务队列添加一个网络任务,这个任务将调用接收函数处理数据帧 。
接收函数负责将正确的数据帧放到利用系统函数取出的缓存中,然后将缓存交给 MUX接口的接收函数muxReceive( ),最后释放掉占用的缓存。循环以上过程直到将收到的数据全部处理完。
从数据帧经过的网络层次顺序看,数据帧先经过物理层到达数据链路层,在驱动中通过MUX接口调用函数motFccRecv(),在该函数中完成对链路层收到的ATM信元进行ATM适配层的处理(在本驱动中进行AAL5适配)并组装成IP 包,送到网络层 ,再经过 TCP协议层到达应用层 ,这就是数据接收的全过程 。
数据帧的发送

发送数据帧常常使用两种方式:轮询方式和中断方式。在本驱动中采用了轮询方式,从数据帧经过的网络层次顺序看,基本上是接收数据帧的反过程。数据帧由应用层开始产生,经过 TCP协议层和网络层的封装,通过 MUX接口调用本驱动程序中的发送函数motFccSend(),将IP包进行ATM适配处理并拆分为ATM信元然后交给物理层发出 。

结语

按照以上的方法,本文设计出了基于VxWorks实时操作系统的MPC8260的ATM控制器(提供一个155Mbps光口)驱动,并完成了主要功能的测试。测试函数中指定要建立的通道数、通道速率、发送的数据帧数、数据帧长度等参数,并让这些数据帧在以太网口和ATM端口间打环。实验数据显示设备工作正常。
调试中有几点注意事项:由于MPC8260为FCC提供的双口RAM容量有限,分配通道及对通道的各参数初始化时要特别小心,以免越界。由于ATM协议的复杂性,此驱动的很多函数的具体实现以及测试中还有很多复杂的细节,限于篇幅,本文只给出一些概述性的描述,以期和大家分享嵌入式驱动开发的一点心得

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

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

与两相双极步进电机的驱动电路相比,两相单极步进电机的驱动电路在输入段配置、内部逻辑及控制电路和驱动电路使用双通道方面基本相同,但是输出段的配置不同。

关键字: 四相步进电机 驱动程序 程序电路

本文介绍了如何实现嵌入式MICREL网卡的驱动程序开发和设计。首先,我们介绍了MICREL网卡的概述和工作原理。然后,详细探讨了驱动程序的开发流程,包括硬件和软件的配置以及驱动程序的编写和测试。最后,总结了几点注意事项和...

关键字: 嵌入式 MICREL网卡 驱动程序

VxWorks是一款广泛应用于嵌入式系统的实时操作系统(RTOS)。作为实时操作系统领域的领导者,VxWorks以其强大的功能和可靠性,在多个行业领域得到了广泛应用。本文将向读者简要介绍VxWorks系统,包括其定义、特...

关键字: VxWorks 操作系统 嵌入式

在这篇文章中,小编将对OLED的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: OLED 驱动程序 无源驱动

近日,英特尔发布了锐炫显卡的新版驱动更新。本次驱动更新涵盖了锐炫A770、A750、A380以及移动端的锐炫GPU,这使得英特尔锐炫整个家族的DX9性能都实现了显著提升。

关键字: 英特尔 显卡 驱动程序

摘 要:从硬件与软件方面介绍了基于PXI技术的1553B总线通讯模块的设计,并对PXI总线接口设计、驱动程序的开发、 SDRAM存储器的控制和1553B总线通信协议实现等关键技术进行了详细的阐述,为航空领域测控系统开发P...

关键字: PXI技术 驱动程序 SDRAM存储器 1553B总线

PnP全称Plug-and-Play,译文为即插即用。PnP的作用是自动配置低层计算机中的板卡和其他设备,然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合,并操作设备,在每个设备和它的驱动程序...

关键字: PnP 驱动程序 操作设备

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录kill命令和信号使用kill...

关键字: 信号 应用程序 驱动程序

驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。

关键字: 驱动程序 硬件设备 UNIX
关闭
关闭