MSP430開発入門講座(5) タイマ割り込み

今回のソース

今回は前回と同じようにタイマAを使ってLED(P1.6)を点滅させます。 前回 はタイマのコンペア機能を使って自動的に点滅させましたが、 今回はタイマ割り込みによる手動(?)点滅です。 以下のソースの半分以上は 前回と共通なので、 説明がわからなかったら 前回の方もご参照ください。

// tutorial04.c  by Yagshi 2011
#include <io.h>
#include <signal.h>

#define kPeriod      6000       // 12000 / 6000 = 2 [Hz]

void initializeMCU(void)
{
  WDTCTL = WDTPW + WDTHOLD;     // shut up the dog
  BCSCTL3 |= LFXT1S_2;          // Select VLO for ACLK
  // setup PORT1
  P1DIR |= BIT6;
  // setup TIMER_A
  TACTL = TASSEL__ACLK + ID_0 + MC__UP;
  TACCR0 = kPeriod;
  TACCTL0 |= CCIE;              // enable interrupt
}

interrupt(TIMERA0_VECTOR) interruptTimerA0(void)
{
  P1OUT ^= BIT6;
}

int main(void)
{
  initializeMCU();
  _BIS_SR(GIE);
  for(;;) _BIS_SR(SCG1 | SCG0 | CPUOFF); // goes in LPM3
  return 0;
}
    

前回との共通部分

タイマAの割り込みの種類

タイマAの割り込みは2種類あります。 一つはTACCR0一致割り込みで、もう一つはその他いろいろ割り込み(?) です。今回使うのは簡単な前者ですが、ここでは両方(簡単に) 説明しておきます。

タイマA TACCR0 一致割り込み関数の書き方

interrupt(TIMERA0_VECTOR) interruptTimerA0(void)
{
  P1OUT ^= BIT6;
}

割り込みの有効化

  TACCTL0 |= CCIE;              // enable interrupt