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

Ami*_*sef 5 c io assembly 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);
Run Code Online (Sandbox Code Playgroud)

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

- outb的作用(我不懂linux的人)

- 地址及其含义

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

谢谢.

NPE*_*NPE 6

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

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

您可以在这里这里阅读有关PIC的信息.

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