如何在我的操作系统内核中启用IRQ8?

时间:2011-08-30 13:12:31

标签: c++ operating-system kernel

我想知道,如何在我用C ++编写的内核中启用IRQ8(RTC)。 我已经有了安装中断处理程序的模块。 但在安装IRQ8中断处理程序后,它不会产生任何中断。 那么如何启用IRQ8?启用它后会产生什么中断? 我知道RTC会产生INT 70h中断,但我正在安装RTC中断处理程序 在IDT的29h。所以它不起作用。

请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:4)

我假设您正在使用基于x86的架构,如果是这样,那么您还可以使用8259A可编程中断控制器。如果是这种情况,则IRQ8位于第二从PIC上,该PIC通常通过主PIC上的IRQ2连线。您基本上必须在主PIC上编程IRQ2以接收来自从PIC的级联INT信号。接下来,您将必须取消屏蔽第二个从PIC上的任何屏蔽中断,在这种情况下,它将是IRQ8,其中RTC中断通常是有线的。

用于控制这两个PIC的端口可以在主PIC的0x0200x21以及从PIC的0xA00xA1找到。有四种不同的ICW或初始化命令字可用于编程这两个PIC。为了设置级联,您需要将ICW1发送到端口0x20的主PIC,并将第二位设置为1,以告知PIC它处于级联模式。然后,您需要将ICW3值0x02写入端口0x21,以告知主PIC它将从从PIC接收第二个引脚上的从INT信号。最后,您需要在0xA00xA1将适当的ICW编程到第二个从PIC,以便在IRQ8上取消屏蔽和启用RTC(即从属PIC' s)第一个中断引脚)。您也可以在此时对从PIC进行编程,以便在中断处理程序所在的IDT中请求相应的中断值偏移量。

关于如何正确地向每个PIC&#39发送ICW(初始化命令字)以及OCW(操作命令字),有相当多的文档。 ; s在各自的港口。很多这些命令都是顺序的,这意味着您需要按照特定的顺序执行几个步骤,因为有4个ICW和3个OCW,但是您只将它们写入两个8-每个PIC的位端口。有关每种类型的位掩码的快速参考,您可以参考http://stanislavs.org/helppc/8259.html,但如果您不熟悉编程端口等,我建议您也查找一些其他文档。例如,编程端口需要一些组装...如果你愿意,你可以制作一些包装器,但是你需要x86 INOUT汇编命令,以及对特定寄存器的控制,例如AX,{{ 1}}和AL读取和写入端口。

最后,如果以上都不起作用,可能需要实际解析英特尔MP表,以便弄清楚您的平台是如何连接的......