基于CPCI的伺服卡的DMA和中断研究-基础电子_第1页
基于CPCI的伺服卡的DMA和中断研究-基础电子_第2页
基于CPCI的伺服卡的DMA和中断研究-基础电子_第3页
基于CPCI的伺服卡的DMA和中断研究-基础电子_第4页
基于CPCI的伺服卡的DMA和中断研究-基础电子_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑基于CPCI的伺服卡的DMA和中断研究-基础电子摘要:为简化当前光电设备电子学系统的结构,本文提出了基于CPCI总线,以DSP和FPGA为控制的伺服控制卡结构,来取代原来的控制子系统;在Windows2000下,利用DriverStudio为其开发的WDM驱动程序,采用DMA结合中断的数据传输方式,使其与上位机的通信速率在突发模式下能达到26.3Mbytes/s,满足了系统对伺服控制器的实时性要求。

引言

在当前光电子学系统中,以PC104作为伺服控制分系统,体积庞大,不便于系统管理。开发具有伺服控制能力的处理卡,用一块板卡替代原来的系统,能简化系统结构,提高系统的集成度,使电子学系统终成为一个高度集成的控制平台。

CPCI(CompactPCI)总线在PCI总线基础之上,采用了欧洲卡结构,抛弃金手指式互连方式,改用2mm密度的针孔连接器,并具有可热插拔性,使其具有了更高的可靠性和开放性,并且能适应恶劣的工作环境,在工业控制、航空航天等领域得到广泛应用。自行开发的伺服控制卡基于CPCI总线,以DSP作为卡上控制CPU,与FPGA结合实现控制。本论文以该伺服控制卡为依托,在概述其硬件平台结构的基础上,介绍了在Windows2000下CPCI设备驱动程序的设计与开发,重点阐述了桥接芯片PCI9054的DMA数据传输实现及中断处理机制。

1.伺服控制卡的系统结构与硬件实现方案

伺服控制卡以TI公司的TMS320F2812DSP作为处理器,与FPGA结合来实现整个板卡的控制功能,通过CPCI总线完成与上位PC机的通信,其系统功能框图如图1所示:

图1伺服控制卡硬件结构图

FPGA选用Altera公司的EPF10K30A,它内嵌1536Byte的RAM,此RAM为主机与DSP共享,用于上位机与DSP之间的高速数据缓冲,FPGA负责接收上位机传递的命令和参数等数据,经处理后发送给DSP进行相应的控制操作,同时反馈信息给上位机。TMS32F2812的主要任务就是完成复杂的伺服控制算法,特别是位置控制和速度控制。

FPGA通过2812的外部中断XINT1和XINT2来触发2812接收控制命令和参数,2812接收到命令后,根据自身定义的工作协议进入相应的工作状态。

系统设计中采用PLX公司的PCI9054作为总线接口芯片,实现CPCI局部总线与FPGA的通信。PCI9054采用C模式,在该模式下,PCI的数据线与地址线是非复用的,设计时只需关注9054的本地端总线。

2.WDM驱动程序设计

在Windows环境下,位于用户态的应用程序不能之间访问硬件资源,而要通过执行核心态的驱动程序来间接完成对硬件资源的访问,因此,对于上位机上的应用程序,要对伺服控制卡进行访问,必须要为其开发驱动程序。

WDM驱动程序是一种Pnp驱动程序,它能够实现Windows98与Windows2000、WindowsXP之间的源代码级兼容。Windows2000性能稳定,在调试自行开发的板卡时,仍然是的操作系统。在Windows2000中,所有对驱动程序的I/O请求都转化为I/O请求包(IRP)来表示,IRP是I/O管理器在响应I/O请求时从非分页系统内存中分配的一个可变大小的数据结构,I/O管理器负责产生代表I/O操作的IRP,并将IRP传至正确的设备驱动程序,并通过分层的驱动程序传递给物理设备。设备驱动程序则接收IRP,执行相应的操作,完成后再将IRP传送回I/O管理器,表示I/O操作的完成或者通过I/O管理器将其传递给其他的驱动程序进行进一步的处理。

3.伺服控制卡的WDM驱动程序设计与实现

驱动程序的开发环境常用的有微软的DDK、Jungo的WinDriver和Numega的DriverStudio。DriverStudio把DDK封装成类,包含完善的代码生成和调试工具,并且提供对WDM驱动的完全支持,利用它开发的态驱动程序运行效率也很高。本系统在VC环境下利用DriverStudio开发驱动程序。

接口芯片PCI9054支持主模式、从模式和DMA模式三种数据传输方式。DMA传输不通过处理器,直接进行数据交换,可以节省CPU资源;并且DMA模式还支持CPCI总线与本地总线之间的高效突发。

3.1DMA数据传输实现

PCI9054集成了两个互相独立的DMA通道,每一个通道由一个DMA控制器和一个专用双向FIFO组成,都支持块DMA和分散/集中DMA操作,这里选用DMA通道0,采用块DMA方式实现传输。在DriverWorks中提供了三个类来实现DMA传输,分别是KDmaAdapter类、KDmaTransfer类和KCommonDmaBuffer类。

3.1.1.DMA适配器

对于DMA传输,驱动程序需要创建一个DMA适配器,来表明一个DMA通道的特性和提供串行化访问的服务。KDmaAdapter类实现对DMA适配器的操作。在它的初始化函数Initialize(PDEVICE_DESCRIPTIONpDesc,PDEVICE_OBJECTpPdo)中个参数是一个DEVICE_DESCRIPTION结构的指针,这个参数用于对DMA通道的属性进行设置。

3.1.2.DMA控制器

采用DMA方式时,CPU要放弃对系统总线的使用权,主存储器和外部设备是被控制的对象,它们之间没有相互控制的能力,需要利用DMA控制器来代替CPU完成控制功能。

在用DriverWorks开发驱动时,KDmaTransfer类用于控制DMA的传输;它可以启动一个DMA传输,指定DMA传输的方向,DMA传输数据缓冲区的物理地址和要传输的字节数。KDmaTransfer类的Initiate()函数用于初始化一个KDmaTransfer对象;在成功初始化一个KDmaTransfer类对象后,将会调用DMA准备就绪回调例程OnDmaReady,在该例程中获取要传输的内存的地址和字节数,并调用StartDMA例程开始DMA传输。

与中断结合的DMA传输在传输结束后会再次调用KDmaTransfer类的Continue()函数发起下的DMA传输操作,直到传输完成。

3.1.3.DMA公共缓冲区

在DriverWorks中KCommonDmaBuffer类实现对公用缓冲区的操作。在实际使用时,声明一个KCommonDmaBuffer类对象并初始化。在传输结束后,释放公共缓冲区,以防止内存丢失。

3.1.4.寄存器设置

PCI9054在DMA模式下传输,驱动程序要通过I/O指令设置DMA控制器内部的寄存器以实现两总线间的数据传送,需要设置的内部寄存器及其具体功能如下表1所示:

3.2驱动开发中的中断处理机制及实现

本系统的驱动程序采用块DMA与中断结合的方式来实现主机与伺服控制卡之间的数据传输。以读操作为例,每次DMA传输完后,都会产生一个DMA中断,中断处理程序应答中断,并获取公共缓冲区中的数据,通知主机端有数据到达;可以看出,高效的DMA处理依赖于高效的中断处理过程。

中断处理完成CPU与I/O设备之间的信息交换,在为硬件板卡开发驱动程序时需要为中断配置相应的驱动处理。在处理中断之前要对中断资源进行配置,首先定义并初始化一个中断对象,在初始化阶段,提取IRP资源中的中断级别、中断模式、中断向量、共享模式等信息。利用上面获得的参数来连接中断,连接中断操作的主要目的是注册设备驱动的中断服务例程(ISR),以便在中断发生后中断服务例程能够被调用。在DriverWorks中用KInterrupt类实现对硬件中断的处理。

status=m_Irq.InitializeAndConnect(pResListTranslated,LinkTo(Isr_Irq),this)

当硬件发生中断时,硬件抽象层(HAL)把中断级别(IRQL)提升到合适的中断级别,然后调用中断服务例程(ISR)。CPCI总线是中断共享的,因此,ISR首先确定是哪一个设备发生了中断,如果不是当前设备的中断,立即返回FALSE,以便HAL把中断发送给其他设备的驱动程序。如果是当前设备的中断,则在清除该中断,并做相应的处理。中断处理的整个过程如下图2所示:

ISR执行在高于DISPATCH_LEVEL的IRQL上,它冻结了其CPU上所有低于或等于该IRQL上的其他活动,为了提高系统性能,ISR例程应该尽可能快的完成;此外,ISR中使用的所有代码和数据必须存在于非分页内存中,能调用的内核模式函数也十分有限。

图2:中断处理流程图

Windows2000提供了延迟过程调用(DPC)机制来解决这个问题,ISR决定当前请求的完成并请求一个DPC,之后,内核在DISPATCH_LEVEL级上调用这个DPC例程。当有当前设备的中断到来时,把一个DPC插入到DPC队列中。实现代码如下:

m_DpcFor_Irq.Setup(LinkTo(DpcFor_Irq),this);//创建一个DPCm_DpcFor_Irq.Request(NULL,NULL)//把一个DPC插入到DPC队列等待执行

4.应用程序与驱动程序的通信

4.1通信的实现策略

应用程序采用Win32事件通知的方式与驱动程序进行通信:应用程序调用API函数CreatFile打开设备,调用CreateEvent创建事件句柄hEvent并置为无信号态,把hEvent作为函数DeviceIoControl的参数传递给驱动程序,同时调用CreateThread创建等待线程;WDM驱动程序接收事件句柄hEven,初始化KEvent类对象m_hEvent,当中断发生时,在DPC中执行m_hEvent-Set(),将事件设置为信号态,唤醒应用程序中的等待线程,然后调用DeviceIoControl完成数据传输。

4.2数据传输速率测量

在实际测量时,采用了硬件测量法,应用程序不断向DSP处理卡发送数据/接收数据,利用示波器来观测BLAST#和ADS#信号的变化周期,得出每组数据的传输时间。该DSP卡本地端总线为8位,在DMA模式下,测得的发送/接收时的测量结果如下表2所示:

从以上结果可以看出,无限突发DMA模式传输速率,可达26.3Mbyte/s,若本地端总线为32位,则数据传输速率可以达到26.3*4=105.2Mbyte/s,接近32位PCI总线的极限传输速率133Mbyte/s,能够满足大部分高速数据传输要求。

5.结束语

自行开发的伺服控制卡,基于高速的CPCI总线,以DSP作为卡上处理器,以FPGA实现逻辑处理,能够作为一个独立的单元替代原来的工控机子系统,大大简化了当前光电子学系统结构;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论