Content originally posted in LPCWare by KaareBK on Fri Mar 18 08:10:06 MST 2016
Hi
I have a simple application where I want to:
- Take an analogue sample.
- Go to deep Sleep for 10 ms.
- Tale a new sample
- Sleep
- etc...
The plan is to make the WD run during sleep, and let it generate an interrupt when timer expires, which should wake up the cpu.
What I can do right now, is entering Deep Sleep.
And I can make the WD reset the cpu when timer expires. This means that the WD timer is running OK during Sleep.
But when i want to make just a IRQ when timer expires, it never wakes up.
System details:
- LPC1225
- Running on IRC
- Rowley Crossworks IDE
Here is how I do:
DoSampling()
// Enter Deep Sleep:
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15); // Enable WD clock
LPC_WWDT->TC = 0x1000; // Set timer (appr. 1 sec at the moment)
LPC_WWDT->CLKSEL = 1; // select watchdog oscillator as Watchdog clock source
LPC_WWDT->MOD = 1; // WD timeout = IRQ
// LPC_WWDT->MOD = 3; // WD timeout = IRQ + CPU Reset
LPC_WWDT->FEED = 0xAA; // Load WD registers
LPC_WWDT->FEED = 0x55; // load WD registers
// Enable WD IRQ:
NVIC_EnableIRQ(WDT_IRQn);
LPC_SYSCON->PDSLEEPCFG &= ~(1<<6); // WD timer running during deep sleep
SCB->SCR |= (1 << 2); // Select deep sleep mode
__WFI(); // Enter Sleep mode
I have this handler for the interrupt:
void WDT_IRQHandler( void )
{
NVIC_DisableIRQ(WDT_IRQn);
// Clear sleep bit:
SCB->SCR &= ~(1 << 2);
LPC_SYSCON->MAINCLKSEL = 0; /* Select PLL Clock Output */
LPC_SYSCON->MAINCLKUEN = 0x01; /* Update MCLK Clock Source */
LPC_SYSCON->MAINCLKUEN = 0x00; /* Toggle Update Register */
LPC_SYSCON->MAINCLKUEN = 0x01;
while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); /* Wait Until Updated */
// Turn ON an LED to indicate wakeup:
GPIOSetPortBit( Status_LED_GREEN_PORT, Status_LED_GREEN_PIN, ON );
}
I have read several forum posts, user manuals and application notes, and have tried pretty much everything...
But it still don't wake up from sleep.
I am convinced that I am close to the target, as I can make the WD run suring sleep, and is able to make the cpu reset at WD timeout.
But I can't make the WD IRQ wake up the cpu.
Thanks in advance for any help !
br
Kaare