クロックについて再学習してまとめておく。
MSP430G2***で内部で使用されるクロックは、3つあると思われる。ACLK、MCLK、SMCLK。MSP430のマニュアルには、外部クロックとしてXT1とXT2の記載があるが、G2ではXT2の端子がないため、RTCクロックを接続するXT1のみが存在する。
上の右の絵は2012のファミリマニュアルの絵で、図の下のコメントに下記記載がある。
MSP430G2xx1, MSP430G2xx2, MSP430G2xx3: LFXT1 does not support HF mode, XT2 is not present, ROSC is not supported.
第1にACLK
XTS設定(BCSCTL1)により、デフォルトでXTS=0で低周波数設定。XT1が接続されるとき(この場合32.768KHzのみ)がデフォルト(BCSCTL3のLFXT1SX)となる。水晶を接続しないで、ACLKを有効にするにはLFXT1SX=10bとし、内蔵のLFオシレータ(VLOCLK)の設定とする必要がある。端子数が少ないMCUだからXT1はポートして使うと思うから、下記設定は必須と考えられる。
BCSCTL3 |= LFXT1S_2;
内蔵オシレータの周波数は、Typで12KHz。特性についてはデータシートを参照とのことであるが、MSP430G2553データシートを見ると全温度範囲@3Vで、4KHz~20KHzのばらつきがある。温度ドリフトが0.5%/℃、電圧ドリフトが4%/Vとあり、かなり大きい。ばらついてもいいけど、屋外で使用想定である程度おおよその時間で回したいの場合には使えないのかもしれない。
第2にMCLK
データシートのブロック図でCPUに供給されているので、内部のメインクロック。SELMx(BCSCTL2)で、ACLKの分周前(VLOCLKまたXT1)か、SMCLKの分周前(DCOCLK)かを選択するが、デフォルトでDCOCLK設定となる。
第3にSMCLK
内蔵のDCOクロック生成回路によるクロックである。あらかじめ、調整されたクロック設定がマイコンの特定領域に書き込まれていて、それを反映させることで設定できるようだ。CCSのmsp430g2553.hには下記記載になっている
SFR_8BIT(CALDCO_16MHZ); /* DCOCTL Calibration Data for 16MHz */
SFR_8BIT(CALBC1_16MHZ); /* BCSCTL1 Calibration Data for 16MHz */
SFR_8BIT(CALDCO_12MHZ); /* DCOCTL Calibration Data for 12MHz */
SFR_8BIT(CALBC1_12MHZ); /* BCSCTL1 Calibration Data for 12MHz */
SFR_8BIT(CALDCO_8MHZ); /* DCOCTL Calibration Data for 8MHz */
SFR_8BIT(CALBC1_8MHZ); /* BCSCTL1 Calibration Data for 8MHz */
SFR_8BIT(CALDCO_1MHZ); /* DCOCTL Calibration Data for 1MHz */
SFR_8BIT(CALBC1_1MHZ); /* BCSCTL1 Calibration Data for 1MHz */
したがって、1MHzに設定するときは
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
クロックと動作モード
動作モードに応じて停止するクロックが異なる。使用する機能とそれが使用するクロック設定によって時間待ちするときに入れるモードに注意しないと、起き上がってくれない。
何もしないでwaitするとき低消費になってほしいからLPM3に入れたいところだが、周辺機能などでクロック設定に注意する必要がある。
Mode | CPU and Clocks Status |
Active | 通常ここ |
LPM0 | CPU, MCLK are disabled, SMCLK, ACLK are active |
LPM1 | CPU, MCLK are disabled. DCO and DC generator are disabled if the DCO is not used for SMCLK. ACLK is active. |
LPM2 | CPU, MCLK, SMCLK, DCO are disabled. DC generator remains enabled. ACLK is active. |
LPM3 | CPU, MCLK, SMCLK, DCO are disabled. DC generator disabled. ACLK is active. |
LPM4 | CPU and all clocks disabled |
例えば、
- シリアルUSCIのクロックはDCO生成のSMCLKを使用するから、LPM3に入れてしまうと受信で起き上がれない。
- AD変換はデフォルトでAD回路専用のAD10OSCが使用されるようだが、LPM3モード待ち(_BIS_SR(LPM3_bits + GIE);)にすると起き上がれないため、LPM0またはCPUOFFで待つ
コメントを追加