持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
简介
上一文在EC里的相关命令集中提到了BE_EC突发模式启用寄存器,还有BD_EC突发模式禁用寄存器中,提到了一个Burst模式,那么怎么让EC进入或者退出这个Burst模式呢?具体应该怎么操作呢?
一、突发模式
启用步骤
突发模式是以下列方式进入的: OSPM驱动写入Burst Enable Embedded Controller, BE_EC (0x82) 命令字节,然后EC将准备进入突发模式。这包括处理任何常规活动,这样它应该能够保持对OSPM接口的专用性约1微秒。
EC设置嵌入式控制器状态寄存器的Burst位,将Burst Acknowledge字节(0x90)放入SCI输出缓冲器,设置OBF位,并产生一个SCI到SCI。Burst Acknowledge字节(0x90)放入SCI输出缓冲器,设置OBF位,并产生一个SCI信号,告诉OSPM它处于Burst模式。
退出步骤
突发模式的退出方式如下:
OSPM驱动写入Burst Disable Embedded Controller, BD_EC (0x83)命令字节,然后EC将退出Burst模式。之后,EC将通过清除嵌入式控制器状态寄存器中的Burst位来退出Burst模式。然后,EC将通过清除嵌入式控制器状态寄存器中的Burst位并产生一个SCI信号(由于IBF=0)来退出Burst模式。 EC清除嵌入式控制器状态寄存器中的Burst位。
二、示例
BYTE CheckBurstMode(void) // Burst mode or normal mode
{
while(IS_MASK_CLEAR(STS,P_IBF)) // wait input buffer full
{
if(TF1) // time-out
{
TR1 = 0;
TF1=0;
CLEAR_MASK(STS,BURST);
ACPI_Gen_Int(ACPICmdSCI);
ECCheckBurstMode = 0;
return(0);
}
}
return(1);
}
void ACPI_Cmd_82(void) // Burst Enable Embedded Controller.
{
SET_MASK(STS,BURST); // STS.4 Set Burst mode flag
SendFromAcpi(0x90); // Get Burst Acknowledge byte to send to Host.
}
void ACPI_Cmd_83(void) // Burst Disable Embedded Controller.
{
CLEAR_MASK(STS,BURST); // STS.4 Set Burst mode flag
ACPI_Gen_Int(ACPICmdSCI); // Clear Burst bit in secondary Host interface status register.
}
三、完结
本文完结,撒花结束。