在PM0功耗模式下,可配置32MHz晶体振荡器或16MHzRC振荡器作为系统的时钟。设置系统时钟需要操作两个寄存器:CLKCON(时钟控制寄存器)和SLEEP(睡眠模式控制寄存器)。
本程序功能就是主函数不断切换XTAL和RC为系统时钟,并在中间插入LED闪烁函数,由于系统时钟速率不同,LED闪烁的频率也不同。
void initClockmodes(void) { DISABLE_ALL_INTERRUPTS(); P1SEL &= ~0x01; INIT_GLED(); } void blinkLeds(void) { UINT16 timeOut = 0xffff; while(timeOut--); GLED ^=1; }
void main(void) { unsigned char i; initClockmodes(); while(1) { Set_Main_Clock_Source(RC); for(i=0;i<20;i++) { blinkLeds(); } Set_Main_Clock_Source(CRYSTAL); for(i=0;i<20;i++) { blinkLeds(); } } }
|
// Macro for setting the main clock oscillator source,
//turns off the clock source not used
//changing to XOSC will take approx 150 us
#define SET_MAIN_CLOCK_SOURCE(source) \ do { \ if(source) { \ CLKCON |= 0x40; \ while(!HIGH_FREQUENCY_RC_OSC_STABLE); \ if(TICKSPD == 0){ \ CLKCON |= 0x08; \ } \ SLEEP |= 0x04; \ } \ else { \ SLEEP &= ~0x04; \ while(!XOSC_STABLE); \ asm("NOP"); \ CLKCON &= ~0x47; \ SLEEP |= 0x04; \ } \ }while (0)
|
LED灯一直闪烁,闪烁频率时高时低。
阅读(2779) | 评论(0) | 转发(5) |