12,964
回編集
400行目: | 400行目: | ||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 2[MHz] (DIVS_2) | * MCLK = 8[MHz] (DIVM_1), SMCLK = 2[MHz] (DIVS_2) | ||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 1[MHz] (DIVS_3) | * MCLK = 8[MHz] (DIVM_1), SMCLK = 1[MHz] (DIVS_3) | ||
<br> | |||
以下の例では、DCOの周波数を16[MHz]、MCLKを8[MHz]、SMCLKを4[MHz]に設定している。<br> | |||
<br> | |||
<code>BCSCTL2 |= SELM_0 | DIVM_1 | DIVS_2;</code>により、<code>DIVM</code>ビットを<code>1</code>に設定してMCLKの分周比を2、<code>DIVS</code>ビットを2に設定してSMCLKの分周比を4にしている。<br> | |||
これにより、DCOの周波数 (16[MHz]) がMCLKに2分周されて8[MHz]、SMCLKに4分周されて4[MHz]が供給される。<br> | |||
<syntaxhighlight lang="c"> | |||
#include <msp430.h> | |||
int main(void) | |||
{ | |||
WDTCTL = WDTPW | WDTHOLD; // ウォッチドッグタイマの停止 | |||
// 外部の水晶発振子のピン設定 | |||
P2SEL |= BIT6 + BIT7; // P2.6 - P2.7 : 水晶発振子のピン | |||
// クロックの設定 | |||
BCSCTL1 |= DIVA_0; // ACLK = LFXT1 / 1 | |||
BCSCTL3 |= LFXT1S_0; // LFXT1 = 32.768[kHz] | |||
__delay_cycles(50000); // 水晶発振子が安定するまで待機 | |||
// FLLの設定 | |||
BCSCTL2 |= SELM_0 | DIVM_1 | DIVS_2; // MCLK = DCO / 2, SMCLK = DCO / 4 | |||
BCSCTL1 |= CALBC1_16MHZ; // DCO周波数レンジの設定 | |||
DCOCTL = CALDCO_16MHZ; // DCO校正値の設定 | |||
while(1) { | |||
// ...略 | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||