クロックシステムがどうなっているのかを把握しておくことは MCUを使う上でとても重要です。MSP430 はそれなりに自由度のある クロックシステムを持っているのでなおさらです。
全体像の詳細は MSP430x2xx Family User's Guideの Figure 5-1 を 見るのが良いと思いますが、ここでは敢えてざっくりはしょって 大雑把に説明しましょう。ポイントは以下のとおりです。
クロック源↓ | MCLK | SMCLK | ACLK |
---|---|---|---|
DCO | ○ | ○ | N/A |
VLO | ○ | ○ | ○ |
LFXT1 | ○ | ○ | ○ |
Master Clock のことで、CPU コアはこれで動きます。 インストラクションセット(命令セット)表のクロック欄に書いてある数字は これです。 基本的に 速くて電気食いに直結するので、これをできるだけ停止することが 消費電力の低減に有効です。MSP430G2だと16MHz(っていろいろな ところに書いてあるけどイマイチ詳細不明。詳しくはDCOのところで後述)。 起動時はDCOにつながってます。 多くの場合、そのままで良さそうです。
ペリフェラルを駆動するのに使うクロックです。まぁ、用がなければ 使わなければいいでしょう。 起動時はDCOにつながってます。 まぁ、そのままで良さそうです。
ペリフェラルを駆動するのに使うクロックです。たぶん、標準的には これを遅いクロック源(VLOとか)につなげて(、Timer_A に食わせるなど して)、MCLK停止時のコアよう目覚ましなんかに使うのではないでしょうか。 起動時はLFXT1につながってます。 これを VLO につなげ直すには次のようなコードを実行すればいいです。
BCSCTL3 |= LFXT1S_2;
MCLK, SMCLK, ACLKのクロック源は DCO, VLO, LFXT1 の 3 つ(G2ファミリ 以外にはXT2てのもあるようです。)があり、それぞれ以下のとおりです。
DCOCTL |= DCO1 + DCO0; BCSCTL1 |= RSEL3 + RSEL2 + RSEL1 + RSEL0;DCOxとRSELxの設定と周波数は 個別のデータシート(リンク先はMSP430G2231の場合の例)などを見るのが 良さそうです。