VxWorks下PC/104-CAN驱动程序设计
发布时间:2008/6/3 0:00:00 访问次数:432
摘要:详细介绍实时多任务操作系统vxworks环境下驱动程序的设计原理;针对驱动程序实现的困难,给出vxworks下实现驱动程序的工作步骤。文件以pc/104-can适配卡为例,简要介绍硬件结构,重点给出驱动程序实现的关键代码。
关键词:rtos vxworks pc/104 can i/o系统 驱动系统
vxworks是一款优秀的实时多任务操作系统,具有抢占式调试、中断延迟小等特点。本文在简要介绍必备的硬件环境下,以vxworks为平台,详细介绍驱动程序的开发。
1 pc/104-can适配卡的硬件结构
pc/104-can适配卡主要由can控制器(sja1000)、光电隔离(6n137),收发驱动器(82c250)及译码电路组成。编程主要了解的是控制器sja1000。can适配卡原理如图1所示。
2 can地址译码和中断选择
系统104主板的cpu为486dx,其对接口板访问有两种方式:内存映射和i/o访问。i/o寻址采用专门的指令,每次只能传送单个字节。内存映射方式可以访问较大的地址空间并且指令丰富,便于实现快速交换数据。本文讨论的can卡采用存映射模式工作,与486dx接口是104总线,它与isa总线兼容。对于intel x86体系的cpu,isa可以映射的空间为0xc8000~0xeffff。使用比较器和地址选择开关组成可选端口地址译码电路,通过开关选通内存映射基地址(c8000h、c9000h、ca000h、…、ef000h),以避免与其它器件冲突。can偏移地址分配如下:
00~ffh sja1000的寄存器;
100h~1ffh 对该范围内的任意地址进行写操作,均可导致can硬件复位。
sja1000的int引脚通过跳线选择irq3~7、irq9~12或irq15中的一个,避免与其它的适配卡冲突。
3 pc/104-can适配卡驱动实现
3.1 vxworks驱动概述
vxworks操作系统有两种方式实现驱动。第一种方式是,把设备驱动程序作为独立任务实现,直接在顶层任务中实现硬件操作,完成特有专用的驱动程序。第二种方式是,vxworks的i/o系统将设备程序作为内核过程实现。这种方式便于实现i/o子系统的层次模型,便于文件系统一起把设备作为特殊文件处理,提供统一的管理、统一的界面和统一的使用方法,并把设备、文件及网络通信组织成为一致的更高层次的抽象,为用户提供统一的系统服务和用户接口。我们和这种驱动方式。
作为i/o系统和硬件设备之间的连接层,vxworks驱动就是屏蔽硬件操作,为i/o系统提供服务。实现一个完整的驱动,必须了解vxworks下i/o的三个基本元素:file、driver和dervice。file是为用户提供访问设备的统一接口;driver是实现具体的基本控制函数,也就是实现i/o系统所需要的接口;而device则是一个抽象的硬件设备,是一系列的结构体、变量和宏定义对实际物理设备的定义。一般而言,实现一个驱动应该有三个基本的步骤:①用编程语言完成对实际物理设备的抽象;②完成系统所需要的各类接口及自身的特殊接口;③将驱动集成到操作系统中。之后还有一些调试工作。
3.2 vxworks i/o系统驱动程序框架
vxworks为各种设备(包括字符设备、块设备、虚拟设备及网络设备)提供统一的访问接口,包括七种基本的i/o函数:open(filename、flags、mode),create(filename、flags),read(fd、&buf、nbytes),write(fd、&buf、nbytes),ioctl(fd、command、arg),close(fd)及remove(filename)。i/o系统所起的作用就是,把用户请求分配到与设备对应的驱动例程中去。vxworks系统中有一个驱动程序列表,其形式如表1所列。
表1 设备驱动列表(调试时可利用iosdrvshow()查看)
驱动号码 | create | remove | open | close | read | write | ioctl | ||
摘要:详细介绍实时多任务操作系统vxworks环境下驱动程序的设计原理;针对驱动程序实现的困难,给出vxworks下实现驱动程序的工作步骤。文件以pc/104-can适配卡为例,简要介绍硬件结构,重点给出驱动程序实现的关键代码。 关键词:rtos vxworks pc/104 can i/o系统 驱动系统 vxworks是一款优秀的实时多任务操作系统,具有抢占式调试、中断延迟小等特点。本文在简要介绍必备的硬件环境下,以vxworks为平台,详细介绍驱动程序的开发。 1 pc/104-can适配卡的硬件结构 pc/104-can适配卡主要由can控制器(sja1000)、光电隔离(6n137),收发驱动器(82c250)及译码电路组成。编程主要了解的是控制器sja1000。can适配卡原理如图1所示。 系统104主板的cpu为486dx,其对接口板访问有两种方式:内存映射和i/o访问。i/o寻址采用专门的指令,每次只能传送单个字节。内存映射方式可以访问较大的地址空间并且指令丰富,便于实现快速交换数据。本文讨论的can卡采用存映射模式工作,与486dx接口是104总线,它与isa总线兼容。对于intel x86体系的cpu,isa可以映射的空间为0xc8000~0xeffff。使用比较器和地址选择开关组成可选端口地址译码电路,通过开关选通内存映射基地址(c8000h、c9000h、ca000h、…、ef000h),以避免与其它器件冲突。can偏移地址分配如下: 00~ffh sja1000的寄存器; 100h~1ffh 对该范围内的任意地址进行写操作,均可导致can硬件复位。 sja1000的int引脚通过跳线选择irq3~7、irq9~12或irq15中的一个,避免与其它的适配卡冲突。 3 pc/104-can适配卡驱动实现 3.1 vxworks驱动概述 vxworks操作系统有两种方式实现驱动。第一种方式是,把设备驱动程序作为独立任务实现,直接在顶层任务中实现硬件操作,完成特有专用的驱动程序。第二种方式是,vxworks的i/o系统将设备程序作为内核过程实现。这种方式便于实现i/o子系统的层次模型,便于文件系统一起把设备作为特殊文件处理,提供统一的管理、统一的界面和统一的使用方法,并把设备、文件及网络通信组织成为一致的更高层次的抽象,为用户提供统一的系统服务和用户接口。我们和这种驱动方式。 3.2 vxworks i/o系统驱动程序框架 vxworks为各种设备(包括字符设备、块设备、虚拟设备及网络设备)提供统一的访问接口,包括七种基本的i/o函数:open(filename、flags、mode),create(filename、flags),read(fd、&buf、nbytes),write(fd、&buf、nbytes),ioctl(fd、command、arg),close(fd)及remove(filename)。i/o系统所起的作用就是,把用户请求分配到与设备对应的驱动例程中去。vxworks系统中有一个驱动程序列表,其形式如表1所列。
|