LPC810でArduino API互換環境eXodusinoを使うまとめ
8ピンDIP LPC810でArduinoライクな開発をする
Cortex-M0/M0+向けArduino API互換環境eXodusinoはLPC81xシリーズに対応開始しました。
ここでは、8ピン DIPバッケージLPC810で使う方法を取り上げます。
- LPCXpresso IDEのダウンロード
- スイッチマトリクスツールのダウンロード
- eXodusinoのダウンロード
- スイッチマトリクスツールでペリフェラルが使うIOピンを指定する
- eXodusinoプロジェクトにコピー
- マイコンへの書き込み
- eXodusinoのLPC810M021F用プログラムのビルド方法
基本的な使い方は以前に書いたまとめとほぼ一緒です。
Arduino API互換環境eXodusinoをLPC1114 DIPで使うまとめ - Lynx-EyEDの電音鍵盤 新館
今回はスイッチマトリクスツール関連が新たに加わっています。
■必要なもの
- PC
- LPCXpresso IDE ver5.0.12以上
- LPC810M021F(DIPのLPC810マイコン)
- LPC-Link か USB-UART(プログラム書き込みに使う)
(1) LPCXpresso IDEの用意
インストール方法はCQのページから
LPCXpresso IDEのインストール
LPCXpresso IDEダウンロードは(要ログイン)
Home Page | LPCXpresso, powered by Code Red Technologies
ここではLPCXpressoの詳細設定を取り扱うことは致しません。ダウンロード後、無事起動できる事を確認してください。
(2) スイッチマトリクスツールのダウンロード
LPC81xはSPIやUARTやI2CなどのIOピンを電源以外のほぼ全てのピンから自由に割り当てる事が出来ます。
たとえばSPI0は以下のように指定します
/* SPI0_MOSI */ // PIO0_14 -> MOSI (LSB) /* SPI0_MISO */ // PIO0_6 -> MISO /* SPI0_SSEL */ // not in use LPC_SWM->PINASSIGN4 = 0xffff060eUL;
でも、このように手作業で書くのは面倒ですし、GUIツールに任せた方がよいので以下のツールの力を借ります。(ダウンロードにログインは不要)
NXP Switch Matrix Tool for LPC800 | www.LPCware.com
(3) eXodusinoのダウンロード
eXodusino[エクソダシノ]とは簡単に言うとArduinoの記述をCortex-M0/M0+に理解させるための手段です。
現状でLPC81xで動作しているのは以下の機能です
- Serial
- SPI (一部未実装)
- 割り込みを除くGPIOの機能
- delay
- millis
ここからダウンロードできます。
lynxeyed-atsu/eXodusino · GitHub
(図:この部分の「ZIP」とかいてあるボタンをクリック)
ダウンロード後、解凍すると「lynxeyed-atsu-eXodusino-(数字)」という謎フォルダ名になってしまうので、「exodusino」(鍵かっこ含まず)という名前に変更する。
これをLPCXpresso IDEの作業用ディレクトリに移動など、作業しやすい場所に移動してください。
LPCXpresso IDEを起動します
QuickStartウィンドウの[Import Existing Projects]を選択し、先ほど移動したexodusinoフォルダを指定してください。
インポートが完了するとProject Explorerウィンドウに下図のような構成でeXodusinoプロジェクトが展開されます。
ここでLPCXpresso IDEの必要最小限の設定はおしまいです。
(4) スイッチマトリクスツールでIOピンを指定する
ダウンロードして来たスイッチマトリクスツールのjarファイルを起動します。Mac OSXの場合はダブルクリックで起動するはずですが、起動しない場合は、ターミナル.appで
java -jar Switch\ Matrix\ Tool\ -\ LPC8xx\ ver1\ 20121210.jar
のように起動します。
今回は8pinのLPC810M021FN8を選択します。
ペリフェラルが使うIOを指定します。今回はUARTとLED点滅用のGPIOピンを使おうと思います。
UARTはTXとRXの2ピンが必要です。どのピンにも指定可能ですが、今回は
PIO0_4 -> UART0_TXD PIO0_0 -> UART0_RXD
に指定します。USART0をクリックします
次にPIO0_4をクリックし、ポップアップから、U0_TXDを選択します。
同様にPIO0_0をクリックし、ポップアップから、U0_RXDを選択します。
これで設定は完了です。ウィンドウ下部のswm.cをクリックし、SwitchMatrix_Init()関数の中身を貰ってきます。右クリックではコピーメニューが出ませんので、ショートカットキー[Ctrl + C]でコピーできます。
(5) eXodusinoプロジェクトにコピー
/eXodusino/src/core/device_dependent/lpc800/swm.cpp にSwitchMatrix_Init()関数の中身をペーストします。
(6)マイコンへの書き込み
ここではリンクを紹介するにとどめます。NXPのfacebookからですが、
- LPCXpressoからの書き込み方法
- flash magicを使う、シリアルからの書き込み方法
が紹介されています。
「LPC810 (= DIP8_ARMマイコン) + LPCXpresso」で,Lチカ (LED点滅)プログラムを動かしてみる | Facebook
LPC810 (= DIP8_ARMマイコン) のフラッシュへの書き込みをシリアルインターフェースで行なう | Facebook
(7)eXodusinoのLPC810M021F用プログラムのビルド方法
今回のビルド条件は以下のようなものです
デバイス:LPC810F021F
LPCXpressoから直接書き込み
マイコンの内蔵クロックで動作
LPCXpresso IDEのProject Explorer → eXodusinoプロジェクトトップフォルダ右クリック → Propertiesを選択
[C/C++ Build]の項目を選択 → Manage Configurations... → [LPC810M_F021F_DIP8]を選択 → [Set Active]
[OK] → [Apply] → [OK]
これで完了です。*1
Arduinoのスケッチに相当するファイルが[eXodusinoプロジェクトトップ] → [src] → [user_application.cpp]です。
USB-UARTのRX,TXをLPC810のPIO0_4,PIO0_0にそれぞれ接続するとPCからシリアルコンソールで確認する事が出来ます。また、PIO0_1にLEDを接続すると、1秒周期で点滅します。
#include <libmary.h> void setup(void) { pinMode(P0_1, OUTPUT); Serial.begin(9600); Serial.println("Start.."); } void loop(void) { digitalWrite(P0_1,HIGH); delay(500); digitalWrite(P0_1,LOW); delay(500); Serial.println(millis() / 1000, DEC); }
一旦、メニューのProject → Cleanを選択し、その後、Project → Build Allします。
エラーが出現しなければマイコンへ書き込みをします。
[eXodusinoプロジェクトフォルダ]/LPC810M_021F_DIP8/eXodusino.axf
が書き込むバイナリです。
■配線図
書き込み後、以下の回路でテストしました。
3.3V電源で駆動してください。
シリアルから9600baudで
1秒ごとに経過時間が表示され、LEDが1秒間隔で点滅します。
実験風景
番外編:LPC812も使ってみる
いつものフラクタルを描いてみました。今回はLPCXpresso LPC812とMAPLEボードを使っています。一部、OLEDの配線の関係でジャンパーを飛ばしました。
詳細はまた、別記事にて。
*1:DIP8パッケージを選択した場合、eXodusinoはInternal RCで動作するようコンフィグレーションします