TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 PSC配置与power down

如题,使用C6678过程中由于功耗太大,想通过配置PSC来降低功耗,但遇到一个问题,能通过PSC配置开启模块但不能关闭。

我使用的是TMDSEVM6678LE开发板,默认上电后PCIE是开启的,SRIO和HYPERLINK是关闭的,我想通过软件将这三部分都关闭,但是不行,于是我测试了一下开启,我发现SRIO和HYPERLINK可以开启,但开启后无法关闭。也许是我的程序有问题,希望能有人解答。以下是我的程序。

开启:

/*开启外设*/
void enableperipherals()
{/* Set SRIO Power domain to ON */CSL_PSC_enablePowerDomain (CSL_PSC_PD_SRIO);/* Enable the clocks too for SRIO */CSL_PSC_setModuleNextState (CSL_PSC_LPSC_SRIO, PSC_MODSTATE_ENABLE);/* Start the state transition */CSL_PSC_startStateTransition (CSL_PSC_PD_SRIO);/* Wait until the state transition process is completed. */while (!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_SRIO));/* Return SRIO PSC status */if ((CSL_PSC_getPowerDomainState(CSL_PSC_PD_SRIO) == PSC_PDSTATE_ON) &&(CSL_PSC_getModuleState (CSL_PSC_LPSC_SRIO) == PSC_MODSTATE_ENABLE))printf("SRIO is enabled!\n");/* Set SRIO Power domain to ON */CSL_PSC_enablePowerDomain (CSL_PSC_PD_HYPERBRIDGE);/* Enable the clocks too for SRIO */CSL_PSC_setModuleNextState (CSL_PSC_LPSC_HYPERBRIDGE, PSC_MODSTATE_ENABLE);/* Start the state transition */CSL_PSC_startStateTransition (CSL_PSC_PD_HYPERBRIDGE);/* Wait until the state transition process is completed. */while (!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_HYPERBRIDGE));/* Return SRIO PSC status */if ((CSL_PSC_getPowerDomainState(CSL_PSC_PD_HYPERBRIDGE) == PSC_PDSTATE_ON) &&(CSL_PSC_getModuleState (CSL_PSC_LPSC_HYPERBRIDGE) == PSC_MODSTATE_ENABLE))printf("HYPERLInK is enabled!\n");
}

关闭:

/*关闭外设*/
void disableperipherals()
{/* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_PCIEX));//pcie/* Disable the clocks too for PCIE *//* Module is in Reset state. Clock is off. */CSL_PSC_setModuleNextState (CSL_PSC_LPSC_PCIEX, PSC_MODSTATE_SWRSTDISABLE);/* Set PCIE Power domain to OFF */CSL_PSC_disablePowerDomain (CSL_PSC_PD_PCIEX);/* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_PCIEX));if(CSL_PSC_getPowerDomainState (CSL_PSC_PD_PCIEX) == PSC_PDSTATE_OFF)printf("PCIE POWER DOMAIN is disabled!\n");if(CSL_PSC_getModuleState (CSL_PSC_LPSC_PCIEX) == PSC_MODSTATE_SWRSTDISABLE)/*if((CSL_PSC_getPowerDomainState (CSL_PSC_PD_PCIEX) == PSC_PDSTATE_OFF) &&(CSL_PSC_getModuleState (CSL_PSC_LPSC_PCIEX) == PSC_MODSTATE_SWRSTDISABLE))*/printf("PCIE module is disabled!\n");/**************************************************************************************//* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_SRIO));//SRIO/* Disable the clocks too for SRIO *//* Module is in Reset state. Clock is off. */CSL_PSC_setModuleNextState (CSL_PSC_LPSC_SRIO, PSC_MODSTATE_SWRSTDISABLE);/* Set PCIE Power domain to OFF */CSL_PSC_disablePowerDomain (CSL_PSC_PD_SRIO);/* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_SRIO));if((CSL_PSC_getPowerDomainState (CSL_PSC_PD_SRIO) == PSC_PDSTATE_OFF) &&(CSL_PSC_getModuleState (CSL_PSC_LPSC_SRIO) == PSC_MODSTATE_SWRSTDISABLE))printf("SRIO module is disabled!\n");/**************************************************************************************//* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_HYPERBRIDGE));//HYPERLINK/* Disable the clocks too for HYPERLINK *//* Module is in Reset state. Clock is off. */CSL_PSC_setModuleNextState (CSL_PSC_LPSC_HYPERBRIDGE, PSC_MODSTATE_SWRSTDISABLE);/* Set PCIE Power domain to OFF */CSL_PSC_disablePowerDomain (CSL_PSC_PD_HYPERBRIDGE);/* Wait until the state transition process is completed. */while(!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_HYPERBRIDGE));if((CSL_PSC_getPowerDomainState (CSL_PSC_PD_HYPERBRIDGE) == PSC_PDSTATE_OFF) &&(CSL_PSC_getModuleState (CSL_PSC_LPSC_HYPERBRIDGE) == PSC_MODSTATE_SWRSTDISABLE))printf("HYPERLINK module is disabled!\n");/**************************************************************************************/
}

Shine:

请看一下PDSTAT,MDSTAT状态寄存器是否处于OFF状态。

zy979228369:

回复 Shine:

我查看过寄存器,上电连接好仿真器后srio与hyperlink处于关闭状态,可以通过我上面的程序开启,但无法关闭,pcie也是。如果官方有例程的话希望能提供一下,谢谢。

zy979228369:

回复 Shine:

我通过配置寄存器关闭了那些模块了,但我还是想知道怎样通过csl库来关闭,毕竟配置寄存器很麻烦。另外我想问一下,关于核心休眠的事情,比如我只使用core0,其他七个核心不用,当DSP上电后,其他七个核心会自动进入idle状态,不需要人为设置对吗?还有关于核心休眠降低功耗是通过PDCCMD寄存器中第16位置一,同时执行asm(" idle")就可以了吗?我看到pcs寄存器中有各核心的power domain配置,这些需要配置吗?

zy979228369:

回复 Shine:

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » C6678 PSC配置与power down
分享到: 更多 (0)