Quantcast
Channel: Zigbee 和 Thread
Viewing all articles
Browse latest Browse all 16978

帖子: RE: CC2538在PM2模式下的内部时钟问题。

$
0
0

void
SysCtrlDeepSleep(void)
{
#ifndef NO_CLOCK_DIVIDER_RESTORE
bool bRestoreSys;
bool bRestoreIO;
uint32_t ui32Reg;

ui32Reg = HWREG(SYS_CTRL_CLOCK_STA);
bRestoreSys = (ui32Reg & SYS_CTRL_CLOCK_STA_SYS_DIV_M)==0;
bRestoreIO = (ui32Reg & SYS_CTRL_CLOCK_STA_IO_DIV_M)==0;
if(bRestoreSys || bRestoreIO)
{
ui32Reg = HWREG(SYS_CTRL_CLOCK_CTRL);
ui32Reg |= bRestoreSys? 0x1:0x0;
ui32Reg |= bRestoreIO? 0x100:0x0;
HWREG(SYS_CTRL_CLOCK_CTRL) = ui32Reg;
}
#endif

//
// Enable deep-sleep.
//
HWREG(NVIC_SYS_CTRL) |= NVIC_SYS_CTRL_SLEEPDEEP;

//
// Wait for an interrupt.
//
CPUwfi();

//
// Disable deep-sleep so that a future sleep will work correctly.
//
HWREG(NVIC_SYS_CTRL) &= ~(NVIC_SYS_CTRL_SLEEPDEEP);

#ifndef NO_CLOCK_DIVIDER_RESTORE
if(bRestoreSys || bRestoreIO)
{
ui32Reg = HWREG(SYS_CTRL_CLOCK_CTRL);
ui32Reg &= bRestoreSys ? ~SYS_CTRL_CLOCK_CTRL_SYS_DIV_M : 0xffffffff;
ui32Reg &= bRestoreIO ? ~SYS_CTRL_CLOCK_CTRL_IO_DIV_M : 0xffffffff;
HWREG(SYS_CTRL_CLOCK_CTRL) = ui32Reg;
}
#endif
}

从16M 切到32M,没有时钟stable(HAL_CLOCK_STABLE), 对吗?


Viewing all articles
Browse latest Browse all 16978

Trending Articles