分类: Android平台
2013-09-05 15:53:04
http://blog.csdn.net/ykqnjust/article/details/6236389
PCI BAR空间分为两类:IORESOURCE_IO(非可预取)和IORESOURCE_MEM(可预取),一般来说,对于BAR为寄存器空间,都要设置为IORESOURCE_IO;对于BAR为存储器空间,要设置为IORESOURCE_MEM;
那么为什么要区分两种类型的空间呢?
所谓预取,重点在“取”字,这要从读取IO寄存器和RAM内存的区别来看。
LDD3
如果这个内存区被标识为可预取的, CPU 可缓存它的内容并且对它做所有类型的优化. 非可预取的内存存取, 另一方面, 不能被优化因为每次存取可能有边际效果, 就象 I/O 端口. 映射它们的寄存器到一个内存地址范围的外设声明这个范围是非可预取的, 而象在 PCI 板的视频内存的一些是可预取的.
WEB SEARCH
在一些应用中我们会遇到"可预取"内存的概念,可预取性是指存储器空间的可预取能力。如果读操作没有副作用(即如同从 RAM 中读数据一样不会破坏数据),则称存储器空间可预取。必要时可将字节写操作合并成一个双字写操作。可预取是读取一次以后不会改变读取地址和存储状态的任何改变,CPU 可缓存它的内容并且对它做所有类型的优化,.非"可预取"的内存就象FIFO地址影射到内存地址,读取数据以后会引起FIFO指针的改变.另外还象一些中断状态IO影射到内存,读取这个内存后,可能会清除中断标志等等,所以CPU不可缓存这个内存地址.
64H16 DATASHEET REGISTER DEFINITIONS
HWINIT
RC
在嵌入式ARM处理器中,没有专门的IO读取指令,而是采用存储器读写的方法访问寄存器,因此在PCI空间中还存在存储器映射IO设备, pci可预取存储器设备 与 存储器映射IO设备 的不同特点: 可预取存储器设备特点: 1)多次读写产生相同的数据; 2)允许在转发写缓冲器中进行字节合并; 对于存储器映射IO设备来说,上述两个特点均不适用,因为: 1)对于某些状态寄存器,读取可能导致状态位清除;对于FIFO,读取头部数据,会导致后面数据自动移位; 2)不能在桥芯片的转发写缓冲器中进行字节合并;