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;
}
前回との共通部分
- initializeMCU()の中の、WDTCTL, BCSCTL3, P1DIR, TACCR0 の設定は一緒です。
- main()は _BIS_SR(GIE); 以外は一緒です。
タイマAの割り込みの種類
タイマAの割り込みは2種類あります。 一つはTACCR0一致割り込みで、もう一つはその他いろいろ割り込み(?) です。今回使うのは簡単な前者ですが、ここでは両方(簡単に) 説明しておきます。
タイマA TACCR0 一致割り込み関数の書き方
interrupt(TIMERA0_VECTOR) interruptTimerA0(void)
{
P1OUT ^= BIT6;
}
割り込みの有効化
TACCTL0 |= CCIE; // enable interrupt