标签: c interrupt
我正在研究单片内核,并试图实现对CMOS时钟的支持。在阅读了这个主题之后,我遇到了这行代码:
outb (0x70, (NMI_disable_bit << 7) | (selected CMOS register number));
除了NMI_disable_bit部分之外,我大部分时间都在理解发生了什么。这个片段的含义是什么?有人可以向我解释一下吗?
NMI_disable_bit
答案 0 :(得分:6)
端口0x70的第7位,当设置为1时,使用RTC RAM索引寄存器来禁用NMIs的所有源。
NMI是一个无法被 IF 屏蔽的中断 - R / E / FLAGS寄存器中的中断标志(例如,使用cli指令),因此需要硬件辅助禁用它。 端口0x70的第7位被否定,并与所有NMI源(或等效设计)进行AND运算。
cli
请注意,自Pentium Pro以来,NMI引脚已被 LINT1 引脚替换。 当LAPIC被禁用时,LINT1引脚恢复为NMI引脚,但如果启用了LAPIC,则术语NMI是本地中断1 的同义词,软件可以对每个进行编程> LINT0 / 1 引脚触发各种事件(包括但不限于NMI)。