筆記:Into Idle
在設定完chip register,進入idle mode後,還要program co-processor:
這一篇 http://nocash.emubase.de/gbatek.htm 有說明到ARM CP15 Cache Control。
另外在linux kernel code中也有:Cn,Cm,Op2 Rd Command
C7,C0,4 0 Wait For Interrupt (Halt)
ref SystemIdle Function:/*
* cpu_arm926_do_idle()
*/
.align 5
ENTRY(cpu_arm926_do_idle)
#if defined(CONFIG_CPU_ARM926_CPU_IDLE)
mcr p15, 0, r0, c7, c0, 4 @ Wait for interrupt
#endif
mov pc, lr
MMU_WaitInterrupt(void)
所以,這是要cache 進入idle mode,等待interrupt 的意思 ?mov r0,#0x0
mcr p15,0,r0,c7,c0,4
mov pc,lr
S3C2412有三種Power mode:
- IDLE
- STOP
- SLEEP
說是這樣說,但是Samsung的BSP code卻沒有這樣作,完全沒用PWRMODECON,反而是用 PWRCFG。其中的STANDBYWFI 佔2 bit,設定後,可以進入:
- IDLE : 01b
- STOP : 10b
- SLEEP : 11b
datasheet 中「很好心」地為大家提供一個 "alternat method to set STANDBYWFI" :就是用剛剛的cp15 command:
但是沒有說明相當於command的哪一個信號? 01b, 10b, 11b ?mcr p15,0,r0,c7,c0,4
對照datasheet和BSP code:STANDBYWFI 進入IDLE是 01b。
BSP code用 mcr cp15 command 進入時,Rd (在此用r0),卻是設定成 #0x0。
而且這是datasheet中有關"進入STOP Mode"的說明中寫的,BSP code卻是在進入idle mode 的code中使用的。
接著有一個table,說明進入三個mode的方法:- IDLE - STANDBYWFI
- STOP - CMD or STANDBYWFI
- SLEEP - CMD or STANDBYWFI
沒有留言:
張貼留言