12.2. 嵌入式控制器寄存器描述
嵌入式控制器在两个地址位置包含两个寄存器:EC_SC 和 EC_DATA。EC_SC,即嵌入式控制器状态/命令寄存器,充当两个寄存器:对该端口执行读取时是状态寄存器,对该端口执行写入时是命令寄存器。EC_DATA(嵌入式控制器数据寄存器)充当主机 CPU 与嵌入式控制器之间传输数据的端口。
12.2.1. 嵌入式控制器状态,EC_SC (R)
这是一个只读寄存器,用于指示嵌入式控制器接口的当前状态。
表 12.1 只读寄存器表
| Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
|---|---|---|---|---|---|---|---|
| IGN | SMI_EVT | SCI_EVT | BURST | CMD | IGN | IBF | OBF |
其中:
| IGN | 忽略 |
|---|---|
| SMI_EVT: | 1 - 表示 SMI 事件正在挂起(请求 SMI 查询)。 |
| 0 - 没有 SMI 事件挂起。 | |
| SCI_EVT: | 1 - 表示 SCI 事件正在挂起(请求 SCI 查询)。 |
| 0 - 没有 SCI 事件挂起。 | |
| BURST: | 1 - 控制器处于突发模式,用于轮询命令处理。 |
| 0 - 控制器处于正常模式,用于中断驱动命令处理。 | |
| CMD: | 1 - 数据寄存器中的字节是命令字节(仅由控制器使用)。 |
| 0 - 数据寄存器中的字节是数据字节(仅由控制器使用)。 | |
| IBF: | 1 - 输入缓冲区已满(数据已为嵌入式控制器准备好)。 |
| 0 - 输入缓冲区为空。 | |
| OBF: | 1 - 输出缓冲区已满(数据已为主机准备好)。 |
| 0 - 输出缓冲区为空。 |
当嵌入式控制器已将一个数据字节写入命令端口或数据端口,但主机尚未读取它时,输出缓冲区满(OBF)标志会被置位。主机读取状态字节并看到 OBF 标志已置位后,主机会读取数据端口,以获取嵌入式控制器写入的数据字节。主机读取该数据字节后,OBF 标志会由硬件自动清零。这会向嵌入式控制器发出信号,表明该数据已被主机读取,嵌入式控制器可以自由地向主机写入更多数据。
输入缓冲区满(IBF)标志在主机已向命令端口或数据端口写入一个字节的数据、但嵌入式控制器尚未读取该数据时被置位。在嵌入式控制器读取状态字节并看到 IBF 标志被置位后,嵌入式控制器会读取数据端口以获取主机已写入的数据字节。在嵌入式控制器读取该数据字节后,IBF 标志由硬件自动清除。这是向主机发出的信号,表示该数据已被嵌入式控制器读取,主机可以自由地向嵌入式控制器写入更多数据。
SCI 事件(SCI_EVT)标志在嵌入式控制器检测到需要操作系统关注的内部事件时被置位。嵌入式控制器在状态寄存器中设置该位,并向 OSPM 生成一个 SCI。OSPM 需要该位来区分命令完成 SCI 与通知 SCI。OSPM 使用查询命令来请求 SCI_EVT 的原因并采取相应操作。更多信息,请参见嵌入式控制器命令集。
SMI 事件(SMI_EVT)标志在嵌入式控制器检测到需要系统管理中断处理程序关注的内部事件时被置位。嵌入式控制器在生成 SMI 之前在状态寄存器中设置该位。
突发(BURST)标志表示嵌入式控制器已从主机接收到突发使能命令,已暂停正常处理,并正在等待主机发送一系列命令。这使 OSPM 或系统管理处理程序能够快速地一次读取和写入多个字节的数据,而无需承担命令之间 SCI 的额外开销。
12.2.2. 嵌入式控制器命令,EC_SC (W)
这是一个只写寄存器,允许向嵌入式控制器发出命令。对该端口的写入会锁存到输入数据寄存器中,并在状态寄存器中置位输入缓冲区满标志。对该位置的写入还会导致状态寄存器中的命令位被置位。这使嵌入式控制器能够区分命令序列的开始与数据字节写操作。
12.2.3. 嵌入式控制器数据,EC_DATA (R/W)
这是一个读/写寄存器,允许向嵌入式控制器发出附加命令字节,并允许 OSPM 读取由嵌入式控制器返回的数据。主机对该端口的写入会锁存到输入数据寄存器中,并在状态寄存器中置位输入缓冲区满标志。从该寄存器读取会返回来自输出数据寄存器的数据,并清除状态寄存器中的输出缓冲区满标志。