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チカチカは終了です。 |