MSP430班(2006/05/06) タイマA その1

次にタイマAを使ってみます。TIのサンプルプログラムを参考に進めます。


タイマAにもいろいろなモードがあるようですが、まずは最も基本的なところから。タイマがカウントアップしていって、ある指定値に達すると割込みが発生し、タイマは0からカウントアップし直すモードを使います。

タイマのクロックはSMCLKです。実はよくわかっていません。おいおい調べましょう。

プログラムの構造自体は、前回と同じようなものなので省略。ただし省電力モードとして、サンプルと同じくLPM0を使っています。前回はLPM3で、この違いが何かも、後のお楽しみということで・・・(まだわかっていません)

#include  <msp430x12x2.h>

// タイマA割込みによりLEDを点滅する
// クロックはSMCLK、Upモードで、コンペア結果が一致すると汎用割込み発生
// LPM0を使用する

int xxx = 0;

void main(void)
{
        P1DIR |= 0x04;              // LEDポートP1.2を出力に設定
        P1OUT = 0;                  // ポート初期化
        TACCTL0 = CCIE;             // コンペア一致時割込み
        TACCR0 = 50000;
        TACTL = TASSEL_2 + MC_1;    // SMCLK, up mode

        xxx = 0;
        for (;;) {
                _BIS_SR(LPM0_bits + GIE);
                if (xxx == 1) {
                        xxx = 0;
                        P1OUT ^= 0x04;
                }
        }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
        _BIC_SR_IRQ(LPM0_bits);     // LPMを解除
        xxx = 1;
}

// スタートアップルーチンから呼び出される初期化処理
void __low_level_init(void)
{
        WDTCTL = WDTPW + WDTHOLD;   // WDT停止
}

わからないことは多々ありますが、とりあえずこの単純なプログラムは動作しました。感想は、点滅周期が前回とずいぶん違うな〜、という何とも情けないものですが・・・


参考文献

  1. 小倉康司, MSP430リファレンスガイド, 技術評論社, 2005
  2. MSP430F12x2サンプルプログラム fet120_ta_02.c

ホーム 特殊工作室 MSP430班