メイン・ルーチンと言うとmain()が普通だがJN516Xは違っている。通常起動なのかウェイクアップ起動なのかを判別するためらしい。
【基本のメイン・ルーチン】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <jendefs.h> #include <AppHardwareApi.h> #ifdef __cplusplus #undef PUBLIC #define PUBLIC extern "C" #endif /* 普通に起動したときのメイン・ルーチン */ PUBLIC void AppColdStart(void) { /* SDK-APIの初期化 */ u32AHI_Init(); /* メイン・ループ */ while (1) { /* 処理コード */ } } /* ウェイクアップ・イベントで起動したときのメイン・ルーチン */ PUBLIC void AppWarmStart(void) { /* u32AHI_Init()の前に行う処理を記述する */ /* コールドスタートを呼び出す */ AppColdStart(); } |
jendefs.hはSDKの基本的な型などの定義。AppHardwareApi.hはハードウェアの基本的なAPIが定義されている。何をするにも最低この二つは必要なので何も考えずにインクルードしよう。
これでメイン・ルーチン編は完了!って、これだけだとすこし寂しすぎるので定番のLチカまでいきましょうか。
【Lチカ】
LED+抵抗を接続したピンをvAHI_DioSetDirection()で出力モードに設定しvAHI_DioSetOutput()でON/OFFするだけ。簡単!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <jendefs.h> #include <AppHardwareApi.h> #ifdef __cplusplus #undef PUBLIC #define PUBLIC extern "C" #endif #define LED 18 /* 普通に起動したときのメイン・ルーチン */ PUBLIC void AppColdStart(void) { uint32 i; /* SDK-APIの初期化 */ u32AHI_Init(); /* LEDピンの出力に設定にする */ vAHI_DioSetDirection(0, 1 << LED); /* メイン・ループ */ while (1) { /* LEDピンをHIGHにする */ vAHI_DioSetOutput(1 << LED, 0); /* 暇つぶし */ for (i = 0; i < 0xFFFFFFFFUL; ++i) continue; /* LEDピンをLOWにする */ vAHI_DioSetOutput(0, 1 << LED); /* 暇つぶし */ for (i = 0; i < 0xFFFFFFFFUL; ++i) continue; } } /* ウェイクアップ・イベントで起動したときのメイン・ルーチン */ PUBLIC void AppWarmStart(void) { /* u32AHI_Init()の前に行う処理を記述する */ /* コールドスタートを呼び出す */ AppColdStart(); } |
これでLチカの完成!。でも目ではチカチカしてるのがわからなかったのでオシロで確認してみると...
見事にLチカしてるけど、暇つぶしに42億回ほどループっても1.5usしか時間がかからないのか...ていうか、またつまらない物を撮ってしまった気がする。(笑)
でも、なんか不自然な気が...16MHzクロックにしては妙に速すぎる...どうやらコンパイラの最適化により暇つぶしループが除去されてしまうようだ。ループ回数に関係なく同じ結果になってしまう。この件はまたあとで...
次回は、Lチカにも必要な時間計測の予定。
【関連投稿】
NXP JN516X (TWELITE) をプログラミングする(開発環境の構築)
NXP JN516X (TWELITE) をプログラミングする(メイン・ルーチン)
NXP JN516X (TWELITE) をプログラミングする(TICKTIMER)
NXP JN516X (TWELITE) をプログラミングする(UART)
NXP JN516X (TWELITE) をプログラミングする(SYSTEM)
NXP JN516X (TWELITE) をプログラミングする(GPIO)
NXP JN516X (TWELITE) をプログラミングする(TIMER)
NXP JN516X (TWELITE) をプログラミングする(ALARM)
NXP JN516X (TWELITE) をプログラミングする(WAKETIMER)
NXP JN516X (TWELITE) をプログラミングする(WATCHDOG)
NXP JN516X (TWELITE) をプログラミングする(I2C)
NXP JN516X (TWELITE) をプログラミングする(SPI)
NXP JN516X (TWELITE) をプログラミングする(ADC)
NXP JN516X (TWELITE) をプログラミングする(COMPARATOR)
NXP JN516X (TWELITE) をプログラミングする(CLOCK)
NXP JN516X (TWELITE) をプログラミングする(BROWNOUT)
NXP JN516X (TWELITE) をプログラミングする(PULSCOUNTER)
NXP JN516X (TWELITE) をプログラミングする(INFRARED)
NXP JN516X (TWELITE) をプログラミングする(RANDOM-GENERATOR)
NXP JN516X (TWELITE) をプログラミングする(FLASH)
NXP JN516X (TWELITE) をプログラミングする(EEPROM)
NXP JN516X (TWELITE) をプログラミングする(WPAN)
NXP JN516X (TWELITE) をプログラミングする(Eclipse-CDT+MWSTAGE)
NXP JN516X (TWELITE) をプログラミングする(乗算と除算)
NXP JN516X (TWELITE) をプログラミングする(マルチタスク)
NXP JN516X (TWELITE) をプログラミングする(フラッシュ・プログラマー)
NXP JN516X (TWELITE) をプログラミングする(OTA UPDATE)
NXP JN516X (TWELITE) をプログラミングする(TWELITE CUE/MC3630)
NXP JN516X (TWELITE) をプログラミングする(LED)
NXP JN516X (TWELITE) をプログラミングする(AES)
NXP JN516X (TWELITE) をプログラミングする(Downloads)