我很难理解中断的工作方式。

下面的代码初始化可编程中断 Controller

  #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 man)

-地址及其含义

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

谢谢。

最佳答案

outb()将第二个参数指定的字节写入第一个参数指定的I/O端口。在这种情况下,“端口”是CPU与另一芯片进行通信的一种方式。

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

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

如果那不能提供足够的细节来理解命令和位掩码,则可以始终引用芯片的datasheet

09-27 05:21