MSP430G2553 - クロック

提供:MochiuWiki : SUSE, EC, PCB
2024年6月4日 (火) 09:14時点におけるWiki (トーク | 投稿記録)による版 (→‎概要)
ナビゲーションに移動 検索に移動

概要

MSP430マイコンには、様々なクロックソースとクロック信号があり、これらを適切に設定することにより、システムの動作を最適化することができる。

  • クロックソース
    • DCO (Digitally Controlled Oscillator)
      内部の高速クロックソースである。
    • VLO (Very Low Power Oscillator)
      内部の低速・低消費電力クロックソースである。
    • XTAL
      外部の水晶発振器を接続するためのクロックソースである。
    • LFXT1
      外部の低周波数水晶発振器を接続するためのクロックソースである。

  • クロック信号
    • MCLK (Master Clock)
      CPUとデジタル回路のタイミングを制御するクロック信号である。
    • SMCLK (Subsystem Master Clock)
      周辺モジュールに供給されるクロック信号である。
    • ACLK (Auxiliary Clock)
      低速の周辺モジュールに供給されるクロック信号である。

  • クロック制御
    UCS (Unified Clock System) モジュールや、CS (Clock System) モジュールを使用してクロックを設定する。
    クロックソースの選択、クロック周波数の設定、クロック信号の有効化 / 無効化等を行う。

  • クロック分周器
    クロックソースの周波数を分周して、必要なクロック周波数を生成する。
    MCLK、SMCLK、ACLKごとに独立した分周器がある。

  • 低電力モード
    クロックを停止させることにより、消費電力を抑えることができる。
    低電力モードには、MSP430マイコンの動作を停止するモードやクロック信号を選択的に停止するモードがある。

  • クロックの切り替え
    動的にクロックソースを切り替えることができる。
    例えば、高速動作が必要な場合はDCOを使用して、低消費電力が必要な場合はVLOを使用する等の切り替えが可能である。


MSP430のクロックシステムは、アプリケーションの要件に合わせて柔軟に設定することができる。
適切なクロックソースとクロック周波数を選択して、低電力モードを活用することで、性能と消費電力のバランスを取ることができる。

また、動的なクロックの切り替えにより、状況に応じた最適な動作を実現することができる。


DCO

DCO (Digitally Controlled Oscillator) は、デジタル制御発振器のことである。
これは、MSP430マイコンに内蔵されているクロック源の1つである。

DCOの主な特徴を以下に示す。

  • デジタル制御
    DCOの周波数は、デジタル的に制御および調整が可能である。
    周波数は、DCOCTLレジスタとBCSCTLレジスタの設定により決定される。

  • 広い周波数範囲
    DCOは、数十[kHz]から数十[MHz]までの広い周波数範囲で動作できる。
    MSP430G2553の場合、DCOの周波数は約1[MHz]から16[MHz]まで設定可能である。

  • 校正機能
    DCOは、工場出荷時に校正された値を持つ。
    これらの校正値 (CALBCxとCALDCOx) を使用することにより、DCOの周波数を高精度に設定できる。

  • クロック源としての役割
    DCOは、MSP430マイコンの主要なクロック源として使用される。
    多くの場合、MCLKとSMCLKにDCOからのクロックが供給される。

  • 低消費電力
    DCOは、外部クリスタルと比較して低消費電力である。
    バッテリー駆動のアプリケーションに適している。


DCOは、MSP430マイコンの柔軟性と低消費電力性を支える重要な機能の1つである。
アプリケーションの要件に応じて、DCOの周波数を適切に設定することにより、最適なパフォーマンスと消費電力のバランスを達成できる。

ただし、DCOは温度や電源電圧の変動の影響を受けやすいため、高い周波数安定性が必要な場合は、外部クリスタルを使用することが推奨される。


MCLK (Master Clock)

MSP430マイコン全般のメインクロックのことである。
メインクロックの動作とデジタル回路のタイミングを制御するためのものである。

クロックソースは、DCO、VLO、XTAL等から選択できる。
クロック周波数は、クロックソースの周波数をクロック分周器で分周することで設定する。

低電力モードでは、MCLKを停止させることでMSP430マイコンの主動作を停止して、消費電力を抑えることができる。


SMCLK (Subsystem Master Clock)

周辺モジュール用のクロックのことである。
タイマ、UART、SPI、I2C等の周辺モジュールに供給されるものである。

クロックソースは、DCO、VLO、XTAL等から選択できる。
クロック周波数は、クロックソースの周波数をクロック分周器で分周することで設定する。

低電力モードでは、SMCLKを停止させることにより、消費電力を抑えることができる。


MCLKとSMCLKの違い

  • 用途
    MCLKはMSP430マイコン用、SMCLKは周辺モジュール用である。

  • 動作
    SMCLKは、周辺モジュールの動作に影響する。
    MCLKは、CPUの動作に影響する。

  • 低電力モード
    SMCLKを停止させても、MSP430マイコンは動作可能である。
    MCLKを停止させると、MSP430マイコンも停止する。

  • 周波数
    MCLKとSMCLKは、同じクロックソースを使用できるが、分周率を変えることで異なる周波数で動作させることができる。


MCLKとSMCLKを適切に設定することにより、アプリケーションの要件に合わせたシステムクロックを実現できる。
また、低電力モードでは、これらのクロックを選択的に停止させることにより、消費電力を最適化できる。


ACLK (Auxiliary Clock)

ACLKとは

MSP430マイコンの低速の周辺モジュール用のクロック信号である。

低速の周辺モジュールに供給されるクロック信号であり、一般的に32[kHz]以下の周波数で動作する。
主に、タイマ、リアルタイムクロック (RTC)、ウォッチドッグタイマ (WDT) 等の低速モジュールに使用される。

ACLKは、MSP430マイコンの低消費電力化に重要な役割を果たす。
適切なクロックソースと周波数を選択することにより、低速の周辺モジュールを効率的に動作させることができる。
また、VLOを使用することで、さらに低消費電力化が可能になる。

クロックソース

ACLKのクロックソースは、以下の中から選択できる。

  • VLO (Very Low Power Oscillator)
    内部の低速・低消費電力クロックソースである。

  • LFXT1 (Low Frequency Crystal Oscillator)
    外部の低周波数水晶発振器を接続するためのクロックソースである。


クロックソースの選択は、UCBCSRレジスタまたはCSCTLxレジスタ (xはモジュールにより異なる) で行う。

  • LFXT1の設定
    • LFXT1S_0:LFXT1を使用 (デフォルト)
    • LFXT1S_1
      予約済み
    • LFXT1S_2
      VLOを使用
    • LFXT1S_3
      LFXT1のバイパスモード (外部クロックソースを直接使用)


クロック周波数

ACLKの周波数は、選択したクロックソースの周波数をそのまま使用する、または、分周器で分周した周波数になる。
分周率は、UCBCSRレジスタまたはCSCTLxレジスタで設定することができる。

低消費電力

ACLKは、低速の周辺モジュールに使用されるため、消費電力が低く抑えられる。
VLOをクロックソースとして使用することにより、さらに低消費電力化が可能となる。

使用例

  • リアルタイムクロック (RTC)
    ACLKを使用して、低消費電力で正確な時間管理を行う。

  • ウォッチドッグタイマ (WDT)
    ACLKを使用して、システムの異常動作を監視してリセットを行う。

  • 低速のタイマ
    ACLKを使用して、長期間のタイミング制御を行う。


注意点

  • ACLKを使用する場合、クロックソースの安定性に注意が必要である。
  • 外部の水晶発振器を使用する場合は、適切な負荷容量と発振回路の設計が重要である。


サンプルコード

以下の例では、ACLKのクロックソースをVL0に選択している。

  1. まず、WDTを停止する。
    これは、クロックの設定を変更する前に必要な処理である。
  2. BCSCTL3レジスタのLFXT1Sビットを設定して、ACLKのクロックソースを選択する。
    以下の例では、LFXT1S_2を設定することにより、ACLKのクロックソースをVLOに設定している。


※注意
クロックソースを切り替える際は、クロックが安定するまで待つ必要がある。
外部クロックソースを使用する場合は、適切な発振回路の設計が必要である。

 #include <msp430.h>
 
 int main(void)
 {
    // WDTを停止
    WDTCTL = WDTPW | WDTHOLD;
 
    // ACLKのクロックソースをVLOに設定
    BCSCTL3 |= LFXT1S_2;
 
    // その他の初期化処理
    // ...略
 
    while(1) {
        // メインループ
        // ...略
    }
 }



クロックの選択

デフォルトの設定

MSP430G2553マイコンは、クロックの指定が無い場合は、以下に示すクロック周波数で動作する。

  • MCLK (マスタクロック)
    1.1 [MHz]
    MCLKは、CPUとシステムクロックに使用される。
    デフォルトでは、内蔵のDCO (デジタル制御発振器) がCALBC1_1MHZCALDCO_1MHZの校正値を使用して、1.1[MHz]に設定されている。

  • SMCLK (サブマインクロック)
    1.1 [MHz]
    SMCLKは、ペリフェラル (タイマ、UART、SPI、I2C等) のクロックに使用される。
    デフォルトでは、SMCLKもDCOを使用して、MCLKと同じ1.1[MHz]で動作する。

  • ACLK (補助クロック)
    12 [kHz]
    ACLKは、低速のペリフェラル (ウォッチドッグタイマ、リアルタイムクロック等) のクロックに使用される。
    デフォルトでは、内蔵の低速オシレータ (VLO) が使用されており、約12[kHz]で動作する。


以下の例は、デフォルト設定でのクロック構成を示している。

 #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) {
        // ...略
    }
 }


MCLK / SMCLKを16[MHz]に設定

32.768[kHz]の外部水晶発振子を使用して、MSP430G2553を16[MHz]で動作させるには、内蔵のFLL (周波数ロックループ) を使用する。
FLLは、低速の外部クロックを基準にして、高速のDCOの周波数を安定化させる機能である。

以下の例では、32.768[kHz]の外部水晶発振子を使用してFLLを設定し、16[MHz]で動作させている。

  1. 外部クロック用のピンを設定する。
    • P2.6 (XTAL IN)
    • P2.7 (XTAL OUT)
  2. BCSTCLレジスタを設定して、ACLK (補助クロック) の分周比を1に設定する。
  3. BCSCTL3レジスタを設定して、LFXT1 (低周波クリスタル) を32.768[kHz]の水晶発振子に設定する。
  4. 水晶発振子の安定化を待つ。
  5. BCSCTL2レジスタを設定して、MCLK (マスタクロック) とSMCLK (サブマスタクロック) の供給元をDCOに設定する。
  6. BCSCTL1レジスタとDCOCTLレジスタを設定して、DCOの周波数レンジと校正値を16[MHz]に設定する。
 #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) {
       // ...略
    }
 }


上記のサンプルコードでは、FLLはDCOの周波数を16[MHz]に安定化させて、MCLKとSMCLKに16[MHz]のクロックを供給している。

  • BCSCTL2 |= SELM_0 | SELS;
    SELMビットを0に設定して、MCLKの供給元をDCOに設定する。
    SELSビットを1に設定して、SMCLKの供給元もDCOに設定する。

  • BCSCTL1 |= CALBC1_16MHZ;
    CALBC1_16MHZの値をBCSTCL1レジスタに設定して、DCO周波数レンジを16[MHz]に設定する。

  • DCOCTL = CALDCO_16MHZ;
    CALDCO_16MHZの値をDCOCTLレジスタに設定して、DCO校正値を16[MHz]に設定する。