CC2541用内部32K,除连接有时会断线外((这个就是用了外部32K导致的),其它一切正常;当改为外部32K后,中断唤醒后有时无法广播,查资料说进入PM3后,32K停振,当唤醒时32K启动需要0。5S时间,是不是因为这个引起的。因为在外部中断唤醒后没有做延时处理,由于振荡不稳定所致;
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
#define EXTERNAL_CRYSTAL_OSC 0x00 // external 32kHz XOSC
#define INTERNAL_RC_OSC 0x80 // internal 32kHz RCOSC
#define OSC_32KHZ EXTERNAL_CRYSTAL_OSC
// switch to the 16MHz HSOSC and wait until it is stable #define SET_OSC_TO_HSOSC() \ { \ CLKCONCMD = (CLKCONCMD & 0x80) | CLKCONCMD_16MHZ; \ while ( (CLKCONSTA & ~0x80) != CLKCONCMD_16MHZ ); \ }
// switch to the 32MHz XOSC and wait until it is stable #define SET_OSC_TO_XOSC() \ { \ CLKCONCMD = (CLKCONCMD & 0x80) | CLKCONCMD_32MHZ; \ while ( (CLKCONSTA & ~0x80) != CLKCONCMD_32MHZ ); \ }
// set 32kHz OSC and wait until it is stable #define SET_32KHZ_OSC() \ { \ CLKCONCMD = (CLKCONCMD & ~0x80) | OSC_32KHZ; \ while ( (CLKCONSTA & 0x80) != OSC_32KHZ ); \ }
#define START_HSOSC_XOSC() \ { \ SLEEPCMD &= ~OSC_PD; /* start 16MHz RCOSC & 32MHz XOSC */ \ while (!(SLEEPSTA & XOSC_STB)); /* wait for stable 32MHz XOSC */ \ } #define STOP_HSOSC() \ { \ SLEEPCMD |= OSC_PD; /* stop 16MHz RCOSC */ \ } /* Board Initialization */
#if defined ( CC2540_MINIDK )
#define HAL_BOARD_INIT() \ { \ /* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */ \ START_HSOSC_XOSC(); \ SET_OSC_TO_HSOSC(); \ SET_32KHZ_OSC(); \ SET_OSC_TO_XOSC(); \ STOP_HSOSC(); \ \ \ /* Enable cache prefetch mode. */ \ PREFETCH_ENABLE(); \ /* Set LED GPIOs to outputs. */ \ LED1_DDR |= LED1_BV; \ LED2_DDR |= LED2_BV; \ }
就是在这个宏定义中的,只是把32K定为外部晶振而己,其它没变,把P2SEL设为外设功能也还是一样的