我想知道,如何在我用C ++编写的内核中启用IRQ8(RTC)。 我已经有了安装中断处理程序的模块。 但在安装IRQ8中断处理程序后,它不会产生任何中断。 那么如何启用IRQ8?启用它后会产生什么中断? 我知道RTC会产生INT 70h中断,但我正在安装RTC中断处理程序 在IDT的29h。所以它不起作用。
请帮忙。
谢谢。
答案 0 :(得分:4)
我假设您正在使用基于x86的架构,如果是这样,那么您还可以使用8259A可编程中断控制器。如果是这种情况,则IRQ8位于第二从PIC上,该PIC通常通过主PIC上的IRQ2连线。您基本上必须在主PIC上编程IRQ2以接收来自从PIC的级联INT信号。接下来,您将必须取消屏蔽第二个从PIC上的任何屏蔽中断,在这种情况下,它将是IRQ8,其中RTC中断通常是有线的。
用于控制这两个PIC的端口可以在主PIC的0x020
和0x21
以及从PIC的0xA0
和0xA1
找到。有四种不同的ICW
或初始化命令字可用于编程这两个PIC。为了设置级联,您需要将ICW1发送到端口0x20
的主PIC,并将第二位设置为1
,以告知PIC它处于级联模式。然后,您需要将ICW3值0x02
写入端口0x21
,以告知主PIC它将从从PIC接收第二个引脚上的从INT信号。最后,您需要在0xA0
和0xA1
将适当的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 IN
和OUT
汇编命令,以及对特定寄存器的控制,例如AX
,{{ 1}}和AL
读取和写入端口。
最后,如果以上都不起作用,可能需要实际解析英特尔MP表,以便弄清楚您的平台是如何连接的......