前回、PIC24FJ64GB002でdelayを使用したLチカを行いましたが、今回はTimerの使い方を覚えたいためTimerを使ってLEDの点滅制御をやりたいと思います。
基本はPeripheral Libraryの関数、マクロを使用します。 Peripheral LibraryはXC16_v1.25には.hファイルが何故か同梱されてないため使えません。v1.24以前のバージョンでコンパイルします。
⊿1: Peripheral Librariesを個別でインストールすれば最新のコンパイラーでもコンパイルできました。
個別に Peripheral Librariesをインストールする方法はこちら
詳細マニュアルはインストール先によりますが、だいたいここら辺りにあります。
\Microchip\xc16\v1.24\docs\periph_libs\Microchip PIC24F Peripheral Library.chm
もっと詳しく知りたい場合はこれを見ましょう。
ソースです▼
#define USE_AND_OR /**/ #include<ports.h> /*ポートbit操作マクロの定義*/ #include<timer.h> /*timer機能*/ #include<comparator.h> /*PWM機能*/ #include<PwrMgnt.h> unsigned char F; /*Timer1割込み*/ void __attribute__ ((interrupt, no_auto_psv)) _T2Interrupt(void) { T2_Clear_Intr_Status_Bit; /* タイマー割り込みクリア */ if (F == 0) { mPORTBSetBits(IOPORT_BIT_15); } if (F == 0xff) { mPORTBClearBits(IOPORT_BIT_15); } F = ~F; } int main(void) { AD1PCFG = 0xffff; /*全てのポートをデジタルI/O */ CLKDIV = 0x0000; /*クロック 32MHz*/ mPORTBOutputConfig(IOPORT_BIT_15); /*PORTB RB15を出力設定*/ mPORTBWrite(0); /*PORTB Low出力*/ /*Timer2割込み有効*/ ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_1); /**/ OpenTimer2(T2_ON | T2_PS_1_128 , 0xf424); while (1) { mPWRMGNT_GotoIdleMode(); } }
「ConfigIntTimer2」でTimer2機能を有効化します。「T2_INT_ON/OFF」で有効/無効「T2_INT_PRIOR_*」で優先順位を決めてます。
次に「OpenTimer2」をスタートさせます。引数の「T2_ON/OFF」でタイマーモジュールのON/OFF「T2_PS_1_**」でプリスケーラ―を設定。プリスケーラ―は1/8/64/256。カンマ後でピリオドカウントを指定してます。
今回はプリスケーラ:128、カウントは62500で500ms毎のタイマー割込みに設定してます。この他「OpenTimer2」関数で32bitモードや内/外部発信機の設定等ができます。
周辺機能の細かい設定は多数関数の引数で準備されてます。詳細はマニュアルで確認しましょう。
void __attribute__ ((interrupt,no_auto_psv))…がTimer割込みで呼び出される関数。割込みクリアーして処理を記述します。
必要最低限な機能で今回Timer割り込みをやってみました。関数使用すれば割と簡単に使うことができると思います。
コメント