PSC

OMAP-L138学习笔记之PSC(Power and Sleep Controller)


   PSC是Power and Sleep Controller的英文简写,顾名思义就是专门用于管理芯片供电的控制器,主要负责片上各个模块的供电开关,时钟使能和各模块的复位。


   138上总共有两个PSC模块:PSC0和PSC1。而每个PSC是由一个GPSC(Global PSC)和多个LPSC(Local PSC)构成的。LPSC是为每个模块提供时钟和复位控制的(我们可以通过编写程序来实现这些控制)。但并不是每个模块都拥有LPSC,这取决于当关闭该模块时是否能够显著地节约功耗。其中PSC0拥有16个LPSC,PSC1拥有32个LPSC,通常,一个LPSC对应管理一个模块,但是也有并未使用的LPSC(具体请参见SPRUGM7D即OMAP-L138 Applications Processor System Reference Guide文档第9章)。


   每个PSC模块都拥有两个功率域(power domain):PD0(Always ON)和PD1。一个功率域的状态只能是ON或OFF态中的一个,ON和OFF均是指通向该功率域的电源情况。PD0又称Always ON,即该域的电源将一直处于ON态。而PD1原则上是可以在ON和OFF态之间切换的,但现在还不能通过编程将PD1切换至OFF态。所以最好不要去改变关于PD1状态切换的PDCTL1.NEXT位和PDCTL1.PDMODE位的值,让其保持默认值就可以了。


   PSC定义了各模块可能处于的状态:Enable,Disable,SyncReset,SwRstDisable,Auto Wake和Auto Sleep共6种。其中就目前而言任何模块都无法配置成后面两种状态(所以暂时完全可以忽略它们)。当模块处于Disable或SwRstDisable状态时,模块的时钟被关闭/禁用,任何一个外部事件和I/O请求都无法重新使能时钟。要想该模块能对外部请求做出反应,必须将该模块重新配置成Enable状态。


      


以上是几个主要状态的描述。一般情况下,都不指望用软件达到SyncReset或SwRstDisable状态。
   以下是各个模块的状态切换的步骤:






01void EVMOMAPL138_lpscTransition(psc_regs_t *psc, uint32_t in_domain, uint8_t in_module, uint8_t in_next_state)
02{
03   // spin until existing transitions are done.
04   while (CHKBIT(psc->PTSTAT, in_domain)) {}
05
06   // if we are already in the requested state...just return.
07   if (CHKBIT(psc->MDSTAT[in_module], MASK_STATE) == in_next_state)
08   {
09      return;
10   }
11
12   // setup the transition...clear the bits before setting the next state.
13   CLRBIT(psc->MDCTL[in_module], NEXT);
14   SETBIT(psc->MDCTL[in_module], in_next_state);
15
16   // kick off the transition.
17   SETBIT(psc->PTCMD, in_domain);
18
19   // spin until transition is done.
20   while (CHKBIT(psc->PTSTAT, in_domain)) {}
21
22   while (CHKBIT(psc->MDSTAT[in_module], MASK_STATE) != in_next_state) {}
23}
   以上便是138BSL中用于各模块状态切换的子函数。函数中各个参数的含义:psc_regs_t *psc即是使用PSC0,还是PSC1管理的模块;uint32_t in_domain 指明该模块处于的功率域是PD0,还是PD1。uint8_t in_module 指明是对PSC0或PSC1中的模块号为in_module的模块的状态进行切换。uint8_t in_next_state 指明模块处于的下一个状态,可以为Enable,Disable,SyncReset和SwRstDisable状态。


转载出处:http://hi.baidu.com/%D4%C6%D6%D0%F3%EF614/blog/item/8c6895c6f070cf44b319a8d3.html谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值