GP32 Underclocking! (non-devs Welcome)


Blah

Wanna Be Programmer
Joined
Dec 18, 2003
Messages
3,253
Age
34
Location
Oregon, USA
Website
Visit site
Well, from my testing...Prepare for this...













I was able to clock all the way down to 0.535311mhz! Think how long the batteries
would last. And its actually still pretty useful at that clock rate. Simple PDA style apps would work fine. Also could work as a sleep mode in programs, etc. Clock it just a little higher and mods play, too.

So umm...Heres the specifics.

I just used this command in C (Mirko's SDK):

_cpu_speed(535311,0x14003,0) // CPU, bus and peripherials at same speed

or

_cpu_speed(535311,0x14003,1) // Peripherals at half speed of bus and CPU

both work...

:ph34r:

edit: Not sure if the CLKDIV value is correct (probably not, just used the one from 22mhz as pllset won't calculate for values this low) but it works just fine.
 
Not sure, but some PDA style apps might need more grunt to redraw the screen. I'm sure just sitting there waiting for button input for text entry or whatever it would be fine, but I think it'd struggle trying to update the screen :)

On a side note - how does the gp32 handle rapid swapping of the clock speeds? For example, increase it for screen blitting, then put it back down while it waits until the next update? This would happen probably at about 15fps I would say for a PDA style app, and upwards of 30fps if you wanted really smooth movement (which is more likely). EDIT: Screen update would only happen if something changes though (e.g. mouse moves)

Does this have any negative effect? e.g. Process of swapping might in itself cause an occasional reset, or perhaps it drains the power quickly?
 
The only thing you have to be careful of, is that if you change the PMS value to change the frequency, it can cause a LCD problem because of the CLKVAL register in the LCD control registers.

However, if your interested in power management, rather than constantly changing the clock speed, how about stopping the processor clock all together? If you put it in IDLE mode, the clock to CPU core is stopped except bus controller, memory controller, interrupt controller, and power management block. You can exit idle mode via an interrupt, so you could use a timer to wake up after X milliseconds for example.

If you still want to do some things in the background, have a look at SLOW mode.
 
Back
Top