我很难理解中断的工作方式。
下面的代码初始化可编程中断 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的here和here的信息。
如果那不能提供足够的细节来理解命令和位掩码,则可以始终引用芯片的datasheet。