2007-08-08 03:03 AM
2007-07-18 09:56 AM
Greetings...
I am having trouble exiting from STOP mode on an STR710FZ2. I have included my code below. It seems to go into STOP mode as evidenced by the current consumption, but bringing P0.15 (WAKEUP) high results in absolutely nothing. You'll note that I bring a debug line high when I go into STOP mode. You'll also notice that I bring that line low after resuming from STOP mode. That line never goes low. I've tried with and without disabling the MVR. I've also tried with and without shutting down the flash. Anybody have any ideas? TIA, Larry Wimble
static volatile U32 delayctr;
void pwrctl_stop(void)
{
/* Config the pins for low power consumption */
GPIO_Config(GPIO0, 0xAFF2, GPIO_IN_TRI_CMOS);
GPIO_Config(GPIO1, 0x250E, GPIO_IN_TRI_CMOS);
GPIO_Config(GPIO2, 0x9F00, GPIO_IN_TRI_CMOS);
GPIO_Config(GPIO0, 0x500D, GPIO_OUT_PP);
GPIO_Config(GPIO1, 0xDAF0, GPIO_OUT_PP);
GPIO_Config(GPIO2, 0x60FF, GPIO_OUT_PP);
GPIO_Config(GPIO0, 0x8000, GPIO_IN_TRI_TTL);
GPIO_WordWrite(GPIO0, 0x4208);
GPIO_WordWrite(GPIO1, 0x00B0);
GPIO_WordWrite(GPIO2, 0xE0DF);
/* Configure WAKEUP pin */
XTI_Init();
XTI_LineModeConfig(XTI_Line15, XTI_RisingEdge);
XTI_LineConfig(XTI_Line15, ENABLE); /* Enable line 15 Wake-Up int
*/
XTI_ModeConfig(XTI_WakeUp, ENABLE); /* Enable Wake-Up mode */
/* Select the RTC as the system clock */
RCCU_RCLKSourceConfig(RCCU_RTC_CLOCK);
RCCU->PLL1CR |= 0x7; /* Switch off PLL1 */
/* Switch off PLL2 as well */
PCU->PLL2CR |= 0x07;
/* Delay before stopping the oscillator */
for (delayctr = 0; delayctr < 0x100; delayctr++);
/* Stop the external oscillator */
GPIO_BitWrite(GPIO0, 14, 0);
/* Disable MVR during STOP mode */
PCU->PWRCR |= 0x8000;
PCU->PWRCR |= 0x0010;
/* Stop the FLASH during STOP */
FLASHR->CR0 |= 0x8000;
/* Set WKUP-int bit in XTI_CTRL register */
XTI->CTRL = 0x01;
/* Enter Stop mode */
GPIO_Config(GPIO0, 0x0002, GPIO_OUT_PP); /* DEBUG */
GPIO_BitWrite(GPIO0, 1, 1); /* DEBUG */
PCU_LPMEnter(PCU_STOP);
XTI_PendingBitClear(XTI_InterruptLineValue());
GPIO_BitWrite(GPIO0, 1, 0); /* DEBUG */
/* Re-enable the external oscillator */
GPIO_BitWrite(GPIO0, 14, 1);
for (delayctr = 0; delayctr < 0x100; delayctr++);
/* Back on system clock */
RCCU_PLL1Config(RCCU_PLL1_Mul_12, RCCU_Div_1) ;
while(RCCU_FlagStatus(RCCU_PLL1_LOCK) == RESET); /* Wait for lock */
RCCU_RCLKSourceConfig(RCCU_PLL1_Output) ;
/* Now reset the MCU */
RCCU->CCR |= (1 << 3);
RCCU->CCR |= (1 << 11);
RCCU->SMR = (1 << 1);
2007-07-18 09:42 PM
is the external oscillator running before you come out of stop ?
I see from your code you enable/disable it. Stop mode needs the external clock to be running in order to resume, you cant resume from stop on the RTC clock. Only WFI & LPWFI modes can do that. Ben2007-08-08 03:03 AM