ACPI里的EC(终篇)

546 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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.
}

三、完结

本文完结,撒花结束。