12,966
回編集
(→DCO) |
|||
313行目: | 313行目: | ||
* <code>DCOCTL = CALDCO_16MHZ;</code> | * <code>DCOCTL = CALDCO_16MHZ;</code> | ||
*: <code>CALDCO_16MHZ</code>の値をDCOCTLレジスタに設定して、DCO校正値を16[MHz]に設定する。 | *: <code>CALDCO_16MHZ</code>の値をDCOCTLレジスタに設定して、DCO校正値を16[MHz]に設定する。 | ||
<br> | |||
==== MCLK 16[MHz] / SMCLK 8[MHz]に設定 ==== | |||
MSP430G2553マイコンでは、MCLKとは別に、SMCLKを他の周波数に設定することが可能である。<br> | |||
SMCLKの周波数は、DCOの周波数を分周することで得られる。<br> | |||
<br> | |||
以下の例では、MCLKを16[MHz]、SMCLKを8[MHz]に設定している。<br> | |||
<br> | |||
<code>BCSCTL2 |= SELM_0 | DIVS_1;</code>では、<code>SELM</code>ビットを<code>0</code>に設定することにより、<br> | |||
MCLKの供給元をDCOに設定、<code>DIVS</code>ビットを</code>1</code>に設定して、SMCLKの分周比を2にしている。<br> | |||
これにより、DCOの周波数 (16[MHz]) がそのままMCLKに供給されて、SMCLKにはDCOの周波数を2で割った8[MHz]が供給される。<br> | |||
DCOの周波数レンジと校正値を16[MHz]に設定している。<br> | |||
<syntaxhighight 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); // 水晶発振子が安定するまで待機 : 50[mS] | |||
// FLLの設定 | |||
BCSCTL2 |= SELM_0 | DIVS_1; // MCLK = DCO, SMCLK = DCO / 2 | |||
BCSCTL1 |= CALBC1_16MHZ; // DCO周波数レンジの設定 | |||
DCOCTL = CALDCO_16MHZ; // DCO校正値の設定 | |||
while(1) { | |||
// ...略 | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
SMCLKの分周比は、<code>DIVS</code>ビットを変更することにより、調整することができる。<br> | |||
以下に、<code>DIVS</code>ビットの設定とそれに対応するSMCLKの分周比を示す。<br> | |||
* DIVS_0 | |||
*: SMCLK = DCO / 1 (分周なし) | |||
* DIVS_1 | |||
*: SMCLK = DCO / 2 | |||
* DIVS_2 | |||
*: SMCLK = DCO / 4 | |||
* DIVS_3 | |||
*: SMCLK = DCO / 8 | |||
<br> | |||
したがって、DCOの周波数を16[MHz]に設定した場合、SMCLKは16[MHz]、8[MHz]、4[MHz]、2[MHz]のいずれかに設定できる。<br> | |||
<br> | |||
これにより、アプリケーションの要件に応じて、MCLKとSMCLKの周波数を個別に最適化することができる。<br> | |||
<br> | |||
==== 他の周波数の設定 ==== | |||
MSP430G2553マイコンでは、DCOの周波数を分周して、SMCLKとMCLKの周波数を設定することができる。<br> | |||
分周比は、BCSTCLレジスタの<code>DIVM</code>ビットおよび<code>DIVS</code>ビットを使用して制御する。<br> | |||
<br> | |||
* MCLKの分周比 (DIVMビット) | |||
** DIVM_0 (分周なし) | |||
**: MCLK = DCO / 1 | |||
** DIVM_1 | |||
**: MCLK = DCO / 2 | |||
** DIVM_2 | |||
**: MCLK = DCO / 4 | |||
** DIVM_3 | |||
**: MCLK = DCO / 8 | |||
*: <br> | |||
* SMCLKの分周比(DIVSビット) | |||
** DIVS_0 (分周なし) | |||
**: SMCLK = DCO / 1 | |||
** DIVS_1 | |||
**: SMCLK = DCO / 2 | |||
** DIVS_2 | |||
**: SMCLK = DCO / 4 | |||
** DIVS_3 | |||
**: SMCLK = DCO / 8 | |||
<br> | |||
これらの分周比を組み合わせることにより、DCOの周波数から必要なSMCLKとMCLKの周波数を得ることができる。<br> | |||
<br> | |||
例えば、<u>DCOの周波数が16[MHz]の場合</u>、以下に示すような組み合わせが可能である。<br> | |||
* MCLK = 16[MHz] (DIVM_0), SMCLK = 16[MHz] (DIVS_0) | |||
* MCLK = 16[MHz] (DIVM_0), SMCLK = 8[MHz] (DIVS_1) | |||
* MCLK = 16[MHz] (DIVM_0), SMCLK = 4[MHz] (DIVS_2) | |||
* MCLK = 16[MHz] (DIVM_0), SMCLK = 2[MHz] (DIVS_3) | |||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 8[MHz] (DIVS_0) | |||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 4[MHz] (DIVS_1) | |||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 2[MHz] (DIVS_2) | |||
* MCLK = 8[MHz] (DIVM_1), SMCLK = 1[MHz] (DIVS_3) | |||
<br><br> | <br><br> | ||