LEDチカチカ(LPC810) †構成 †トランジスタ技術2014年2月号付属のLPC810とプリント基板のセットを使用しますが、これにはLEDがつくようになっています。 LPC810のピンアサインは、LPC800シリーズのページの下の方にあるリンクの、「LPC81xユーザーマニュアル」に載っています。 プロジェクト †まずは、新規プロジェクトを作りましょう。 MCUはLPC810を選び、CMSIS Core libraryは、CMSIS_CORE_LPC8xxが選択されていることを確認してください。 MTBの設定はチェックを外して無効にしておきます。 Code Read Protectについては、コードを読み出されないようにするためのセキュリティ設定ですので、ここも外しておいて構いません。 プロジェクトが作成されたら、右クリックからプロパティを開きます。 ここまでで、プロジェクトの設定は終わりですので、反映させて一旦ビルドをかけてみましょう。 ソースコード †以下、ソースコード。 // TODO: insert other include files here #include "lpc8xx_gpio.h" 次に、指定時間waitするためのカウンタをグローバル変数として用意し、そのカウンタをインクリメントする割り込み関数、実際のwaitを行う関数をそれぞれ用意します。 // TODO: insert other definitions and declarations here
volatile uint32_t msTicks = 0;
void SysTick_Handler(void) {
msTicks++;
}
void systick_delay (uint32_t delayTicks) {
uint32_t currentTicks = msTicks;
while ((msTicks - currentTicks) < delayTicks);
}
そして、メイン関数は以下のようになります。 int main(void) {
// TODO: insert code here
SystemCoreClockUpdate();
GPIOInit();
GPIOSetDir(0, 1, 1);
GPIOSetBitValue(0, 1, 1);
SysTick_Config(SystemCoreClock / 1000);
while(1) {
systick_delay(500);
GPIOSetBitValue(0, 1, 0);
systick_delay(500);
GPIOSetBitValue(0, 1, 1);
}
return 0;
}
ソースコード解説 †最初にSystemCoreClockUpdateという関数を呼んでいますが、これはクロックの変更をした際には、この関数を呼んで、CMSISのグローバル変数であるSystemCoreClockを更新するという働きがあるようです。 今回のペリフェラルドライバライブラリには、前のようなPINSELがないので、ピンの設定は飛ばします。 GPIOInitでGPIOの初期化をし、GPIOSetDirでLEDが接続されているPIO0_1のピンを、出力に設定します。 GPIOSetDirやGPIOSetBitValueは、実際には最初の引数の0(ポート番号)は使用されていません。 次に、SysTick_Configで、1msの割り込みを発生させます。 無限ループの中身は、500msのwaitを行うサブ関数を呼んで、1秒周期の点滅になるようにしています。 実行・デバッグ †ソースが出来て、ビルドが通ったら、いよいよ実行です。 ちなみに、LPC-Link2のジャンパは、RedLinkとしてLPCXpressoで使うためにJP1をOpenに、基板にLPC-Link2から電源を供給するためにJP2をCloseにします。 繋がったら、QuickStartPanelのDebugを押します。 無事に実行できると、自動的にmain関数の先頭でbreakがかかります。 Resume(F8)を押せば、LEDが点滅します。 この辺りも前と同じですね。 クロックの設定 †デバッガで停止中に、SysTick_Configの引数に指定している、SystemCoreClockにカーソルをあててみて下さい。 LPC810は30MHzでの動作が可能ですが、デフォルトでは12MHzでの動作となっています。 こちらの詳細につきましては、以下のblogがとてもわかりやすいと思います。 人と技術のマッシュアップ-LPCXpressoとLPC800-MAXでマイコンを学ぶ(その5:PLLを使用してクロックアップ!) 以上で、LPC810版のLEDチカチカは終了です。 |