阅读:2241回复:4
求助,dos下的PCI板卡驱动。
我在DOS下驱动PLX 9052,但是不能接受到中断。
我遇到的问题有下面几个: 1)我自己的dos程序取读PCI配置空间的六个地址时,只有地址1(从0期)有数据(端口地址),可是WINDRIVER能测出两个内存映像,请问我怎么才能得到内存映像呢?我只能得到端口地址,端口编程来驱动也可以吧? 2)我自己编的程序,不能接受到板卡产生的中断,可是 windriver能,不知道为什么?我用了setvect、和8259的操作。按理,windriver能做的,我也可以啊。我少些什么呢?我模拟生成该中断,geninterrupt,我的程序能接受到中断。 3) 我对plx 9052设置的仅仅是intcsr。是不是不够? 4) 我在他的机器上试,能做到上面这些步,可是当我拿到我自己的机器上时(P4,精英主板,award bios),在win 2000下windriver能找到,win2000的dos中不能找到pci_bios,win98中,windriver能找到plx 9052,但是六个地址都是0,相应的dos中我的程序也是六个0。 谢谢。 |
|
|
沙发#
发布于:2001-09-29 14:58
你用什么方式读的pci configuratoin? (1,pci bios:int 1ah 2, 直接端品访问 0xcf8 - 0xcfc)?换种方式试试!
IRQ和软件中断int不是一回事,在dos下,irq0-7对应int 8-f, irq 8-f对应int 70-7f。 以上信息或许有帮助! Matt Wu |
|
|
板凳#
发布于:2001-09-29 16:28
matt你好,:) 能和你多交流一下么?
1. 第一个问题,我明白了一部分,dos是16位的,而bios给pci分配的内存映射空间一般都是0xe0000000之类的,所以dos取得的地址其实就是0,无效。所以,我感觉,如果不用特殊手段的话,恐怕在dos下只有端口访问PCI BAR一种方式了。我用的方式是int 1AH.我当时是在98的dos环境下,我用我的程序修改local register area部分的寄存器,例如intcsr,同时我用windriver测,发现确实测到了我改变的值。你说的用端口读取pci的我也可以试试。 2. 中断还是没有产生。我感觉很奇怪,我的做法和你说的相似,是加了8H或者70H的。我把中断号改成1ch,就是时钟中断,能够调用我这个。也许这不能说明什么。 我对中断部分操作的就是如下: 设置/取消中断: setvect,... outp(0x21 或者 0xa1,...) 中断服务程序: outp(0x20获0xa0, 0x20) 3. 中断就是不能在我的dos程序下被接受,为什么呢?请问你有dos下的pci程序的例子么?其实我这个程序是参照amcc 5933的举例程序改的,没想到会这样,今年2月份我编了使用5933的一块板卡的linux驱动,成功了。不想现在死在dos手里了。。。。现在是给朋友编,他也着急。 帮忙啊! |
|
|
地板#
发布于:2001-09-29 17:02
[QUOTE]原本由 sosoln 发表
[B]matt你好,:) 能和你多交流一下么? 1. 第一个问题,我明白了一部分,dos是16位的,而bios给pci分配 2. 中断还是没有产生。我感觉很奇怪,我的做法和你说的相似,是加了8H或者70H的。我把中断号改成1ch,就是时钟中断,能够调用我这个。也许这不能说明什么。 我对中断部分操作的就是如下: 设置/取消中断: setvect,... outp(0x21 或者 0xa1,...) 中断服务程序: outp(0x20获0xa0, 0x20) [/B][/QUOTE] 第一个问题,好像可以解决,比如int 15h,或protect mode。 对第二个问题,我很迷惑,你为什么必为1ch呢?从pci config中读出irq line,然后加上08h或70h,然后再*4,即得int vector address,是这个过程吗? 还有一点,在start之前,利用outp(0x21 或者 0xa1,...)清空IRR对应你申请的中断所在的位。 Matt Wu |
|
|
地下室#
发布于:2001-09-30 12:12
看来,我还是没有查那么多资料。你说的那几点我没有注意。
1ch 是我tc 2.0的程序来测测中断向量对不对的,没有别的意思。 int_vector = irq + 0x8 (or 0x70) 然后我用的是setvector(int_vector),没有*4,这一点似乎没有错。 我套的是amcc的三个文件,我恐怕需要查查pci的bios调用了。 http://www.amcc.com/Products/Pci/Dmacodec.txt http://www.amcc.com/Products/Pci/Amcclibc.txt http://www.amcc.com/Products/Pci/Amcch.txt 谢谢,:)我再调调。 |
|
|