「MSP430G2553 - クロック」の版間の差分

ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == MSP430マイコンには、様々なクロックソースとクロック信号があり、これらを適切に設定することにより、システムの動作を最適化することができる。<br> <br> * クロックソース ** DCO (Digitally Controlled Oscillator) **: 内部の高速クロックソースである。 ** VLO (Very Low Power Oscillator) **: 内部の低速・低消費電力クロックソースである。 ** XTAL **: 外部の…」)
 
163行目: 163行目:
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== クロックの選択 ==
==== デフォルトの設定 ====
MSP430G2553マイコンは、クロックの指定が無い場合は、以下に示すクロック周波数で動作する。<br>
* MCLK (マスタクロック)
*: 1.1 [MHz]
*: MCLKは、CPUとシステムクロックに使用される。
*: デフォルトでは、内蔵のDCO (デジタル制御発振器) が<code>CALBC1_1MHZ</code>と<code>CALDCO_1MHZ</code>の校正値を使用して、1.1[MHz]に設定されている。
*: <br>
* SMCLK (サブマインクロック)
*: 1.1 [MHz]
*: SMCLKは、ペリフェラル (タイマ、UART、SPI、I2C等) のクロックに使用される。
*: デフォルトでは、SMCLKもDCOを使用して、MCLKと同じ1.1[MHz]で動作する。
*: <br>
* ACLK (補助クロック)
*: 12 [kHz]
*: ACLKは、低速のペリフェラル (ウォッチドッグタイマ、リアルタイムクロック等) のクロックに使用される。
*: デフォルトでは、内蔵の低速オシレータ (VLO) が使用されており、約12[kHz]で動作する。
<br>
以下の例は、デフォルト設定でのクロック構成を示している。<br>
<syntaxhighlight lang="c">
#include <msp430.h>
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;  // ウォッチドッグタイマを停止
    // Default clock configuration:
    // MCLK = DCO = 1.1 MHz
    // SMCLK = DCO = 1.1 MHz
    // ACLK = VLO = ~12 kHz
    while(1) {
        // ...略
    }
}
</syntaxhighlight>
<br>
==== MCLK / SMCLKを16[MHz]に設定 ====
32.768[kHz]の外部水晶発振子を使用して、MSP430G2553を16[MHz]で動作させるには、内蔵のFLL (周波数ロックループ) を使用する。<br>
FLLは、低速の外部クロックを基準にして、高速のDCOの周波数を安定化させる機能である。<br>
<br>
以下の例では、32.768[kHz]の外部水晶発振子を使用してFLLを設定し、16[MHz]で動作させている。<br>
# 外部クロック用のピンを設定する。
#* P2.6 (XTAL IN)
#* P2.7 (XTAL OUT)
# BCSTCLレジスタを設定して、ACLK (補助クロック) の分周比を1に設定する。
# BCSCTL3レジスタを設定して、LFXT1 (低周波クリスタル) を32.768[kHz]の水晶発振子に設定する。
# 水晶発振子の安定化を待つ。
# BCSCTL2レジスタを設定して、MCLK (マスタクロック) とSMCLK (サブマスタクロック) の供給元をDCOに設定する。
# BCSCTL1レジスタとDCOCTLレジスタを設定して、DCOの周波数レンジと校正値を16[MHz]に設定する。
<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 | SELS;  // MCLK = DCO, SMCLK = DCO
    BCSCTL1 |= CALBC1_16MHZ;    // DCO周波数レンジの設定
    DCOCTL = CALDCO_16MHZ;      // DCO校正値の設定
    while(1) {
      // ...略
    }
}
</syntaxhighlight>
<br>
上記のサンプルコードでは、FLLはDCOの周波数を16[MHz]に安定化させて、MCLKとSMCLKに16[MHz]のクロックを供給している。<br>
* <code>BCSCTL2 |= SELM_0 | SELS;</code>
*: <code>SELM</code>ビットを<code>0</code>に設定して、MCLKの供給元をDCOに設定する。
*: <code>SELS</code>ビットを<code>1</code>に設定して、SMCLKの供給元もDCOに設定する。
*: <br>
* <code>BCSCTL1 |= CALBC1_16MHZ;</code>
*: <code>CALBC1_16MHZ</code>の値をBCSTCL1レジスタに設定して、DCO周波数レンジを16[MHz]に設定する。
*: <br>
* <code>DCOCTL = CALDCO_16MHZ;</code>
*: <code>CALDCO_16MHZ</code>の値をDCOCTLレジスタに設定して、DCO校正値を16[MHz]に設定する。
<br><br>
<br><br>


案内メニュー