MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MSP430G2553 - 電力モードのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MSP430G2553 - 電力モード
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 電力モードは、マイコンの消費電力を管理するための仕組みである。<br> アプリケーションの要件に応じて、適切な電力モードを選択することにより、バッテリー駆動のデバイスにおける動作時間を延ばすことができる。<br> <br> * アクティブモード *: マイコンがフル機能で動作しているモードである。 *: 全てのクロックが動作し、CPUと周辺モジュールは通常の速度で動作する。 *: 消費電力が最も高くなる。 *: <br> * 低電力モード *: マイコンの一部の機能を停止または低速化することで、消費電力を抑えるモードである。 *: 低電力モードにはいくつかのレベルがあり、停止する機能によって分類される。 *: 一般的に、低電力モードのレベルが上がるほど、消費電力は低くなるが、復帰に時間がかかる場合がある。 *: <br> * スリープモード *: CPUを停止して、いくつかの周辺モジュールも停止するモードである。 *: 割り込みやリセットにより、スリープモードから復帰する。 *: 低電力モードの一種と考えることができる。 *: <br> * ディープスリープモード *: ほとんどの機能を停止して、最小限の消費電力で動作するモードである。 *: 外部割り込みやリセットにより、ディープスリープモードから復帰する。 *: 復帰時に、メモリの内容が失われる場合がある。 *: <br> * 遷移と復帰 *: 電力モード間の遷移は、レジスタの設定や特定の命令で行う。 *: 割り込みやリセットにより、低電力モードからアクティブモードに復帰する。 *: 復帰時に、停止していた機能を再初期化する必要がある場合がある。 <br> 電力モードを効果的に使用するには、アプリケーションの要件を分析、および、必要な機能と応答時間を考慮して、適切なモードを選択する必要がある。<br> また、割り込みや周辺モジュールの設定を適切に行い、復帰時の処理を正しく実装することが重要である。<br> <br><br> == MSP430G2553の動作モード == MSP430G2553は、1つのアクティブモードと5つのソフトウェア選択可能な低消費電力動作モードを備えている。<br> 割り込みイベントにより、いずれの低消費電力モードからでもウェイクアップ、要求を処理して、割り込みからの復帰時に低消費電力モードに戻ることができる。<br> <br> 6つの動作モードをソフトウェアで設定することができる。<br> <br> * アクティブモード (AM) *: CPUと全てのクロックが動作しているモードである。 *: 消費電力が最も高くなる。 *: <br> * 低消費電力モード0 (LPM0) *: CPUおよびMCLKは停止するが、ACLK、SMCLK、DCOは動作し続ける。 *: CPUの消費電力を抑えることができる。 *: <br> * 低電力モード1 (LPM1) *: CPU、MCLKが停止する。 *: DCOのDCジェネレータにおいては、アクティブモードでDCOが使用されていない場合は停止する。 *: ACLK、SMCLK、MCLKは動作し続ける。 *: <br> * 低電力モード2 (LPM2) *: CPU、DCO、MCLK、SMCLKが停止する。 *: DCOのDCジェネレータ、ACLKは動作し続ける。 *: <br> * 低電力モード3 (LPM3) *: CPU、DCO、MCLK、SMCLKが停止する。 *: ACLKのみ動作し続ける。 *: <br> * 低電力モード4 (LPM4) *: CPU、MCLK、SMCLK、ACLK、DCOのDCジェネレータが停止する。 *: 水晶発振器も停止する。 *: 消費電力が最も低くなる。 <br><br> == 電力モードの設定 == ==== 状態レジスタ (SR) を使用する場合 ==== 状態レジスタ (Status Register, SR) は、マイコンの現在の状態を示すレジスタである。<br> MSP430マイコン全般では、SRは16ビットのレジスタであり、各ビットが特定の状態を表している。<br> <br> 電力モードに必要な各ビットについて、以下に示す。<br> * CPUの停止 (4ビット目) *: SRのCPUOFFビットを<code>1</code>にする。 *: <br> * オシレータの停止 (5ビット目) *: SRのOSCOFFビットを<code>1</code>にする。 *: <br> * システムクロックジェネレータ (DCOおよびSMCLK) の停止 (6ビット目) *: SRのSCG0ビットを<code>1</code>にする。 *: <br> * システムクロックジェネレータ (DCO、SMCLK、MCLK) の停止 (7ビット目) *: SRのSCG1ビットを<code>1</code>にする。 <br> ==== __bis_SR_register関数を使用する場合 ==== <code>__bis_SR_register</code>関数を使用して、状態レジスタ (SR) の該当ビットを<code>1</code>にする。<br> <br> ただし、割り込みが発生すると、省電力モードから復帰する。<br> 省電力モードを使用する場合は、必要なクロックと周辺モジュールを適切に設定して、不要なものは停止させることが重要である。<br> また、割り込みを適切に設定して、省電力モードから復帰できるようにする必要がある。<br> <syntaxhighlight lang="c"> // LPM3に移行 __bis_SR_register(LPM3_bits); </syntaxhighlight> <br><br> == 低消費電力モードからの復帰方法 == MSP430G2553では、割り込みイベントによって全ての低消費電力モード(LPM)から自動的に復帰する。 割り込み処理後、元のLPMに自動的に戻ることも、アクティブモードに遷移することも可能である。 <br> * 復帰トリガー *: 有効化された割り込み (ポート、タイマ、通信等) * 復帰時間: ** LPM0 / LPM1 **: 即座 (DCO動作中) ** LPM2 / LPM3 **: 約1.5[us] (DCO起動時間) ** LPM4 **: 約1.5[us] + クロック安定時間 * 復帰後の動作 ** 割り込みハンドラで <code>__bic_SR_register_on_exit()</code> を呼ぶことにより、アクティブモードを継続できる。 ** 何も行わない場合は、自動的に元のLPMに復帰する。 * モード選択指針: ** LPM0 / LPM1 **: ペリフェラル動作が必要 (56[uA]) ** LPM2 / LPM3 **: 定期起床タイマーアプリ (0.5〜22[uA]) ** LPM4 **: 外部イベント待機 (0.1[uA]、最低消費電力) <br> ==== 復帰の基本メカニズム ==== ===== 割り込みによる復帰プロセス ===== 有効な割り込みが発生すると、以下に示すプロセスで自動的に復帰する。<br> <br> # CPUが起動する。 # 必要なクロックが再開される。 # 割り込みハンドラへジャンプする。 # スタックにPC、SRが保存される。 # 割り込み処理を実行する。 # RETI命令でスタックからSR復帰 (LPMへの復帰 / 継続が決定) <br> ===== 復帰可能な割り込みソース ===== 以下に示す割り込みでLPMから復帰できる。<br> <br> * ポート割り込み (P1, P2) *: 外部信号による起動に最適 * Timer_A割り込み (TA0, TA1) *: 定期的な起動に使用 * ウォッチドッグタイマ割り込み *: インターバルタイマとして使用 * ADC10割り込み (MSP430G2x53のみ) *: ADコンバータ変換完了 * USCI割り込み (UART / SPI / I2C) *: 通信イベント * Comparator_A+割り込み *: アナログ比較 <br> <syntaxhighlight lang="c"> // LPMから復帰可能な割り込みソースの設定例 // 1. ポート割り込み (P1, P2) P1IE |= BIT3; // P1.3の割り込み有効化 P1IES |= BIT3; // 立下りエッジで割り込み P1IFG &= ~BIT3; // フラグクリア // 2. Timer_A割り込み TA0CCTL0 = CCIE; // CCR0割り込み有効 TA0CCR0 = 32768; // 1秒周期 (ACLK : 32.768[kHz]) TA0CTL = TASSEL_1 + MC_1; // ACLK, アップモード // 3. Watchdog Timer割り込み WDTCTL = WDT_ADLY_1000; // 1000[ms]間隔 IE1 |= WDTIE; // WDT割り込み有効 // 4. ADC10割り込み (MSP430G2x53のみ) ADC10CTL0 |= ADC10IE; // ADC変換完了割り込み // 5. USCI割り込み IE2 |= UCA0RXIE; // UART受信割り込み IE2 |= UCB0RXIE; // I2C/SPI受信割り込み // 6. Comparator_A+割り込み CACTL1 |= CAIE; // コンパレータ割り込み有効 </syntaxhighlight> <br> ==== 復帰時間 ==== <center> {| class="wikitable" ! パラメータ !! 条件 !! VCC !! 標準値 !! 単位 !! 説明 |- | t<sub>DCO,LPM3/4</sub> || DCO 1MHz || 3V || 1.5 || μs || DCOクロックウェイクアップ時間 |- | t<sub>CPU,LPM3/4</sub> || DCOCLK使用時 || - || 1/f<sub>MCLK</sub> + t<sub>Clock,LPM3/4</sub> || - || CPU起動時間 |} </center> <br> <u>※注意</u><br> * LPM0 / LPM1からの復帰 *: DCOが動作中のため即座に実行可能 * LPM2 / LPM3からの復帰例 *: DCOが停止している場合、約1.5[us]の起動時間が必要 * LPM4からの復帰 *: DCO起動 + クロック安定化が必要 <br> ==== ステータスレジスタ(SR)によるLPM制御 ==== ===== LPM制御ビット ===== <center> {| class="wikitable" |+ ステータスレジスタ (SR) のビット構成 ! ビット !! 名称 !! 機能 |- | bit 4 || CPUOFF || CPU停止 |- | bit 5 || OSCOFF || 水晶発振器停止 |- | bit 6 || SCG0 || システムクロックジェネレータ 0制御 |- | bit 7 || SCG1 || システムクロックジェネレータ 1制御 |} </center> <br> ===== 各LPMモードのビット設定 ===== <syntaxhighlight lang="c"> // 各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) </syntaxhighlight> <br> ===== 割り込みからの復帰制御 ===== <syntaxhighlight lang="c"> // 割り込みハンドラ内での復帰制御 // スタック上の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をセット </syntaxhighlight> <br> ==== LPMモード別の復帰可能な割り込み ==== <center> {| class="wikitable" ! LPMモード !! 動作クロック !! 使用可能な割り込みソース !! 典型的な消費電流<br/>(VCC = 2.2[V], 25[℃]) |- | LPM0 || ACLK, SMCLK動作<br/>MCLK停止 || 全ての割り込み || 56[uA] (typ) |- | LPM1 || ACLK, SMCLK動作<br/>MCLK停止 || 全ての割り込み || 56[uA] (typ) |- | LPM2 || ACLK、DCOのDCジェネレータ動作 || ACLKベースのタイマ<br/>外部割り込み || 22[uA] (typ) |- | LPM3 || ACLKのみ動作 || ACLKベースのタイマ<br/>外部割り込み || 0.7[uA] (typ, LFXT1)<br/>0.5[uA] (typ, VLO) |- | LPM4 || 全クロック停止 || 外部割り込みのみ<br/>(ポート、リセット) || 0.1[uA] (typ) |} </center> <br> ==== 復帰方法のサンプルコード ==== ===== 例1 : LPM0 / LPM1からの復帰 ===== SMCLKが動作しているため、SMCLKベースのタイマやペリフェラルが使用可能である。<br> DCOが動作中のため、高速復帰が可能である。<br> <br> 56[uA]程度と比較的消費電力が高い。<br> <br> <syntaxhighlight lang="c"> // LPM0/1からの復帰例 // Timer_Aを使用した定期起床とADC測定 #include <msp430g2553.h> volatile unsigned int adc_result = 0; // Timer_A0 CCR0割り込みサービスルーチン #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0_ISR(void) { // ADC10を起動 (SMCLKを使用) ADC10CTL0 |= ENC + ADC10SC; // サンプリング開始 // LPM0のまま待機 (ADコンバータ割り込みで復帰) } // ADC10割り込みサービスルーチン #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { adc_result = ADC10MEM; // ADC結果を取得 // 閾値チェック if(adc_result > 512) // 閾値超過 { 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 (〜12kHz]) // GPIO設定 P1DIR |= BIT0; // P1.0 LED出力 P1OUT &= ~BIT0; // LED初期化 // Timer_A0設定 (100[ms]周期) TA0CCTL0 = CCIE; // CCR0割り込み有効 TA0CCR0 = 1200; // 100[ms] (VLO 12[kHz]) TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, アップモード, クリア // ADC10設定 ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // 16CLK, ADC ON, 割り込み有効 ADC10CTL1 = INCH_0; // A0入力 ADC10AE0 |= BIT0; // P1.0をアナログ入力に // LPM0へ移行 (CPU停止、SMCLK動作) // SMCLKがADCで必要なため、LPM0を使用 __bis_SR_register(LPM0_bits + GIE); // アクティブモード処理 (ADC閾値超過時) while(1) { __delay_cycles(1000000); // 1秒待機 P1OUT ^= BIT6; // 別のLEDをトグル // 再びLPM0へ __bis_SR_register(LPM0_bits + GIE); } } </syntaxhighlight> <br> ===== 例2 : LPM2 / LPM3からの復帰 ===== この電力モードは、ACLK (32.768[kHz] または VLO) のみ動作する。<br> SMCLKベースのペリフェラルは停止しているため、使用不可である。<br> <br> 0.5~22[uA]程度で、低消費電力である。<br> <br> 定期的にウェイクアップするようなタイマアプリケーションに最適な電力モードである。<br> <br> <syntaxhighlight lang="c"> // LPM3からの復帰例 // 定期的にウェイクアップしてセンサデータを送信 #include <msp430g2553.h> volatile unsigned char send_flag = 0; volatile unsigned int wake_count = 0; // Timer_A0 CCR0割り込みサービスルーチン #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A0_ISR(void) { wake_count++; // 10秒間隔 (10回ウェイクアップごと) にデータ送信 if(wake_count >= 10) { wake_count = 0; send_flag = 1; // アクティブモードへ遷移 (UART送信のため) __bic_SR_register_on_exit(LPM3_bits); } // それ以外はLPM3に戻る (デフォルト) } // USCI_A0 送信完了割り込み #pragma vector=USCIAB0TX_VECTOR __interrupt void USCI_A0_TX_ISR(void) { // 送信完了後、LPM3へ戻る __bis_SR_register_on_exit(LPM3_bits); } 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; // 使用するピンのみ再設定 (上記で設定済み) // UART設定 (アクティブ時に使用) P1SEL |= BIT1 + BIT2; // P1.1=RXD, P1.2=TXD P1SEL2 |= BIT1 + BIT2; UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1[MHz] / 9600 UCA0BR1 = 0; UCA0MCTL = UCBRS0; UCA0CTL1 &= ~UCSWRST; // USCI初期化完了 IE2 |= UCA0TXIE; // TX割り込み有効 // Timer_A0設定 (1秒周期) TA0CCTL0 = CCIE; // CCR0割り込み有効 TA0CCR0 = 12000; // 1秒 (VLO : 〜12[kHz]) TA0CTL = 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点滅 (起床確認) // センサデータ読み取り (仮) unsigned char data[] = "DATA\r\n"; unsigned char i; // UART送信 for(i = 0; i < sizeof(data)-1; i++) { while(!(IFG2 & UCA0TXIFG)); // 送信バッファ空き待ち UCA0TXBUF = data[i]; } __delay_cycles(10000); // 送信完了待ち P1OUT ^= BIT0; // LED消灯 } } } </syntaxhighlight> <br> ===== 例3 : LPM4からの復帰 ===== この電力モードは、全クロック停止 (最低消費電力 : 0.1[uA] typ) する。<br> 外部割り込み (ポート) のみで復帰可能である。<br> <br> <u>タイマを使用しないため、外部イベント待ち専用の電力モードである。</u><br> バッテリー駆動の長期スリープに最適なモードとなる。<br> <br> <syntaxhighlight lang="c"> // LPM4からの復帰例 // ボタン押下でウェイクアップして、処理完了後は再びLPM4へ移行する例 #include <msp430g2553.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 = CALDCO1MHZ; // 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へ (ループ継続) } } </syntaxhighlight> <br><br> == 省電力設計 == ==== 未使用ピン ==== 浮遊入力は消費電力を増加させるため、全ての未使用ピンを出力にして、信号をLowに設定する。<br> <br> <syntaxhighlight lang="c"> // 未使用ピンを全て出力Lowに設定 P1DIR = 0xFF; // 全て出力 P1OUT = 0x00; // 全てLow P2DIR = 0xFF; P2OUT = 0x00; // その後、使用するピンのみ再設定 P1DIR &= ~BIT3; // P1.3を入力に戻す P1OUT |= BIT3; // プルアップ有効 </syntaxhighlight> <br> ==== クロックソース選択 ==== <center> {| class="wikitable" ! クロックソース !! 周波数 !! 消費電流 !! 用途 |- | LFXT1 (水晶) || 32.768[kHz] || 低 (0.7[uA] in LPM3) || 高精度タイマ |- | VLO || 〜12[kHz] || 極低 (0.5[uA] in LPM3) || 低精度タイマ、最低消費電力 |- | DCO || 1〜16[MHz] || 高 || アクティブモード処理 |} </center> <br> <syntaxhighlight lang="c"> // LPM3での最低消費電力設定 BCSCTL3 |= LFXT1S_2; // ACLK = VLO (~12kHz) // または高精度タイマが必要な場合 // 32.768kHz水晶を使用 (LaunchPadでは要配線変更) // R3, R9を除去、R5, R7をショート </syntaxhighlight> <br> ==== ペリフェラルの選択的使用 ==== LPM3 / LPM4では以下に示すペリフェラルが使用可能である。<br> * GPIO (外部割り込み) * Timer_A (ACLKソース) * Comparator_A+ (連続動作モード) * RTC (ACLKソース) <br> LPM3 / LPM4では以下に示すペリフェラルは使用不可となる。<br> * ADC10 (SMCLKが必要) * USCI (SMCLKが必要) * ウォッチドッグタイマ (インターバルモード、SMCLKソース時) <br> ==== 消費電力測定 ==== 例えば、MSP-EXP430G2ET LaunchPadでの消費電流測定の手順を以下に示す。<br> <br> # J101の3V3ジャンパーを外す。 # ジャンパー位置に電流計を接続。 # バックチャネルUARTの影響を考慮する。(J3, J5のジャンパー) # 全てのI/Oを確定状態にする。(浮遊入力なし) <br> ==== LPMモードの比較表 ==== <center> {| class="wikitable" ! モード !! CPU !! MCLK !! SMCLK !! DCO !! DC gen !! ACLK !! 消費電流<br/>(VCC = 2.2[V]) !! 主な用途 |- | Active || 動作 || 動作 || 動作 || 動作 || 動作 || 動作 || 230〜4000[uA] || 通常処理 |- | LPM0 || 停止 || 停止 || 動作 || 動作 || 動作 || 動作 || 56[uA] || ペリフェラル動作待ち |- | LPM1 || 停止 || 停止 || 動作 || 条件付 || 条件付 || 動作 || 56[uA] || 同上 (DCO未使用時) |- | LPM2 || 停止 || 停止 || 停止 || 停止 || 動作 || 動作 || 22[uA] || タイマ動作 |- | LPM3 || 停止 || 停止 || 停止 || 停止 || 停止 || 動作 || 0.5〜0.7[uA] || 定期起床 (超低消費) |- | LPM4 || 停止 || 停止 || 停止 || 停止 || 停止 || 停止 || 0.1[uA] || 外部イベント待ち (最低消費) |} </center> <br><br> == トラブルシューティング == ==== LPMから復帰しない場合 ==== # 割り込み有効化を確認する。 #* GIEビット #*: <code>__enable_interrupt()</code> または LPMマクロに<code>+GIE</code> #* 個別の割り込み許可ビット #*: 例: P1IE, TA0CCTL0のCCIE # クロックソースを確認する。 #* LPM3 / LPM4ではACLKが必要である。(VLO または LFXT1設定済みかどうか) #* LPM4ではタイマは使用不可である。 # 割り込みフラグのクリア #* ポート割り込みフラグ (P1IFG, P2IFG) をクリアする。 <br> ==== 消費電力が高い場合 ==== * 浮遊入力の確認 ** 全ピンが確定状態 (出力 または プルアップ / プルダウン付き入力) * ペリフェラルの停止確認 ** 未使用のペリフェラルを無効化する。 * 外部回路の確認 ** LED等の外部負荷を確認する。 ** プルアップ / プルダウン抵抗の電流を確認する。 <br> ==== DCOが起動しない場合 (LPM3 / LPM4復帰後) ==== * キャリブレーション値の確認 ** <code>BCSCTL1 = CALBC1_1MHZ;</code> ** <code>DCOCTL = CALDCO_1MHZ;</code> * 復帰時間の確保 ** DCO起動に約1.5[uA]必要 <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:MSP430]]
MSP430G2553 - 電力モード
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse