阅读:2240回复:2
pci ct69000显控芯片vxworks下驱动问题
以下内容也发在了drew.nease.net的论坛上。
主板是一个pci104 plus模块,上面集成了一个ct69000显控芯片,为了支持双屏,又插了块69000的104显示模块。现在问题是怎么让vxworks或者说WinML使用这两块显卡。(WindML下有ct69000的驱动,但是只支持一块卡。)。按照如下步骤做完:现象是第一块卡能用,第二块卡能初始化,点亮屏幕但是黑屏,写东西不能显示。 我的思路是这样的:在原来驱动的基础上修改。 根据pci设备驱动开发的一般流程, 1.用pciFindDevice找到两块卡。 2.用pciConfigInLong等函数对其进行配置,根据pci specification, 第一块卡的device control register(配置空间偏移量o4h)设置成: I/O mapping enabled, memory mapping enabled, palette snooping disabled. 第二块卡配置成: I/O mapping disabled(防止I/0冲突), memory mapping enabled(以后的寄存器操作通过memory mapped I/O来实现), palette snooping enabled(见pci to pci bridge specification chapter 12的12.3.1). 3.读pci configuration space的偏移量为10h的memory base address.(两块卡这个值是不一样的,这是操作两块卡的基础)。将这个值赋给driver数据结构(UGL_GENERIC_DRIVER结构,见udgen.h)中的fbAddress.即frame buffer的base address.再将其他相关的函数的指针填到这个driver结构中. 到这里完成WindML框架规定的GRAPHIC_DEVICE_CREAE宏。 4.然后按照uglInitialize()源代码中的实现流程,下一步是mode set.这会调用驱动的相关函数。比如xxx16BitModeSet()。其入口参数之一是刚才得到的那个driver结构的指针。这个函数完成显控芯片寄存器配置工作,即初始化。(不是那些pci registers, 是显控芯片自己的寄存器)。由于两个显卡的I/O是一样的,所以我将原来驱动中的i/o端口操(sysInByte,sysOutByte),改成了memory mapped i/o操作,两块显卡映射到了不同的内存空间,所以这不会有问题。 5.这样初始化完成后(uglInitialize),我就创建了两个图形设备可用。 6.其他的ugl API的可重入问题。由于大都是对frame buffer进行操作,而这两块卡的pGenDriver中的frame buffer base address是不一样的,所以没有问题,不用修改太多。最多将I/O口的操作改成内存操作。 7.最后在sysLib.c中加入了MMU表中加入了一项。这个我用的是uglGraphicsMapShow测到的信息(其实与我自己前面读到的一样). (这种是静态的,还可以用动态的方法,有什么不同么?) 8.写测试代码。 所有这些做完后buid WindML, buid vxworks,运行测试代码最后结果是第一块屏能用,第二块屏能初始化,但是黑屏,写东西不能显示。换句话说就是所有的寄存器的配置能保证设备的初始化,但写frame buffer有问题。可MMU表中有第二块卡的一项,而第二块卡相关frame buffer寄存器的设置也是没问题的。 那问题出在哪呢,有做过类似项目的指点指点。dos下双显卡,windows下双显卡都应该有人做过的。欢迎交流。(crusor2@sina.com) 参考资料如下: 1.pci specification 2.2 2.pci to pci bridge specification 3. Intel x86 processor structure, programming, interface. 4. WindML programmer\'s guide 5. VxWorks programmer\'s guide 6. ct69000 datasheet 其他信息如下: bus # device# function# fbAddress ct690001 0 10 0 0xe0000000 ct690002 0 20 0 0xe2000000 I/O 端口对应的内存映射偏移量见ct69000 datasheet。 BSP:pentium |
|
|
沙发#
发布于:2003-05-23 11:32
你累不累??朋友
!! |
|
|
板凳#
发布于:2003-05-23 16:44
太累了。cao
|
|
|