VxWorks操作系统下FPGA设备驱动程序实现

更新时间:2023-05-16 01:01:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统

第27卷第3期2010年9月

长江工程职业技术学院学报

JournalofChangjiangEngineeringVocationalCollege

V01.27

Sep.2

No.3010

VxWorks操作系统下FPGA设备驱动程序实现

项伟1,韩礼红2

(1.长江工程职业技术学院,武汉430212;2.兰州交通大学,兰州730070)

摘要:简要介绍了Vxworks操作系统的体系结构以及基于AT91RM9200开发板下H)GA硬件的实现原理。在此基础上,详细介绍了基于AT91RM92()()开发板下扩展硬件FPGA在VxWorks操作系统下驱动程序的实现,阐述了该驱动程序的实现原理与方法,以及此驱动程序在Vxworks操作系统下的加载。关键词:VxWorks;FPGA;设备驱动;以太网中图分类号:TP316.2

文献标识码:A

文章编号:1673—0496(2010)03-0024-03

ImplementationofFPGADriverBased

XIANG

on

VxWorks

OperationSystem

Weil,HAN

Li-hon92

430212,China;

(1.ChangjiangEngineeringVocationalCollege,Wuhan

2.LanzhouJiaotongUniversity,Lanzhou730070,China)

Abstract:Thebased

on

structureof

VxWorks

operationsystemandimplementationofFPGAhardware

pro—

AT91RM9200wereintroducedbriefly,andthedevelopmentofFPGAanddriving

gramimplementationofVxWorkssystemwerediscrihedindetail.Atthemeantime,someimple—

mentationprincipleandmethodsofthedrivingprogram。loadOfexpounded.Key

VxWorks

operationsystemwere

words:VxWorks;FPGA,devicedriving;ethernet

被广泛地应用在通信、军事、航空和航天等领域。为了实现

●-●●--■一

刖吾

基于VxWorks下FPGA的驱动程序,必须对操作系统的结构和硬件设备的特性有一定的了解。图1简要地说明了VxWorks的各组成部分及FPGA驱动在VxWorks中的位置。其中板级支持包(boardsupportpackage,BSP)是介于

FPGA(FiledProgrammableGateArray),即现场可编程

逻辑阵列,具有功能强大,低成本。保密性好,开发工具智能化等优点,使其成为当今硬件设计的首选方式之一。随着FPGA的工艺改进,制造成本的降低,FPGA会被广泛的使用。本板采用CycloneFPGA,它是基于Stratix的工艺构架,Ahera公司针对其应用,经过市场调研,重新定义了它的特性和规格,使其定位为一款低成本的FPGA。

FPGA基于A1r91RM9200环境下可实现100M、1

000

M的通信功能,以满足日益增长的高速通信需求,利于FP-GA结合嵌入式实时操作系统VxWorks进行千兆以太网开发成为可能。本文给出了Vx\Ⅳorks下实现FPGA基于ATglRM9200板下驱动程序的开发过程,以便更好满足在工业以太网中对高速通信的需求。

VxWorks体系结构

VxWorks是Wind

River

System开发的一种嵌入式实

时操作系统(RTOS),具有良好的可靠性和卓越的实时性,

收稿日期:2010-06-06

作者简介:项伟(1980-),女,湖北赤壁人,助教,大学,主要从事计算机教学与应用研究。

图1

VxWorks操作系统体系结构

一24~

万方数据

操作系统

项伟,韩礼红VxWorks操作系统下FPGA设备驱动程序实现

硬件主板与操作系统间的一层,集成了所有特定硬件的功能。我们所开发的FPGA驱动,就是BSP包中的一部分。

3硬件原理

依据项目要求.设计中提供6路光收发接IZl,且共用一根中断引脚,采用FPGA实现数据的收发处理,错误检测及CRC校验。其结构示意图如图2所示。

I刑爿吲吲W旨

EPICl2Q240C8

@@。

I∽U

AT9lRM9200

EPlcl2Q240C8芯片内部实现了16位双口删,用于

图2FPGA硬件实现示意图

存储设备寄存器以及接收数据和发送数据。该双口RAM

直接和m1RM9200芯片的数据总线、地址总线连接,

AT91RM9200对其采用的是存储映射I/O,通过片选信号

引脚控制访问。

根据地址映射关系及硬件基址及偏植量等,第1个端13的缓冲存贮区及接收存贮区等可根所在数据组地址计算获得。1~6个Bank中的发送接收缓冲区中有数据时,根据各个控制位的信息,调用中断服务程序。中断级为INT_LVLIRq5=30。为上层用户(应用程序)提供标准的FpgaRead()、FpgaWfite()接口函数,来读写各Bank指定的存贮区中的数据。

4FPGA驱动程序设计与实现

4.1驱动程序的组成

FPGA驱动程序的设计。不受驱动体系约束,根据上层

应用的需求提供接口即可;另外,VxWorks提供良好的中断机制和缓冲区管理手段,其下H】GA设备的驱动程序开发要方便很多。VxWorks下的FPGA驱动程序包括三部分,即初始化、中断处理和应用接口函数。

(1)初始化主要完成硬件工作方式的初始化、各控制寄存器的复位及各相关数据结构的初始化等工作。

(2)中断处理主要完成对硬件的响应,判断中断原因,清除中断等。中断处理程序中通常不应做太多的事情,而是启动相应的中断服务任务来完成相应的处理。

(3)应用接口函数提供应用程序与硬件进行交互的接口。包括数据的接收、发送及硬件状态的查询与设置等过程。

4.2驱动程序原理

应用程序可以通过FPGA与外部交换数据,通常应用程序是以连续的报文方式来向外界收发数据,而非一个字节、一个字节的逐字节地收发数据。这就需要驱动程序提供一个缓冲,存放已接收或要发送的数据。这种缓冲区采用了环形缓冲区,即其具有FIFO(先进先出)的读写特性。其结

万方数据

构示意如图3所示。

图3读写缓冲区结构示意图

发送采取查询发送状态寄存器来判断是进行发送还是

等待,如果允许进行发送,则填充发送缓冲区,设置发送命令寄存器启动发送。

接收则使用中断方式以提高响应速度,采用FIFO接收缓冲区,ISR在接收中断服务程序中轮询6个Bank对应接收中断寄存器,如果该寄存器为1,说明接收刭数据帧,则把接收到的数据帧存放在该BaIll【对应FIFO接收缓冲区并清除接收中断寄存器。

采用C语言实现时,可用一个结构体数组和两个分别指向“读”、“写”指针位置的变量实现;为方便起见,也可以采用VxWorks操作系统自身提供的一个环形缓冲管理的接口库mgLib,其中提供了大量的操作函数及环形缓冲区的数据结构,再无须自定义,使用极为方便。在本设计中,使用了自定义的结构体数组来实现。其中FPGABuffer数据结构中定义了它的长度,开辟了一块指定的数组空间。其结构如下定义:

typedef

struct

FI)13A

BUFFER

{unsignedlen;

unsigned

Buffer[MAX_SIZEBUFFER]

}Fl埝A

BUFFER,。pFPGA_BUFER;

其中数据结构fpga~rd—fifo—t中包括队列头、尾及一个FP—

GABUFFER型的数组queue,用来表示一个环形队列。其

结构如下定义:

typedef

struet

fpga_rd_fifo_t

{unsignedshomhead;

unsignedshogtail;FPGABUFFER

queue[n)G九FIF()一LEN];

}FPGARDFIF’O。’pFPGA_RDFIFO;

4.3驱动程序的实现

本驱动程序的实现是基于AT91RM9200开发板。FP—GA在VxWorks操作系统下的驱动程序,利用上面定义的数据结构,就可以根据需要将FPGA驱动起来。该驱动包括两个文件atglrm9200fpg也h和at91rrn9200fpga.C,存放在相应的BSP包目录下。at91rm9200fpga.h为头文,其中定义了各通道的基地址的相关宏,以及对各寄存器操作的宏定义、驱动中的各相关控制宏等。At91rm9200fpga.c为驱动程序主文件。其中主要包括以下驱动甬数:

at91FpgaHwInt()要据中断请求,连接至相应的中断服务程序

AT91

FPGA_lnit()硬件初始化程序

~25—

操作系统

2010年9月

at91FpgaInt()中断服务程序

at91FpgaRead()at91FpgaWrite()

长江工程职业技术学院学报第27卷第3期

lane为指定要读的通道,datareeeive为读人数据存放区。其基本思想是at91FpgaRead()通过函数bcopyWords()来读出指定通道的接收队列里的相应数据,将其存入datareeeive,然后接收队列头指针指向下一接收缓冲区。函数at91FpgaWrite()是为上层应用提供的标准写函数,有三个参数:int

lane,unsigned

向应用程序提供的标准读函数向应用程序提供的标准写函数

函数at91FpgaHwInt()为无参函数,其主要功能为调用函数intConneet()将相应的中断服务程序连接至中断向量表,其中函数intConnect()为系统提供的函数。函数

short*datasend,unsignedshort

√蚋1FPGA_Init()完成对硬件各寄存器及收发缓冲区的初

始化工作,同时也要完成各通道对应的队列的初始化。函数at91FpgaInt()为中断服务程序,为本驱动中最核心的函数,可以根据不同的应用需求。来实现不同的服务功能。本驱动中通过循环查询0~5通道所对应的中断操作寄存器相应的信息,控制读取或写入缓冲区。其实现见如下伪码:

at91

size,其中lane为要写入的通道,datasend为待写数据存贮区,size为待写数据的长度。其基本思想也是通过beopy-Words()函数向指定的通道中拷贝数据,当然写完之后还须对对应的通道的发送启动寄存器置位,来产生中断发送数据。至此,各基本功能驱动函数编写完成。

FpgaInt()

For(i=FPGABANK_NUM)i>=0:i一一){

FPGA驱动程序挂载

驱动程序编写完成后,必须根据需要来安装挂接在BSP

Size=通道(i).发送长度控制寄存器值

Ifsize>O&&size<=FPGA_.BIfF_LEN{

define和#undef来控制是否挂接麟驱动。然后在文件配给附的是片选4,系统外设地址为OxFTFFFF80,根据

寄存器配置要求,给该端口赋以配置值。再对文件Syslib.c,在数组sysPhysMemDese[]中进行虚拟内存的设置,分配内存驱动,来进行对FPGA设备的读写功能。

中。首先,在corgig.h中定义一宏INCLUDE_FPGA,可用#

GPio.c中,函数sysGPI()Init(void)进行片选设置,本设计中分

Index=(队列Vii.tail+1==FPGABUF_UNIT)?0:(队列[i].tail+1))

If(!FULL)

空间。这样,当vxWorks操作系统启动时,会自动挂载FPGA

队列尾=index;

Fpga=保存队列尾地址;发送缓冲区Ei-t=fpga;

发送首地址偏移控制单元寄存器置位;

调用at91FpgaRead()或at91FpgaWrite()接口函数;

参考文献:

Ef3

VxWorks

BSPDeveloper's

Guide.Wind

RiverSystem,

Inc.2002.

E23谢伟,等.VxWorks下驱动程序的设计EJ].中国民

航飞行学院学报,2005。(4).

I-3-3喻俊淇,等.VxWorks平台FPGA光通信接121驱动开发EJ-1.微计算机信息(嵌入式与SOC),2008,12—2.E4]周启平,张杨.VxWorks下设备驱动程序及BSP开

其中,at91FpgaRead()为向上层应用提供的标准读函数,两个参数:intlane,unsignedshort*datareeeive。其中

发指南[闽.北京:中国电力出版社,2004.

(上接第15页)

施工中要组织计划好施工项目,形成有效的流水施工程序,杜绝运输受阻而不得不提前开放交通的局面。

面处理。

(2)裂缝不很规则且宽度又较大的情况,可划出一定范围,将混凝土面板凿去5~8cm深,清理干净,配一层钢筋网。钢筋网必须覆盖裂缝,并在每边留有一定宽度,湿润后用混凝土浇捣进行表面处理。

(3)裂缝很大时,须把断板整块板凿出,配双层钢筋网,重新浇筑混凝土。

根据工程实践证明,水泥混凝土路面施工时只

4常用断板处理方法

(1)对于裂缝规则且宽度不大时,可将板块沿缝按一定宽度划线,将划线内部整齐凿出,检查裂缝处基底有无问题,有问题要进行回填夯实处理。在混凝土切割侧壁凿出直径4cm,深约lOcm,水平间距30~40cm的孔洞,埋入直径18-~20mm,长约20cm的Ⅱ级钢筋,封堵孔洞,将整个凿出的槽润湿,用早强微膨胀水泥混凝土或用速凝混凝土浇捣,进行表

一26~

要采用正确的预防措施,混凝土路面的断板率就会

大大减少。这对于保证水泥混凝土路面旌工质量,节约投资,延长混凝土路面的使用寿命将是十分重要的。

万方数据

操作系统

VxWorks操作系统下FPGA设备驱动程序实现

作者:作者单位:刊名:英文刊名:年,卷(期):

项伟, 韩礼红, XIANG Wei, HAN Li-hong

项伟,XIANG Wei(长江工程职业技术学院,武汉,430212), 韩礼红,HAN Li-hong(兰州交通大学,兰州,730070)

长江工程职业技术学院学报

JOURNAL OF CHANGJIANG ENGINEERING VOCATIONAL COLLEGE2010,27(3)

参考文献(4条)

1.周启平;张杨 VxWorks下设备驱动程序及BSP开发指南 20042.喻俊淇 VxWorks 平台 FPGA 光通信接口驱动开发 2008

3.谢伟 VxWorks下驱动程序的设计[期刊论文]-中国民航飞行学院学报 2005(04)4.VxWorks BSP Developer's Guide 2002

本文链接:/Periodical_cjzgdxxb201003010.aspx

本文来源:https://www.bwwdw.com/article/7ry4.html

Top