MSP430F2013 - 電力モード
概要
電力モードは、マイコンの消費電力を管理するための仕組みである。
アプリケーションの要件に応じて、適切な電力モードを選択することにより、バッテリー駆動のデバイスにおける動作時間を延ばすことができる。
- アクティブモード
- マイコンがフル機能で動作しているモードである。
- 全てのクロックが動作し、CPUと周辺モジュールは通常の速度で動作する。
- 消費電力が最も高くなる。
- 低電力モード
- マイコンの一部の機能を停止または低速化することで、消費電力を抑えるモードである。
- 低電力モードにはいくつかのレベルがあり、停止する機能によって分類される。
- 一般的に、低電力モードのレベルが上がるほど、消費電力は低くなるが、復帰に時間がかかる場合がある。
- スリープモード
- CPUを停止して、いくつかの周辺モジュールも停止するモードである。
- 割り込みやリセットにより、スリープモードから復帰する。
- 低電力モードの一種と考えることができる。
- ディープスリープモード
- ほとんどの機能を停止して、最小限の消費電力で動作するモードである。
- 外部割り込みやリセットにより、ディープスリープモードから復帰する。
- 復帰時に、メモリの内容が失われる場合がある。
- 遷移と復帰
- 電力モード間の遷移は、レジスタの設定や特定の命令で行う。
- 割り込みやリセットにより、低電力モードからアクティブモードに復帰する。
- 復帰時に、停止していた機能を再初期化する必要がある場合がある。
電力モードを効果的に使用するには、アプリケーションの要件を分析、および、必要な機能と応答時間を考慮して、適切なモードを選択する必要がある。
また、割り込みや周辺モジュールの設定を適切に行い、復帰時の処理を正しく実装することが重要である。
MSP430F2013の動作モード
MSP430F2013は、1つのアクティブモードと5つのソフトウェア選択可能な低消費電力動作モードを備えている。
割り込みイベントにより、いずれの低消費電力モードからでもウェイクアップ、要求を処理して、割り込みからの復帰時に低消費電力モードに戻ることができる。
6つの動作モードをソフトウェアで設定することができる。
- アクティブモード (AM)
- CPUと全てのクロックが動作しているモードである。
- 消費電力が最も高くなる。
- 低消費電力モード0 (LPM0)
- CPUおよびMCLKは停止するが、ACLK、SMCLK、DCOは動作し続ける。
- CPUの消費電力を抑えることができる。
- 低電力モード1 (LPM1)
- CPU、MCLKが停止する。
- DCOのDCジェネレータにおいては、アクティブモードでDCOが使用されていない場合は停止する。
- ACLK、SMCLK、MCLKは動作し続ける。
- 低電力モード2 (LPM2)
- CPU、DCO、MCLK、SMCLKが停止する。
- DCOのDCジェネレータ、ACLKは動作し続ける。
- 低電力モード3 (LPM3)
- CPU、DCO、MCLK、SMCLKが停止する。
- ACLKのみ動作し続ける。
- 低電力モード4 (LPM4)
- CPU、MCLK、SMCLK、ACLK、DCOのDCジェネレータが停止する。
- 水晶発振器も停止する。
- 消費電力が最も低くなる。
電力モードの設定
状態レジスタ (SR) を使用する場合
状態レジスタ (Status Register, SR) は、マイコンの現在の状態を示すレジスタである。
MSP430マイコン全般では、SRは16ビットのレジスタであり、各ビットが特定の状態を表している。
電力モードに必要な各ビットについて、以下に示す。
- CPUの停止 (4ビット目)
- SRのCPUOFFビットを
1にする。
- SRのCPUOFFビットを
- オシレータの停止 (5ビット目)
- SRのOSCOFFビットを
1にする。
- SRのOSCOFFビットを
- システムクロックジェネレータ (DCOおよびSMCLK) の停止 (6ビット目)
- SRのSCG0ビットを
1にする。
- SRのSCG0ビットを
- システムクロックジェネレータ (DCO、SMCLK、MCLK) の停止 (7ビット目)
- SRのSCG1ビットを
1にする。
- SRのSCG1ビットを
__bis_SR_register関数を使用する場合
__bis_SR_register関数を使用して、状態レジスタ (SR) の該当ビットを1にする。
ただし、割り込みが発生すると、省電力モードから復帰する。
省電力モードを使用する場合は、必要なクロックと周辺モジュールを適切に設定して、不要なものは停止させることが重要である。
また、割り込みを適切に設定して、省電力モードから復帰できるようにする必要がある。
// LPM3に移行
__bis_SR_register(LPM3_bits);
低消費電力モードからの復帰方法
MSP430F2013では、割り込みイベントによって全ての低消費電力モード (LPM) から自動的に復帰する。
割り込み処理後、元のLPMに自動的に戻ることも、アクティブモードに遷移することも可能である。
- 復帰トリガー
- 有効化された割り込み (ポート、タイマ、通信等)
- 復帰時間:
- LPM0 / LPM1
- 即座 (DCO動作中)
- LPM2 / LPM3
- 約1.5[us] (DCO起動時間)
- LPM4
- 約1.5[us] + クロック安定時間
- LPM0 / LPM1
- 復帰後の動作
- 割り込みハンドラで
__bic_SR_register_on_exit関数を呼ぶことにより、アクティブモードを継続できる。 - 何も行わない場合は、自動的に元のLPMに復帰する。
- 割り込みハンドラで
- モード選択指針:
- LPM0 / LPM1
- ペリフェラル動作が必要 (65[uA])
- LPM2 / LPM3
- 定期起床タイマーアプリ (0.5〜22[uA])
- LPM4
- 外部イベント待機 (0.1[uA]、最低消費電力)
- LPM0 / LPM1
復帰の基本メカニズム
割り込みによる復帰プロセス
有効な割り込みが発生すると、以下に示すプロセスで自動的に復帰する。
- CPUが起動する。
- 必要なクロックが再開される。
- 割り込みハンドラへジャンプする。
- スタックにPC、SRが保存される。
- 割り込み処理を実行する。
- RETI命令でスタックからSR復帰 (LPMへの復帰 / 継続が決定)
復帰可能な割り込みソース
以下に示す割り込みでLPMから復帰できる。
- ポート割り込み (P1, P2)
- 外部信号による起動に最適
- Timer_A割り込み
- 定期的な起動に使用
- ウォッチドッグタイマ割り込み
- インターバルタイマとして使用
- SD16_A割り込み
- シグマデルタADコンバータ変換完了
- USI割り込み (SPI / I2C)
- 通信イベント
// LPMから復帰可能な割り込みソースの設定例
// 1. ポート割り込み (P1, P2)
P1IE |= BIT3; // P1.3の割り込み有効化
P1IES |= BIT3; // 立下りエッジで割り込み
P1IFG &= ~BIT3; // フラグクリア
// 2. Timer_A割り込み
TACCTL0 = CCIE; // CCR0割り込み有効
TACCR0 = 32768; // 1秒周期 (ACLK : 32.768[kHz])
TACTL = TASSEL_1 + MC_1; // ACLK, アップモード
// 3. Watchdog Timer割り込み
WDTCTL = WDT_ADLY_1000; // 1000[ms]間隔
IE1 |= WDTIE; // WDT割り込み有効
// 4. SD16_A割り込み
SD16CTL |= SD16REFON; // 内部リファレンス有効
SD16CCTL0 |= SD16IE; // 変換完了割り込み
// 5. USI割り込み
USICTL1 |= USIIE; // USI割り込み有効
復帰時間
| パラメータ | 条件 | VCC | 標準値 | 単位 | 説明 |
|---|---|---|---|---|---|
| tDCO,LPM3/4 | DCO 1MHz | 3V | 1.5 | μs | DCOクロックウェイクアップ時間 |
| tCPU,LPM3/4 | DCOCLK使用時 | - | 1/fMCLK + tClock,LPM3/4 | - | CPU起動時間 |
※注意
- LPM0 / LPM1からの復帰
- DCOが動作中のため即座に実行可能
- LPM2 / LPM3からの復帰例
- DCOが停止している場合、約1.5[us]の起動時間が必要
- LPM4からの復帰
- DCO起動 + クロック安定化が必要
ステータスレジスタ(SR)によるLPM制御
LPM制御ビット
| ビット | 名称 | 機能 |
|---|---|---|
| bit 4 | CPUOFF | CPU停止 |
| bit 5 | OSCOFF | 水晶発振器停止 |
| bit 6 | SCG0 | システムクロックジェネレータ 0制御 |
| bit 7 | SCG1 | システムクロックジェネレータ 1制御 |
各LPMモードのビット設定
// 各LPMのステータスレジスタビット設定
// LPM0 : CPUのみ停止、MCLK停止、ACLK / SMCLK動作
#define LPM0_bits (CPUOFF)
// LPM1 : CPU停止、MCLK停止、ACLK / SMCLK動作、DCO DC gen条件付き停止
#define LPM1_bits (CPUOFF + SCG0)
// LPM2 : CPU / MCLK / SMCLK / DCO停止、DC gen動作、ACLK動作
#define LPM2_bits (CPUOFF + SCG1)
// LPM3: CPU / MCLK / SMCLK / DCO / DCジェネレータ停止、ACLKのみ動作
#define LPM3_bits (CPUOFF + SCG1 + SCG0)
// LPM4: 全クロック停止
#define LPM4_bits (CPUOFF + SCG1 + SCG0 + OSCOFF)
割り込みからの復帰制御
// 割り込みハンドラ内での復帰制御
// スタック上のSRをそのまま復帰した後、何らかの処理を行い、元のLPMに戻る
// (何も指定しない場合のデフォルト動作)
// アクティブモードへ遷移
__bic_SR_register_on_exit(LPM3_bits); // LPMビットをクリア
// 別のLPMへ遷移 (例: LPM3からLPM0へ)
__bic_SR_register_on_exit(LPM3_bits); // 一旦クリア
__bis_SR_register_on_exit(LPM0_bits); // LPM0をセット
LPMモード別の復帰可能な割り込み
| LPMモード | 動作クロック | 使用可能な割り込みソース | 典型的な消費電流 (VCC = 2.2[V], 25[℃]) |
|---|---|---|---|
| LPM0 | ACLK, SMCLK動作 MCLK停止 |
Timer_A (ACLK/SMCLKソース) SD16_A USI (SPI/I2C) Watchdog Timer (ACLK/SMCLKソース) 外部割り込み (P1IE, P2IE) |
65[uA] (typ) |
| LPM1 | ACLK, SMCLK動作 MCLK停止 DCO DCジェネレータ 条件付き停止 |
Timer_A (ACLK/SMCLKソース) SD16_A USI (SPI/I2C) Watchdog Timer (ACLK/SMCLKソース) 外部割り込み (P1IE, P2IE) |
65[uA] (typ) |
| LPM2 | ACLK動作 DCOのDCジェネレータ動作 |
Timer_A (ACLKソースのみ) Watchdog Timer (ACLKソースのみ) 外部割り込み (P1IE, P2IE) |
22[uA] (typ) |
| LPM3 | ACLKのみ動作 | Timer_A (ACLKソースのみ) Watchdog Timer (ACLKソースのみ) 外部割り込み (P1IE, P2IE) |
0.7[uA] (typ, LFXT1) 0.5[uA] (typ, VLO) |
| LPM4 | 全クロック停止 | 外部割り込み (P1IE, P2IE) リセット (RST/NMI) NMI割り込み (NMIIE) |
0.1[uA] (typ) |
|
※注意
| |||
復帰方法のサンプルコード
例1 : LPM0 / LPM1からの復帰
SMCLKが動作しているため、SMCLKベースのタイマやペリフェラルが使用可能である。
DCOが動作中のため、高速復帰が可能である。
65[uA]程度と比較的消費電力が高い。
// LPM0からの復帰例
// Timer_Aを使用した定期起床とSD16_A測定
#include <msp430f2013.h>
volatile unsigned int sd16_result = 0;
// Timer_A0 CCR0割り込みサービスルーチン
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
// SD16_Aを起動
SD16CCTL0 |= SD16SC; // サンプリング開始
// LPM0のまま待機 (SD16_A割り込みで復帰)
}
// SD16_A割り込みサービスルーチン
#pragma vector=SD16_VECTOR
__interrupt void SD16_ISR(void)
{
sd16_result = SD16MEM0; // SD16_A結果を取得
// 閾値チェック
if(sd16_result > 0x8000) // 閾値超過
{
P1OUT |= BIT0; // LED点灯
// アクティブモードへ遷移
__bic_SR_register_on_exit(LPM0_bits);
}
else
{
P1OUT &= ~BIT0; // LED消灯
// LPM0に戻る (デフォルト動作)
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // WDT停止
// クロック設定
BCSCTL1 = CALBC1_1MHZ; // DCO = 1[MHz]
DCOCTL = CALDCO_1MHZ;
BCSCTL3 |= LFXT1S_2; // ACLK = VLO (〜12[kHz])
// GPIO設定
P1DIR |= BIT0; // P1.0 LED出力
P1OUT &= ~BIT0; // LED初期化
// Timer_A設定 (100[ms]周期)
TACCTL0 = CCIE; // CCR0割り込み有効
TACCR0 = 1200; // 100[ms] (VLO 12[kHz])
TACTL = TASSEL_1 + MC_1 + TACLR; // ACLK, アップモード, クリア
// SD16_A設定
SD16CTL = SD16REFON + SD16SSEL_1; // リファレンスON, SMCLK
SD16CCTL0 = SD16SNGL + SD16IE + SD16DF; // シングル、割り込み、2の補数
SD16INCTL0 = SD16INCH_0; // A0入力
SD16AE = SD16AE0; // A0アナログ有効
// LPM0へ移行 (CPU停止、SMCLK動作)
// SMCLKがSD16_Aで必要なため、LPM0を使用
__bis_SR_register(LPM0_bits + GIE);
// アクティブモード処理 (閾値超過時)
while(1)
{
__delay_cycles(1000000); // 1秒待機
P1OUT ^= BIT6; // 別のLEDをトグル
// 再びLPM0へ
__bis_SR_register(LPM0_bits + GIE);
}
}
例2 : LPM2 / LPM3からの復帰
この電力モードは、ACLK (32.768[kHz] または VLO) のみ動作する。
SMCLKベースのペリフェラルは停止しているため、使用不可である。
0.5~22[uA]程度で、低消費電力である。
定期的にウェイクアップするようなタイマアプリケーションに最適な電力モードである。
// LPM3からの復帰例
// 定期的にウェイクアップしてセンサデータを送信
#include <msp430f2013.h>
volatile unsigned char send_flag = 0;
volatile unsigned int wake_count = 0;
// Timer_A0 CCR0割り込みサービスルーチン
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
wake_count++;
// 10秒間隔 (10回ウェイクアップごと) にデータ送信
if(wake_count >= 10)
{
wake_count = 0;
send_flag = 1;
// アクティブモードへ遷移 (USI送信のため)
__bic_SR_register_on_exit(LPM3_bits);
}
// それ以外はLPM3に戻る (デフォルト)
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // WDT停止
// クロック設定
BCSCTL1 = CALBC1_1MHZ; // DCO = 1[MHz] (アクティブ時用)
DCOCTL = CALDCO_1MHZ;
BCSCTL3 |= LFXT1S_2; // ACLK = VLO (〜12[kHz])
// GPIO設定
P1DIR |= BIT0 + BIT6; // LED出力
P1OUT &= ~(BIT0 + BIT6);
// 未使用ピンを出力に設定 (消費電力削減)
P1DIR = 0xFF;
P1OUT = 0x00;
P2DIR = 0xFF;
P2OUT = 0x00;
// 使用するピンのみ再設定
P1DIR |= BIT0 + BIT6; // LED
// USI設定 (SPIマスターモード)
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // ポート有効、マスター
USICTL1 |= USIIE; // 割り込み有効
USICKCTL = USIDIV_1 + USISSEL_2; // SMCLK/2
USICTL0 &= ~USISWRST; // USI解放
// Timer_A設定 (1秒周期)
TACCTL0 = CCIE; // CCR0割り込み有効
TACCR0 = 12000; // 1秒 (VLO : 〜12[kHz])
TACTL = TASSEL_1 + MC_1 + TACLR; // ACLK, アップモード
__enable_interrupt(); // 全割り込み有効
while(1)
{
// LPM3へ移行 (CPU, DCO, MCLK, SMCLK停止、ACLKのみ動作)
__bis_SR_register(LPM3_bits);
// タイマ割り込みで起床後、ここから実行再開
if(send_flag)
{
send_flag = 0;
P1OUT ^= BIT0; // LED点滅 (起床確認)
// センサデータ送信 (USI SPIモード)
unsigned char data[] = {0xAA, 0x55, 0x12, 0x34};
unsigned char i;
for(i = 0; i < sizeof(data); i++)
{
USISRL = data[i]; // データセット
USICNT = 8; // 8ビット送信
while(!(USICTL1 & USIIFG)); // 送信完了待ち
USICTL1 &= ~USIIFG; // フラグクリア
}
__delay_cycles(10000); // 待機
P1OUT ^= BIT0; // LED消灯
}
}
}
例3 : LPM4からの復帰
この電力モードは、全クロック停止 (最低消費電力 : 0.1[uA] typ) する。
外部割り込み (ポート) のみで復帰可能である。
タイマを使用しないため、外部イベント待ち専用の電力モードである。
バッテリー駆動の長期スリープに最適なモードとなる。
// LPM4からの復帰例
// ボタン押下でウェイクアップして、処理完了後は再びLPM4へ移行する例
#include <msp430f2013.h>
volatile unsigned char button_pressed = 0;
volatile unsigned int task_count = 0;
// Port1割り込みサービスルーチン
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR(void)
{
// チャタリング対策用ディレイ
__delay_cycles(50000); // 約50[ms] (DCO起動後)
// P1.3ボタン割り込み処理
if(P1IFG & BIT3)
{
P1IFG &= ~BIT3; // 割り込みフラグクリア
// ボタンが押下されたままかどうかを確認
if(!(P1IN & BIT3))
{
button_pressed = 1;
task_count++;
// アクティブモードへ遷移
__bic_SR_register_on_exit(LPM4_bits);
}
}
}
void perform_task(void)
{
unsigned int i;
// タスク実行中LED点灯
P1OUT |= BIT0;
// 何らかの処理を実行 (例 : データ記録、通信等)
for(i = 0; i < 5; i++)
{
P1OUT ^= BIT6; // P1.6 LED点滅
__delay_cycles(500000); // 約500[ms]
}
// タスク完了
P1OUT &= ~(BIT0 + BIT6); // 全LED消灯
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // WDT停止
// クロック設定 (ウェイクアップ後に使用)
BCSCTL1 = CALBC1_1MHZ; // DCO = 1[MHz]
DCOCTL = CALDCO_1MHZ;
// LED設定
P1DIR |= BIT0 + BIT6; // P1.0, P1.6 LED出力
P1OUT &= ~(BIT0 + BIT6); // LED初期化
// ボタン設定 (P1.3)
P1DIR &= ~BIT3; // P1.3入力
P1REN |= BIT3; // プルアップ/ダウン有効
P1OUT |= BIT3; // プルアップ
P1IES |= BIT3; // 立下りエッジ (ボタン押下)
P1IFG &= ~BIT3; // 割り込みフラグクリア
P1IE |= BIT3; // P1.3割り込み有効
// 未使用ピンを出力Lowに設定 (消費電力最小化)
P1DIR |= ~(BIT3); // P1.3以外を出力
P1OUT &= BIT3; // P1.3プルアップ以外はLow
P2DIR = 0xFF; // P2全て出力
P2OUT = 0x00; // P2全てLow
// 起動時LED点滅 (デバッグ用)
P1OUT |= BIT0 + BIT6;
__delay_cycles(1000000); // 1秒
P1OUT &= ~(BIT0 + BIT6);
__enable_interrupt(); // 全割り込み有効
while(1)
{
// LPM4へ移行 (全クロック停止、最低消費電力)
// 注意 : タイマは使用不可、外部割り込みのみ
__bis_SR_register(LPM4_bits);
// ボタン割り込みで起床後、ここから実行再開
if(button_pressed)
{
button_pressed = 0;
// タスク実行
perform_task();
// タスク回数表示 (P1.0のLED点滅)
unsigned int i;
for(i = 0; i < task_count; i++)
{
P1OUT |= BIT0;
__delay_cycles(200000);
P1OUT &= ~BIT0;
__delay_cycles(200000);
}
__delay_cycles(1000000); // 1秒待機
}
// 再びLPM4へ (ループ継続)
}
}
省電力設計
未使用ピン
浮遊入力は消費電力を増加させるため、全ての未使用ピンを出力にして、信号をLowに設定する。
// 未使用ピンを全て出力Lowに設定
P1DIR = 0xFF; // 全て出力
P1OUT = 0x00; // 全てLow
P2DIR = 0xFF;
P2OUT = 0x00;
// その後、使用するピンのみ再設定
P1DIR &= ~BIT3; // P1.3を入力に戻す
P1OUT |= BIT3; // プルアップ有効
クロックソース選択
| クロックソース | 周波数 | 消費電流 | 用途 |
|---|---|---|---|
| LFXT1 (水晶) | 32.768[kHz] | 低 (0.7[uA] in LPM3) | 高精度タイマ |
| VLO | 〜12[kHz] | 極低 (0.5[uA] in LPM3) | 低精度タイマ、最低消費電力 |
| DCO | 1〜16[MHz] | 高 | アクティブモード処理 |
// LPM3での最低消費電力設定
BCSCTL3 |= LFXT1S_2; // ACLK = VLO (~12[kHz])
// または高精度タイマが必要な場合
// 32.768[kHz]水晶を使用
// XIN/XOUTピンに水晶を接続 (MSP430F2013ではP2.6/P2.7)
BCSCTL1 &= ~XTS; // LF mode
BCSCTL3 &= ~(LFXT1S1 | LFXT1S0); // 32.768kHz crystal
BCSCTL1 |= XCAP_1; // 内部負荷容量 ~6pF
ペリフェラルの選択的使用
LPM3 / LPM4では以下に示すペリフェラルが使用可能である。
- GPIO (外部割り込み)
- Timer_A (ACLKソース)
LPM3 / LPM4では以下に示すペリフェラルは使用不可となる。
- SD16_A (SMCLKが必要)
- USI (SMCLKが必要)
- ウォッチドッグタイマ (インターバルモード、SMCLKソース時)
LPMモードの比較表
| モード | CPU | MCLK | SMCLK | DCO | DCジェネレータ | ACLK | 消費電流 (VCC = 2.2[V]) |
主な用途 |
|---|---|---|---|---|---|---|---|---|
| Active | 動作 | 動作 | 動作 | 動作 | 動作 | 動作 | 220[uA] @ 1[MHz] | 通常処理 |
| LPM0 | 停止 | 停止 | 動作 | 動作 | 動作 | 動作 | 65[uA] | ペリフェラル動作待ち |
| LPM1 | 停止 | 停止 | 動作 | 条件付 | 条件付 | 動作 | 65[uA] | 同上 (DCO未使用時) |
| LPM2 | 停止 | 停止 | 停止 | 停止 | 動作 | 動作 | 22[uA] | タイマ動作 |
| LPM3 | 停止 | 停止 | 停止 | 停止 | 停止 | 動作 | 0.5〜0.7[uA] | 定期起床 (超低消費) |
| LPM4 | 停止 | 停止 | 停止 | 停止 | 停止 | 停止 | 0.1[uA] | 外部イベント待ち (最低消費) |
トラブルシューティング
LPMから復帰しない場合
- 割り込み有効化を確認する。
- GIEビット
__enable_interrupt()または LPMマクロに+GIE
- 個別の割り込み許可ビット
- 例: P1IE, TACCTL0のCCIE
- GIEビット
- クロックソースを確認する。
- LPM3 / LPM4ではACLKが必要である。(VLO または LFXT1設定済みかどうか)
- LPM4ではタイマは使用不可である。
- 割り込みフラグのクリア
- ポート割り込みフラグ (P1IFG, P2IFG) をクリアする。
消費電力が高い場合
- 浮遊入力の確認
- 全ピンが確定状態 (出力 または プルアップ / プルダウン付き入力)
- ペリフェラルの停止確認
- 未使用のペリフェラルを無効化する。
- 外部回路の確認
- LED等の外部負荷を確認する。
- プルアップ / プルダウン抵抗の電流を確認する。
- SMCLKクロックソース変更前の遅延 (Errata SYS15)
- SMCLKソースをDCOからVLOまたはLFXT1に切り替えた直後にLPM3/LPM4に入る場合、最低4クロックサイクルの遅延が必要
DCOが起動しない場合 (LPM3 / LPM4復帰後)
- キャリブレーション値の確認
BCSCTL1 = CALBC1_1MHZ;DCOCTL = CALDCO_1MHZ;
- 復帰時間の確保
- DCO起動に約1.5[us]必要
- RSELビット変更時の注意 (Errata BCL12)
- RSELx > 13から< 12への変更、または< 12から> 13への変更時にDCOが停止する可能性がある
- 中間周波数 (RSEL=13) を経由して変更することを推奨
MSP430F2013固有の注意事項
- LFXT1はLFモードのみサポート
- MSP430F20xxファミリーではLFXT1のHFモード (高周波モード) は使用不可
- 32.768[kHz]水晶またはVLOのみ使用可能
- メモリ容量の制限
- Flash: 2KB + 256B (Info Memory)
- RAM: 128B
- コードサイズの最適化が重要
- SD16_Aの使用
- ADC10ではなく16ビットシグマデルタADC (SD16_A) を使用
- 高分解能だが変換時間がADC10より長い
- USI通信
- USCI (UART機能付き) ではなくUSI (SPI/I2Cのみ)
- UART通信が必要な場合は、タイマを使用したソフトウェアUARTを実装