MSP430 LaunchPadでLチカ
MSP430について
MSP430はTI(Texas Instruments)の16bit低消費電力マイコンです。
LaunchPadは一昔前までは500円くらいで買えたんですが、現在(2015.1月)は1000円くらいするようですね。。。
開発環境(IDE)
TIのCCS(code composer studio)を使います。TIのアカウントとったら誰でもダウンロードできると思います。(16KBコードサイズ制限付き)
eclipseベースなのでとっつきやすいかと思います。
IDEが重いと感じた場合、PCのメモリに余裕があったらeclipse.iniファイルの
--launcher.XXMaxPermSizeとか-vmargsとかの値を適当に256mとか512mとかすると早くなるはずです。
Lチカ(タイマー割り込み)
ターゲットのCPUはMSP430G2553にします。
LaunchPadには赤LEDと緑LEDが実装されているので、タイマー割り込みを使ってこのLEDを制御してみます。
回路図を見ると緑LEDがP1.0、赤LEDがP1.6につながっていることが分かります。
プログラムソースは以下のようになります。
#include <msp430g2553.h> /* MSP430G2553用のヘッダファイル */ #include <stdint.h> /* uint8_t とか定義してあるヘッダファイル */ void main(void) { WDTCTL = WDTPW +WDTHOLD; /* ウォッチドッグタイマーを止める*/ /*----- クロックキャリブレーション -----*/ if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); } /* 1Mhz */ BCSCTL1 = CALBC1_1MHZ; /* Set range */ DCOCTL = CALDCO_1MHZ; /* Set DCO step + modulation */ /*--------------------------------------------*/ P1DIR |= BIT6 + BIT0; /* P1.0とP1.6を出力に設定 */ P1OUT &= ~(BIT6 + BIT0); /* 最初は両方のLEDを消灯 */ CCR0 = 1000; /* たぶんTACTLで設定されるタイマーのカウントMAX値 */ CCR2 = 1000; /* たぶんTACTLで設定されるタイマーのカウントとのコンペアマッチ */ TACTL = TASSEL_2 + MC_3 + TAIE; /* SMCLK, up-down mode */ CCTL2 = CCIE; /* タイマー割り込みスタート */ __bis_SR_register(LPM0_bits + GIE); /* LPM0モード, 割り込み許可 */ } /*! ************************************************** * @brief タイマー割り込みの処理 ******************************************************/ #pragma vector=TIMER0_A1_VECTOR __interrupt void Timer_A(void) { switch( TA0IV ) { static uint8_t toggle_span; case 2: break; // CCR1 not used //------------------------------------// // 2msec interrupt //------------------------------------// case 4: toggle_span++; if ( toggle_span > 100 ) { toggle_span = 0; if ( P1OUT&BIT6 ) { P1OUT &= ~BIT6; P1OUT |= BIT0; } else { P1OUT &= ~BIT0; P1OUT |= BIT6; } } break; // CCR2 case 10: break; // overflow } }
これでLEDが約0.2秒毎、交互に点滅するはずです!!