如何select CMOS寄存器?
How to select CMOS register?
我正在开发单片内核并尝试实现对 CMOS 时钟的支持。阅读主题后,我遇到了这行代码:
outb (0x70, (NMI_disable_bit << 7) | (selected CMOS register number));
除了 NMI_disable_bit
部分,我基本上明白发生了什么。这在这段代码中意味着什么?有人可以给我解释一下吗?
端口 0x70 的第 7 位,RTC RAM 索引寄存器用于设置为 1 时,禁用 NMIs 的所有源。
NMI 是一个无法被 IF 屏蔽的中断 - R/E/FLAGS 寄存器中的中断标志(例如使用 cli
指令)所以需要硬件协助才能禁用它。
端口 0x70 的位 7 取反并与所有 NMI 源(或等效设计)进行与运算。
请注意,自 Pentium Pro 以来,NMI 引脚已被 LINT1 引脚取代。
当 LAPIC 被禁用时,LINT1 引脚恢复为 NMI 引脚,但如果 LAPIC 被启用,则术语 NMI 是 本地中断 1 的同义词,软件可以编程每个 LINT0/1 引脚触发各种事件(包括但不限于 NMI)。
我正在开发单片内核并尝试实现对 CMOS 时钟的支持。阅读主题后,我遇到了这行代码:
outb (0x70, (NMI_disable_bit << 7) | (selected CMOS register number));
除了 NMI_disable_bit
部分,我基本上明白发生了什么。这在这段代码中意味着什么?有人可以给我解释一下吗?
端口 0x70 的第 7 位,RTC RAM 索引寄存器用于设置为 1 时,禁用 NMIs 的所有源。
NMI 是一个无法被 IF 屏蔽的中断 - R/E/FLAGS 寄存器中的中断标志(例如使用 cli
指令)所以需要硬件协助才能禁用它。
端口 0x70 的位 7 取反并与所有 NMI 源(或等效设计)进行与运算。
请注意,自 Pentium Pro 以来,NMI 引脚已被 LINT1 引脚取代。
当 LAPIC 被禁用时,LINT1 引脚恢复为 NMI 引脚,但如果 LAPIC 被启用,则术语 NMI 是 本地中断 1 的同义词,软件可以编程每个 LINT0/1 引脚触发各种事件(包括但不限于 NMI)。