12,966
回編集
(ページの作成:「== 概要 == 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> | ||