Я использую следующую процедуру для настройки часов моего микроконтроллера MSP430 (msp430g2231):
void configure_clock(void) {
if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { // Checks the clock constants
while(TRUE); // If callibration constants are erased, TRAP!
}
BCSCTL1 |= CALBC1_1MHZ; // Sets DCO range
DCOCTL |= CALDCO_1MHZ; // Set DCO step and modulation
BCSCTL1 &= ~(XTS | XT2OFF); // Disables XT2 and sets low frequency mode
BCSCTL3 |= (LFXT1S_0 | XCAP_3); // Selects LFXT1 crystal with 12,5pF
do {
IFG1 &= ~OFIFG;
__delay_cycles(1000);
} while (IFG1 & OFIFG); // Waits until crystal stabilizes
BCSCTL2 |= (SELM_2 | SELS); // Selects SMCLK and MCLK from LFXT1CLK
}
Проблема в том, что при первом запуске кода (сразу после включения микроконтроллера) все работает, как и ожидалось, и я получаю тактовую частоту 32768 кГц. Но если я нажму кнопку сброса на плате (MSP430 Launchpad), часы не будут работать правильно, код будет выполняться очень медленно (примерно 10 раз или около того). Есть идеи по настройке часов?
Спасибо!
Пере