【发布时间】:2012-02-16 03:39:30
【问题描述】:
我很难理解中断是如何工作的。
下面的代码初始化可编程中断控制器
#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 进行输入/输出通信吗?
谢谢。
【问题讨论】:
-
对于由内存映射 IO 控制的硬件(PIC 不是)你当然可以做内存映射 IO。
-
8086 继承了其前身 8080 和 8085 的这些指令,其中单独的 I/O 空间非常有用,以免浪费任何 64k 内存地址空间。
标签: c assembly io interrupt hardware-port