当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]本文介绍了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协议的复杂性,此驱动的很多函数的具体实现以及测试中还有很多复杂的细节,限于篇幅,本文只给出一些概述性的描述,以期和大家分享嵌入式驱动开发的一点心得

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

Zephyr开源项目由Linux基金会维护,是一个针对资源受限的嵌入式设备优化的小型、可缩放、多体系结构实时操作系统(RTOS)。近年来,Zephyr RTOS在嵌入式开发中的采用度逐步增加,支持的开发板和传感器不断增加...

关键字: 嵌入式系统 软件开发 实时操作系统 Zephyr项目

在嵌入式系统开发中,实时操作系统(RTOS)的任务调度算法直接影响系统的响应速度和资源利用率。时间片轮转(Round-Robin, RR)作为一种经典的公平调度算法,通过为每个任务分配固定时间片实现多任务并发执行。本文将...

关键字: 实时操作系统 RTOS C语言

上海2025年4月18日 /美通社/ -- 2025 年 4 月 18 日,Ambarella(下称"安霸",纳斯达克股票代码:AMBA,AI 视觉感知芯片公司)与智能边缘软件提供商风河公司(Wind River®,)共...

关键字: 智能驾驶 系列芯片 实时操作系统 ASIL

在实时操作系统(RTOS)中,任务优先级反转是一个常见的问题,它可能导致高优先级任务被不必要地延迟,从而影响系统的实时性能。FreeRTOS作为一个广泛使用的RTOS,也面临着任务优先级反转的挑战。本文将深入分析Free...

关键字: FreeRTOS 实时操作系统

本文将演示一种加速嵌入式系统设计原型阶段的方法,说明如何将与硬件无关的驱动程序和传感器结合使用,简化整个嵌入式系统的器件选择。同时还将介绍嵌入式系统的器件、典型软件结构以及驱动程序的实现。后续文章“利用与硬件无关的方法简...

关键字: 嵌入式系统 驱动程序 传感器

在快速迭代的消费电子产品市场中,实时操作系统(RTOS)已成为提升产品性能和用户体验的关键技术之一。RTOS通过提供多任务处理、资源管理和任务调度等功能,使得消费电子设备能够同时运行多个任务,并保持系统的高响应性和低功耗...

关键字: 实时操作系统 消费电子

在复杂的嵌入式系统和实时操作系统中,死锁问题常常因为其难以预测和复现的特性,成为开发人员的一大难题。特别是当系统出现随机死锁时,传统的调试方法往往难以迅速定位问题所在。为此,设计一种基于指令跟踪单元(ETM)的非侵入式追...

关键字: 死锁 ETM 嵌入式系统 实时操作系统

随着科技的飞速发展,嵌入式系统已经成为现代生活不可或缺的一部分,它们被广泛应用于从智能家居到自动驾驶汽车的各个领域。而在这些系统中,C语言由于其高效性、可移植性和对硬件的直接控制能力,成为了嵌入式系统开发的首选语言。

关键字: C语言 驱动程序

实时操作系统(RTOS)在嵌入式系统中扮演着至关重要的角色,尤其在需要高实时性、可靠性和稳定性的应用场景中,如汽车电子、工业自动化、航空航天等。RTOS通过提供实时任务调度、中断处理、通信与同步机制等功能,确保系统能够及...

关键字: RTOS 实时操作系统 嵌入式系统

每个嵌入式软件应用程序都必须在某个时候访问最低级别的固件并控制硬件。驱动程序的设计和实现对于确保系统能够满足其实时要求至关重要。

关键字: 嵌入式 驱动程序
关闭