6. LVT寄存器-本地中断源
1. 7个LVT寄存器
LVT(Local Vector Table)寄存器是local APIC本地中断源产生者,在新的处理器上local APIC支持最多7个LVT寄存器,分别如下。
① LVT CMCI寄存器:地址偏移量在2F0H。
② LVT Timer寄存器:地址偏移量在320H。
③ LVT Thermal Monitor寄存器:地址偏移量在330H。
④ LVT Performance Counter寄存器:地址偏移量在340H。
⑤ LVT LINT0寄存器:地址偏移量在350H。
⑥ LVT LINT1寄存器:地址偏移量在360H。
⑦ LVT Error寄存器:地址偏移量在370H。
2. 寄存器子域
软件对这些寄存器进行编程设置,可以接收和产生local interrupt源。每个寄存器由若干部分组成,并不是每个寄存器的子域都相同。
如上所示,这些子域如下。
2.1. vector: 向量号
① vector(bit7~bit0):由软件设置local interrupt的中断vector,和一般的中断处理一样,这个vector值被用于在IDT中查找interrupt描述符。
2.2. delivery mode: 交付模式
② delivery mode(bit10~bit8):这个3位值提供5个delivery mode(交付模式),即Fixed模式(000B)、SMI模式(010B)、NMI模式(100B)、ExtINT模式(111B),以及INIT模式(101B),其他的组合值是保留的。
2.3. delivery status: 交付状态
③ delivery status(bit12):这个位指示中断在delivery时的状态,
- 0为idle(空闲)状态,当前没有中断在交付中,或者中断已经交付给processor进行处理;
- 1为pending(悬挂)状态,当前的中断已经delivery,但processor未进行处理。
只有将delivery status恢复idle(空闲)状态才能允许接受下一次中断(!!!)。
2.4. interrupt input pin polarity
④ interrupt input pin polarity(bit 13):这个位只用于LVT LINT0和LVT LINT1寄存器(对应于LINT0和LINT1接口),它们分别对应于处理器的INTR和NMI pin。
这个位设置这两个pin的level触发模式(水平触发!!!):为0时为high-level,为1时为low-level。
2.5. remote IRR flag:
⑤ remote IRR flag(bit14):这个位只用于LVT LINT0和LVT LINT1寄存器,使用在delivery模式为Fixed,level触发模式中。为1时,local APIC已经接收并处理由INTR和NMI交付的中断;为0时,接收到EOI命令。
2.6. tirgger mode: 触发模式
⑥ trigger mode(bit15):仅用于LVT LINT0和LVT LINT1寄存器,设置它们的触发模式。
- 0为edge触发,
- 1为level触发。
2.7. mask: 屏蔽位
⑦ mask(bit16):设置local interrupt的屏蔽位,为1时设置为屏蔽中断的响应。
2.8. timer mode: timer计数模式
⑧ timer mode(bit18~bit17):仅使用于LVT Timer寄存器,设置Timer count计数模式。
- 00:one-shot(一次性计数);
- 01:periodic周期计数;
- 10:TSC-deadline(指定TSC值计数)。