yagshi's website
MSP430G2 のクロックシステム

MSP430G2 のクロックシステム

はじめに

クロックシステムがどうなっているのかを把握しておくことは MCUを使う上でとても重要です。MSP430 はそれなりに自由度のある クロックシステムを持っているのでなおさらです。

全体像

全体像の詳細は MSP430x2xx Family User’s Guide の Figure 5-1 を 見るのが良いと思いますが、ここでは敢えてざっくりはしょって 大雑把に説明しましょう。ポイントは以下のとおりです。

- 内部で使う主なクロックは MCLK, SMCLK, ACLK の3つ。ただしペリフェラルによってはこれ以外にも外部入力等を使える。
- クロック源はDCO, VLO, LFXT1の三つ。ただし、MSP430G2以外のファミリーではこの限りではない。
- ACLKだけはクロック源としてDCOを選べないが、それ以外は比較的組み合わせ自由。
- DCOとVLOは内部発振器で作れる。LFXT1は外付けクリスタルで発振。
clock diagram

クロック対応表

クロック源↓ MCLK SMCLK ACLK
DCO N/A
VLO
LFXT1

MCLK (Master clock)

Master Clock のことで、CPU コアはこれで動きます。 インストラクションセット(命令セット)表のクロック欄に書いてある数字は これです。 基本的に 速くて電気食いに直結するので、これをできるだけ停止することが 消費電力の低減に有効です。MSP430G2だと16MHz(っていろいろな ところに書いてあるけどイマイチ詳細不明。詳しくはDCOのところで後述)。 起動時はDCOにつながってます。 多くの場合、そのままで良さそうです。

SMCLK (Sub-main clock)

ペリフェラルを駆動するのに使うクロックです。まぁ、用がなければ 使わなければいいでしょう。 起動時はDCOにつながってます。 まぁ、そのままで良さそうです。

ACLK (Auxiliary clock)

ペリフェラルを駆動するのに使うクロックです。たぶん、標準的には これを遅いクロック源(VLOとか)につなげて(、Timer_A に食わせるなど して)、MCLK停止時のコアよう目覚ましなんかに使うのではないでしょうか。 起動時はLFXT1につながってます。 これを VLO につなげ直すには次のようなコードを実行すればいいです。

  BCSCTL3 |= LFXT1S_2;

クロック源(DCO, VLO, LFXT1)

MCLK, SMCLK, ACLKのクロック源は DCO, VLO, LFXT1 の 3 つ(G2ファミリ 以外にはXT2てのもあるようです。)があり、それぞれ以下のとおりです。

  • DCO(Digitally-Controlled Oscillator)
    プログラマブルな内部発信器です。周波数は RSELx, DCOx, MODx の3つのレジスタ(内のビットフィールド)で変更 可能です。起動直後は、RSELx=7, DCOx=3になっており、これは MSP430G2x21 の場合 0.8〜1.5MHz 程度のようです。つまり、 起動直後は 1MHz(くらい)駆動 (遅めに設定されている)と認識しておきましょう。 ちなみに最速設定は RSELx=15, DCOx=7 で、このとき MSP430G2x21/31 は 21 MHz とマニュアルには書いてあるのですが、実際そうでした。 でも、カタログ等には最大16MHzみたいな表記があるので謎です。 21 MHz も出るけど、16 MHz までにしとけ、という意味なのかな? なお、15MHz 強にするにはこんなコードを書けばいいです。
  DCOCTL  |= DCO1 + DCO0;
  BCSCTL1 |= RSEL3 + RSEL2 + RSEL1 + RSEL0;

DCOxとRSELxの設定と周波数は 個別のデータシート(リンク先はMSP430G2231の場合の例) などを見るのが良さそうです。

  • VLO(very-low-power, low-frequency oscillator)
    便利な12 kHz(typ.)固定の発振器です。何もしなくても勝手に12 kHz (くらい)で発振してくれます。ACLKをこれにつなげて、遅くても いいペリフェラルを積極的にこれで駆動すると良さそうです。

  • LFXT1
    外付け 32768 Hz のクリスタル専用の発振器です。VLOじゃ不正確で いや〜、というときに使うのでしょう。G2 でない一部のファミリでは もっと高速のクリスタルをつけることもできるようですが、 G2 では 32768 Hz 専用です。ちなみに LaunchPad 買うとオマケに 32768 Hz のクリスタルがついてきます(!)。