Idle 時, 只有 ARM Core 停下來 (Enter Wait for Interrupt mode[MCR p15,0,,c7,c0,4]), 所有的 peripheral 全部還在繼續 work 的.
大部份的 peripheral 是根據 PCLK 來工作的, 舉個例子, Serial TX FIFO 有 10 bytes 準備送出去, shift register 正送到第 2 bits, 但是 scheduler 發現沒有 thread 需要被 service, 所以進入 OEMIdle, 若此時你亂改 PCLK, 則 serial baudrate 會被影響, 那你 serial 正在送出去跟 FIFO 還沒送出去的資料, 都會被以不正確的 baudrate 送出, 那你的系統應該會不正常吧, 當然, 若是從 UCLK 供的就沒影響.
因為 2440 設計時, PCLK & HCLK 是從 FCLK 除頻而來, 故 FCLK 應該不能亂改.
HCLK 應是給 AHB 上用的, 故 DMA, LCDC, SDRAM Controller 等都會用到, 所以降頻時 LCDC 應會閃爍吧.
若你真要降頻省電, 建議將 peripheral 全改成由 UCLK 供電, 不過原來 BSP 所設定 PCLK 的頻率, 不知可不可以用 UCLK 做出來.
降頻省電跟 CPU 一開始的設計就有關係, 不是每個 CPU 都可以這樣幹的.
至於 Sleep mode, 不見得一定要關電源, 能將 PLL 關掉就可以省些電了, 當然能將電源關掉就更錦上添花了.
Paul, Chao @ Techware
|