picker
驱动牛犊
驱动牛犊
  • 注册日期2001-06-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2536回复:8

关于pci的i/o

楼主#
更多 发布于:2001-09-05 23:03
我最近做了一些关于pci和isa的驱动,有一个问题,就是isa的io映射,是映射到系统的低64k里,而pci的io映射,是映射到系统的什么地方?它的地址是如何定义的?和系统的io端口分配有没有关系?

最新喜欢:

milkywaymilkyw...
guest
驱动牛犊
驱动牛犊
  • 注册日期2001-06-12
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-06 02:02
也应该是映射到系统的64KByte I/O空间内,实际上目前的大多数主板上,ISA总线也是由PCI总线转出的。由CPU能执行的I/O指令的种类,也能证明,X86体系的CPU只能发起16位地址的I/O访问。
PCI总线本身就是支持PnP的,其I/O端口的分配由操作系统和驱动程序共同决定。
picker
驱动牛犊
驱动牛犊
  • 注册日期2001-06-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-06 09:26
可是,为什么pci给出的io空间基地址是16位,而isa却为10位那?
ZhuYong
驱动牛犊
驱动牛犊
  • 注册日期2001-09-06
  • 最后登录2002-05-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-07 01:52
今天刚刚完成注册手续,继续回答您的问题。

这与ISA总线的历史有关,早期的ISA板卡只使用10位地址译码。其实,ISA板卡均可以按16位地址译码来设计。因此使用10位地址译码的ISA板卡会浪费太多的I/O空间。
游虾一只。
picker
驱动牛犊
驱动牛犊
  • 注册日期2001-06-01
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-07 08:36
  不好意思,我还是不太明白,因为我从windows系统的手册里看到,前1k的io地址是系统分配的,可以用于板卡的io映射使用。而在低端mem空间里,有128k的空间用于外部板卡的mem映射用。
  那么我就有些不明白了,pci的io映射难道是映射到系统留给外部板卡mem映射的128k空间里了?那么的话,岂不是pci的io映射名不副其实了?如果不是的话,pci的io空间究竟映射到系统的哪部分存储空间里面去了?
  感谢这位老兄的耐心支持,小弟感激不尽,会给你多多加分 :)
  
  
ZhuYong
驱动牛犊
驱动牛犊
  • 注册日期2001-09-06
  • 最后登录2002-05-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-07 12:44
    摆开windows这种特定的开发环境,从汇编指令上讲,IN/OUT 用于访问I/O空间,MOV等指令用于访问Mem空间;从硬件读写周期上讲,不论HOST BUS/PCI BUS/ISA BUS,都会使用有别于地址/数据线的控制线来指定(本周期是存储器访问,还是I/O访问),可见两种空间是分开的。

    我对windows编程不是很熟,但我想,您所说的1k的io地址,还是用10位地址译码的思考方式得出的。使用PCI配置周期指令或Windriver等工具,应能取得系统配置指定的I/O空间,记得要用IN/OUT指令访问。
游虾一只。
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-09-28 22:05
on physical side, some CPU use different way to access i/o space and memory space, the other CPUs use the same way for both of i/o space and memory space; you need to know in details only when you are going to design PCI interface hardware.

on PCI driver side, the bios will arrange the PCI card resources requirement and keep them inside the PCI header space. you just need to know how to read this information and use it. you do not need to know more in order to develop a driver.
as long as you got i/o resource, just use READ_PORT_ULONG()
as long as you got mem resourve, just use READ_REGISTER_ULONG()
these will be enough to develop a driver.

by the way, it is better to know as much as possible.
Master_Yi
驱动牛犊
驱动牛犊
  • 注册日期2002-04-04
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-17 16:53
PCI总线不是专为PC设计的。PCI本身能够做32位地址的IO,但受PC体系的局限(或者说是为了和以前的老机器兼容),只能做16位地址的IO。也就是说,如果你自己做一台机器的话,不用考虑跟别人兼容,是完全可以做到32位地址的IO的。所以实际上,PCI跟ISA的IO映射是一样的(对软件编程来说)。至于10位IO地址,那是当初PC设计的时候没想到会用到这么多的IO地址。为了硬件设计的简单(不用译码那么多地址线,对与节省成本及走线都会有帮助。所以PCI为了节省一点IO空间,推荐使用内存空间。兼容是新产品诞生时无奈的选择,但技术的发展如此之快,使这种兼容的设计往往会束缚新技术的充分发挥。
我读书少,不要欺负我呀!
boy9boy
驱动牛犊
驱动牛犊
  • 注册日期2004-11-13
  • 最后登录2005-02-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-28 18:16
可以不按PCI卡在资源分配时的256个I/O口的限制吗?如何配置?
boy
游客

返回顶部