I am programming a PSoC5LP on a CY8CKIT-050 and tries to put the device into hibernate mode. But the device will not hibernate. I have read
- AN77900 - PSoC3 and PSoC5LP Low-power Modes and Power Reduction Techniques
- PSoC5LP Architecture TRM
- cy_boot Component v3.30 - System Reference Guide
My functions are:
void hibernate_begin()
{
// configure clocking to support energy mode
CyPmSaveClocks();
// clear pending interrupts
for (uint8_t i = 0; i != 32; ++i)
{
CyIntClearPending( i );
}
// hibernate
CyPmHibernate();
}
void hibernate_end()
{
CyPmRestoreClocks();
// wait 20 us in order to prevent a new call to 'hibernate_begin' too early
CyDelayUs( 20 );
}
A call to hibernate_begin causes the device to run slower, but continues execution. A call to hibernate_end after this, lets the device run at normal speed again. The device will not go into hibernate mode at all - what is the problem? I don't think there is a PICU interrupt either, since my ISR's are not called. Please tell if you need more info about Clocks, System, Components, etc.
I clear all 32 interrupts, since I was told to clear pending interrupts, but should this instead be interrupts [4-12], more specific?
And why are the API functions so complicated? There should only be need for one function, lets call this CyHibernate, which does everything for us (save state, hibernate, restore state on resume).
|