在谈论iMX27上的低功耗模式时,参考手册不一致。我想有两个函数:doze()和sleep()配置CPU和时钟以正确进入这些低功耗模式,但手册中的示例似乎不起作用。我查看了Linux内核代码,这是一些帮助,但我想我会在这里询问是否有人已经为这些函数提供了任何代码(arm assembly是最好的)。
DOZE : 打盹模式定义为ARM9执行等待中断指令的时间,之后关闭MCU的缓冲时钟供给。 将系统设置为打盹模式的操作顺序如下:
SLEEP :
休眠模式定义为禁用所有DPLL时钟输出。在系统关闭MPLL和SPLL之前,必须满足一系列操作和标准。当CSCR寄存器中的MPEN位清零时,将启动休眠模式序列,禁用MPLL。此操作还会自动关闭SPLL。 将系统置于休眠模式的顺序如下:
由于
答案 0 :(得分:1)
进入Doze模式真的没什么用(在C环绕这个代码用asm();):
" MCR p15, 0, r1, c7, c0, 4 \n"
会为你做的伎俩。您需要先设置所有必需的中断。
对于睡眠模式,这里有一些程序集
" MOV R0,#+268435456 \n"
" ORR R0,R0,#0x27000 \n"
" LDR r1, [r0, #0x0] \n"
" ORR r1, r1, #0x01000000 \n"
" STR r1, [r0, #0x0] \n"
" BIC r1, r1, #0x00000001 \n"
" STR r1, [r0, #0x0] \n"
" MCR p15, 0, r1, c7, c0, 4 \n"
其中#+ 268435456是CSCR寄存器的地址。此代码将SD_CNT设置为1,禁用MPLL,然后进入WFI。同样,您需要先配置中断,并禁用所有外设。