次のルーチンを使用して、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
}
問題は、コードが最初に実行されたとき(マイクロコントローラーの電源を入れた直後)、すべてが期待どおりに機能し、32768kHzのクロックが得られることです。しかし、ボードのリセットボタン(MSP430 Launchpad)を押すと、時計が正しく機能していないように見え、コードの実行が非常に遅くなります(10回程度)。時計の構成について何かアイデアはありますか?
ありがとう!
ペレ