基于VxWorks的VME从板驱动设计与实现
扫描二维码
随时随地手机看文章
摘要:基于VxWorks操作系统设计了数据采集从板的驱动程序,程序框架上驱动程序将对从板的操作抽象为对字符型设备的操作,驱动程序在内部实现了数据IO操作的阻塞机制、查询机制及信号通知机制,采用这种方式设计的驱动程序向用户提供了统一的接口,方便用户使用,同时将硬件操作与应用程序分开便于驱动程序进行扩展;驱动设计工作是精密环境控制系统的一部分,驱动程序的设计方法可以广泛地应用于基于VME总线的从设备驱动设计。
关键词:VxWorks操作系统;VME总线;设备驱动程序;数据采集
基于VME总线搭建了精密环境控制系统,整个系统中基于VxWorks的VME总线驱动程序连接了软件操作与VME从板的硬件通信,VxWorks操作系统下驱动程序的开发是应用VxWorks操作系统的关键因素。本文应用通用公司的VG5-7457PowerPC嵌入式VME单板机作为主板及通用公司的VME-3122A作为数据采集从板组成数据采集系统。针对数据采集从板的通用特征详细的设计了基于VG5硬件和VxWorks操作系统的VME数据采集从板的驱动程序,在驱动程序的设计过程中,特别地考虑了驱动程序数据传输机制的设计,采用良好传输机制设计的驱动程序具有优良的驱动架构,便于移植及扩展。
1 采集系统的系统结构
1.1 采集系统结构分析
采集系统基于VME总线实现,系统是精密环境控制的重要组成部分,它的整体结构如图1所示。
系统以VME总线为整体架构,VME总线上使用VG5-7457PowerPC嵌入式VME单板机作VME总线控制器,通过VME总线控制数据采集设备(AD数据采集卡),同时将控制输出经过VME总线下传到控制输出(DA数据输出卡),它同时通过以太网络与上位机相连;数据在VME总线的可靠传输是系统实现功能的关键部分,这主要通过在VG5单板机上设计基于VxWorks操作系统的VME总线的驱动来保证。
1.2 VG5主控板的结构分析及其对VME总线驱动的支持
驱动程序最终运行在VG5-7457单板机上,单板机的VME总线支持是实现单板机对VME总线驱动的关键因素。单板机系统的VME总线硬件结构如图2所示。
单板机使用UniverseⅡVME-to-PCI总线桥芯片实现系统的VMM总线,芯片实际上完成了VME总线与PCI总线的操作的互相转化,它同时具备多种转换方式,首先可以完成2个总线中断的互相转换操作,其次可以完成通过VME总线访问PCI总线,最后可以完成PIC总线访问VME总线;这些转换操作很多都是通过芯片的内部寄存器实现的。由于总线桥芯片的转换能力,使得VG5-7457单板机既可以作为VME主控板使用,又可以作为从板使用。
VxWorks操作系统下将VME总线地址映射为CPU的本地地址,其映射可以在相关的BSP文件中定义,设计中的映射如表1所示,将VME总线映射为CPU本地地址后,对从板的操作就转化为于对内存访问操作相似的读写操作,使得VME总线的驱动可以方便的实现。
对于操作VME总线区域的内存空间,系统提供了一系列的接口函数,系统提供的接口函数列表如表2所示。
写内存空间的函数使用svsOut*函数族来完成,需要提供给函数的参数是写入的地址及写入的数据;读内存空间使用sysIn*函数族来完成,需要提供的参数是读的地址,返回值是读到的内容。函数在VxWorks的BSP中定义,使用汇编语言的方法实现相关的操作。
2 数据采集板的硬件结构抽象
从主板的VME地址空间上看从板的结构图如图3所示。
VME地址空间上从板主要分为4块地址区域,它们分别为从板的标识寄存器、从板的随机读写寄存器、功能设置寄存器及数据缓冲区,前两个存储区域主要用来标识从板及对从板进行测试,功能设置寄存器主要用来完成对数据采集从板的功能配置,数据缓冲区主要用来完成数据的传输;其中功能设置寄存器及数据缓冲区是实现对从板数据采集及控制的关键。依据从板的结构特点设计字符型设备驱动框架,驱动程序设计的重点是驱动模型的建立。
3 驱动程序的设计
3.1 数据结构设计
将从板所占用的系统硬件及软件资源抽象成为从板字符型设备的结构体,其定义如下所示。
这样的数据结构设计实现了对从板的抽象,使得驱动程序具有良好的可移植性,方便的实现对多种板卡的驱动。
3.2 数据传输机制设计
驱动程序设计模仿了Linux操作系统实现了数据传输的机制——查询机制,数据传输的阻塞机制及信号通知机制。
查询机制主要是指驱动程序为应用程序提供查询缓冲区标志的接口,应用程序可以随时查询缓冲区的状态而不会引起任务状态的变化;阻塞机制是调用获取缓冲区的任务在缓冲区没有数据时会使该任务处于阻塞状态,直到缓冲区数据可用获得后,任务才会重新获得运行;信号机制是应用程序预先设定一个信号处理函数,当缓冲区有数据时,系统就会自动调用这个信号处理函数而完成用户预定的操作;阻塞机制的任务图示如图4所示,这些机制的细节可用参考文献。要实现这些功能需要实现中断处理机制、字符设备操作的ioctrl方法和read方法。
4 驱动程序的实现
4.1 中断程序的实现
中断程序的实现上使用了上、下两半部机制,上半部是中断处理函数,下半部是中断处理任务,上、下两半部使用信号量进行同步,其中功能性的操作主要安排在中断处理任务中。其程序框架如图5所示。在中断任务中实现对数据缓冲区的操作及缓冲区标志操作,实现操作的过程中着重解决与ioctrl方法和read方法进行同步。
4.2 驱动程序ioctrl方法的实现
驱动程序的ioctrl方法在驱动程序中具有重要地位,它除了要实现从板功能寄存器的设置及驱动程序的查询机制外,还要实现用户信号处理函数的注册工作,结合这些功能实现的ioctrl方法的框架代码如下所示。
整个的ioctl方法由switch结构组成,这样的结构代码简单明了,易读性和可维护性都很好,同时可以方便地通过扩充命令的方法来实现对从板功能寄存器多种多样的操作,便于驱动程序的重用。
4.3 驱动程序read方法的买现
驱动程序的read方法主要实现对缓冲区数据的读取,同时它是实现数据阻塞操作的关键,read方法的程序流程图如图6所示。
函数首先进行参数的检查及转化;然后检查缓冲区标志,如果缓冲区存在数据则直接读出数据,如果缓冲区没有数据,函数就会申请缓冲区的信号量而使任务处于挂起状态,当中断处理任务处理完缓冲区后会发送一个信号量而使任务重新运行并且读出缓冲区数据;函数最后是设置缓冲区标志,表示缓冲区数据已经读出。函数要与中断处理任务进行同步;读取和设置缓冲区标志使用原子操作的方法,等待中断处理任务设置缓冲区时使用了信号量的方式完成了同步。
5 VME总线数据传输测试
VME数据传输测试主要是测试总线数据传输的可靠性,只有总线数据传输的可靠性能够保证,驱动才能稳定的运行,其测试的方法是通过随机地读写从板的随机读写寄存器来完成的,整个测试中为了模拟操作系统在有负载情况下的运行效果,增加了一些定时器操作,
其测试的程序流程图如图7所示。
使用这种测试的方法最终得到测试的结果如表3所示。从测试结果可以看出,数据传输的准确性比较好,通过阅读VG5-7457PowerPC的板级支持包可以发现其实现VME数据总线操作的函数都有原子操作过程,以此保证数据传输的可靠性。良好的VME总线传输特性为驱动的实现提供了良好的基础。
6 结论
设计了基于VxWorks操作系统的VME总线从板的驱动程序框架,着重介绍了驱动程序的机制及这些机制的实现方法;在设计的整体上重点地考虑了驱动程序的可维护性及可移转性。采用这种方式建立起来的驱动程序代码的可读性好,可维护性强,而且可以方便地移植到其他的应用场合。