使用outb和inb进行低级I / O访问

时间:2012-01-22 11:09:48

标签: c assembly io interrupt hardware-port

我很难理解中断是如何工作的。

以下代码初始化可编程中断控制器

  #define PIC0_CTRL 0x20    /* Master PIC control register address. */
  #define PIC0_DATA 0x21    /* Master PIC data register address. */

  /* Mask all interrupts*/
  outb (PIC0_DATA, 0xff);

  /* Initialize master. */
  outb (PIC0_CTRL, 0x11); /* ICW1: single mode, edge triggered, expect ICW4. */
  outb (PIC0_DATA, 0x20); /* ICW2: line IR0...7 -> irq 0x20...0x27. */
  outb (PIC0_DATA, 0x04); /* ICW3: slave PIC on line IR2. */
  outb (PIC0_DATA, 0x01); /* ICW4: 8086 mode, normal EOI, non-buffered. */

  /* Unmask all interrupts. */
  outb (PIC0_DATA, 0x00);

有人可以向我解释它是如何运作的:

- outb的角色(我不懂linux的人)

- 地址及其含义

另一个不相关的问题,我读到outb和inb是针对端口映射的I / O,我们可以使用内存映射I / O进行输入/输出通信吗?

感谢。

3 个答案:

答案 0 :(得分:6)

outb()将第二个参数指定的字节写入其第一个参数指定的I / O端口。在这种情况下,一个"端口" CPU是与另一个芯片通信的一种手段。

您提供的特定C代码与8259A可编程中断控制器(PIC)有关。

您可以阅读有关PIC herehere的信息。

如果没有提供足够的细节来理解命令和位掩码,你可以随时参考芯片的datasheet

答案 1 :(得分:1)

设备特定代码最好与相应的数据表一起阅读。例如,“8259A可编程中断控制器”数据表(http://pdos.csail.mit.edu/6.828/2005/readings/hardware/8259A.pdf)清楚地(但简明扼要地)解释了几乎所有内容。

然而,该数据表仅解释了芯片如何使用(在任何系统中),并且不会解释芯片如何在特定系统中使用(例如在“PC兼容”80x86系统中)。为此,您需要依赖“隐含的事实标准”(因为PIC芯片的许多功能不用于“PC兼容”80x86系统,现代/集成芯片组可能不支持)。

通常(由于历史原因)PIC芯片的IRQ以奇怪/坏的方式映射到中断。例如,IRQ 0映射到中断8并与CPU的双故障异常冲突。您发布的特定代码重新映射PIC芯片,以便IRQ0映射到中断0x20(和IRQ1到中断0x21,...,IRQ 15映射到IRQ 0x2F)。操作系统通常会采取一些措施来避免冲突(例如,每个中断都用于IRQ或异常,而不是两者都有。)

要了解“outb()”,请查看英特尔手册中的“OUT”指令。这就像有2个地址空间 - 一个用于普通物理地址,一个用于IO端口,其中正常指令(间接)访问正常物理内存;和IO端口指令(IN,OUT,INSB / W / D,OUTSB / W / D)访问单独的“IO地址空间”。

答案 2 :(得分:1)

传统的8088/86具有/具有存储器控制信号,该信号本质上是另一个与指令直接相关的地址位。控制信号将访问分为I / O和Memory,创建两个独立的地址空间。与CS,DS等不同,在芯片内部创建单独的存储空间(在击中外部存储器空间之前)。其他处理器系列使用所谓的内存映射I / O.

现在,存储器控制器/系统以各种不同方式在芯片内外被切断,有时例如有许多控制信号指示指令与数据,高速缓存行填充,写入和写回等。在外部电路上,内存映射发生在芯片内部,例如专用的rom接口,与ram等分开,位于边缘,远比I / O空间与旧8088/86的内存空间复杂和分离。

out和in指令以及一些家庭成员会改变您是在进行I / O访问还是内存访问,并且传统上中断控制器是一个解码内存总线​​的芯片,寻找分配了地址的I / O访问对于那个设备。几十年后的反向兼容性,你有你正在看的现有代码。

如果你真的想了解它,你需要找到包含中断控制器的设备的数据表,可能与大支持芯片上的一堆其他逻辑相结合。其他数据表也可能是必需的。