(1)存储器空间支持0~4GB的空间配置和映射,而I/O空间只支持0~256字节的空间配置和映射;

(2)存储器空间支持8位、16位和32位总线位宽配置和操作,而I/O空间只支持32位总线位宽配置和操作;

(3)存储器空间支持单一周期和突发模式读写操作,而I/O空间只支持单一周期读写操作;

(4)在编写设备驱动程序时,存储器空间用程序指针进行访问,I/O空间则用专用的函数进行访问。

如果不清楚存储器空间和I/O空间的异同步,有可能配错相应的寄存器。当计算机重新启动时,很有可能会启动不起来。除此之外,值得注意的是:在配置存储器空间和I/O空间时,不要将两种硬件资源配置到相同的空间,导致空间重叠,使驱动程序产生误操作。

4、 DMA和突发数据传输

在《PCI9054-DataBook》中,每种工作模式都将DMA和突发数据传输的时序图放在一起,这并不意味着DMA和突发数据传输是等同的,这是两个不同的概念。事实上,既可利用一周期的总线操作也可以利用DMA方式进行数据传输。

DMA和突发数据传输的作用是不同的。PCI9054中有两个DMA通道,可以独立工作,互不干扰。采用DMA方式传输数据,可以节省CPU资源;采用突发方式传输数据可以提高数据的传输率,充分发挥PCI总线数据传输率高的优点。因此,在高速大容量数据传输和处理系统中,将DMA和突发数据传输方式结合在一起是比较理想的,一方面可以充分发挥PCI总线的性能,另一方面可以将节省出的CPU资源对数据处理算法进行优化。图3是PCI9054在C模式正气突发数据传输方式的时序图。

从图1和图3可以看出,用状态机实现该控制逻辑是比较理想的。图4是PCI9054在C模式下采用单一周期和突发相结合的总线访问状态转换图。用该状态转换图设计出的逻辑电路既可满足单一周期总线访问的需要,又可以满足突发方式传输数据的需要,具有很大的实用价值。

使用DMA和突发方式相结合进行数据传输时,驱动程序要作为如下设置:

(1)调用驱动程序中相应的API函数,找到PC机的物理地址;

(2)在设备驱动程序中使能突发寄存器;

(3)在设备驱动程序中使能总线位宽寄存器;

(4)在设备驱动程序中使能相应的寄存器,指明DMA传输的方向是PCI→LOCAL还是LOCAL→PCI;

(5)在设备驱动程序中指明本次DMA传输需要传输的字节数。