PCI配置空间
当VxWorks内核起来之后,PCI设备的第一次使用都是必须在调用sysHwInit2()例程之后。但是由于MMU内存映射的初始化和激活是在例程sysHwInit()和sysHwInit2()之间的,所以推荐的PCI初始化顺序为:
sysHwInit() 默认的MMU table entries相当于将本地事务映射为PCI事务的HOST-Bridge的访问侧
sysHwInit2() 在该例程中,程序员必须静态配置所有的PCI设备,或者调用动态配置routine pciAutoConfig()
每个PCI设备有3种物理空间:配置空间、存储器空间和I/O空间。配置空间是长度256字节的一段连续空间(16个32位寄存器)其中前64个字节为头标,其余192字节为设备相关信息。在64字节的头标中,前16字节的定义是确定的,后48字节的具体含义因设备而异。配置空间中的一个重要部分是基地址寄存器(BaseAddresssRegister),它的内容是PCI设备的地址空间映射到系统地址空间的起始物理地址。其中,bit0=1表示IO空间映射,bit0=0表示存储器空间映射。所有PCI设备必须实现存储器空间映射。通过向BAR写全1即可确定所需地址空间的大小。在VxWorks下要访问一个PCI设备,只需要知道该设备的厂商号和设备号。
基于VxWorks的PCi设备驱动程序开发流程,分为4个步骤:①创建设备;②根据PCI设备的配置参数,对PCI设备编写功能函数程序;
知道厂商号和设备号后,利用VxWorks提供的函数pciFindDevice()获得设备的总线号、设备编号和功能号。然后调用peiConfigInLong()获得多功能数据采集卡设备的配置空间、内存空间、I/O空间的地址;pciConfigInByte得到设备中断号。在读取设备的基地址时,结合设备相关的说明书进行。
STATUS pciFindDevice(int vendorId, int deviceId,int