
LEDフリーラン点滅
システムタイマ(Timer System Service)の
コールバック関数を
使った場合
(→プロジェクトファイル(Harmony Ver.2.04版) ダウンロード)
| LEDのフリーラン点滅を システムタイマ(Timer System Service)を使って行う場合の例を以下に説明します。 |
|
| <仕様> ・ PIC32MZを使用する ・ LED1は1sec ON、1sec OFFを繰り返す。LED2、LED3、LED4は、20msec ON、20msecOFFを繰り返す ・ 動作クロックは外部に24MHzの水晶発振器を接続しこれを使用する ・ 時間制御は、Harmonyのタイマシステムサービスを使うこと。 ・ 関数SYS_TMR_ObjectCreate( ) と SYS_TMR_CallbackPeriodic( )を使用のこと。 |
|
| <回路図>( → 回路図のPDFファイル)
|
|
<外観>PIC32MZ評価ボード(→購入方法)を使った実験品の外観です。
<動作結果>( → 動画:1080pのHD動画を見ることができます。)
LED2、LED3、LED4 動作波形
1.0V/div 10msec/div

<解説>
■ MHC
■ options
■ pin settings
■ app.cに、青字部分を追加します。
➀システムタイマのハンドルなどを定義します
SYS_TMR_HANDLE handle1000msec;
SYS_TMR_HANDLE handle20msec;
int LED;
int LED2;
➁ システムタイマのコールバック関数を定義します。
void Test_Callback ( uintptr_t context, uint32_t currTick )
{
if(LED2 == 0)
{
LED2 = 1;
LATDbits.LATD4 = 1;
LATAbits.LATA15 = 1;
LATAbits.LATA14 = 1;
}
else
{
LED2 = 0;
LATDbits.LATD4 = 0;
LATAbits.LATA15 = 0;
LATAbits.LATA14 = 0;
}
}
void Timer_Callback ( uintptr_t context, uint32_t currTick )
{
if(LED == 0)
{
LED = 1;
LATGbits.LATG15 = 1;
}
else
{
LED = 0;
LATGbits.LATG15 = 0;
}
}
③APP_Tasks()の中でSYS_TMR_ObjectCreate( )関数でコールバック関数を定義します。
APP_Initialize ( )関数の中で定義しても、コンパイルはできますが動作はしません。
handle20msec = SYS_TMR_ObjectCreate ( 20, 1, Test_Callback, SYS_TMR_FLAG_PERIODIC
); //ここで初期化
//非繰り返しの場合:SYS_TMR_FLAG_SINGLE
handle1000msec = SYS_TMR_CallbackPeriodic(1000, 1, Timer_Callback); //ここで初期化
//非繰り返しの場合:SYS_TMR_CallbackSingle()
以下、app.c