lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

LPC810でArduino API互換環境eXodusinoを使うまとめ

8ピンDIP LPC810でArduinoライクな開発をする

Cortex-M0/M0+向けArduino API互換環境eXodusinoはLPC81xシリーズに対応開始しました。
f:id:Lynx-EyED:20130403134145p:plain
ここでは、8ピン DIPバッケージLPC810で使う方法を取り上げます。

  1. LPCXpresso IDEのダウンロード
  2. スイッチマトリクスツールのダウンロード
  3. eXodusinoのダウンロード
  4. スイッチマトリクスツールでペリフェラルが使うIOピンを指定する
  5. eXodusinoプロジェクトにコピー
  6. マイコンへの書き込み
  7. 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
f:id:Lynx-EyED:20120901141814p:plain
(図:この部分の「ZIP」とかいてあるボタンをクリック)
ダウンロード後、解凍すると「lynxeyed-atsu-eXodusino-(数字)」という謎フォルダ名になってしまうので、「exodusino」(鍵かっこ含まず)という名前に変更する。
これをLPCXpresso IDEの作業用ディレクトリに移動など、作業しやすい場所に移動してください。

LPCXpresso IDEを起動します
f:id:Lynx-EyED:20120901142635p:plain
QuickStartウィンドウの[Import Existing Projects]を選択し、先ほど移動したexodusinoフォルダを指定してください。
インポートが完了するとProject Explorerウィンドウに下図のような構成でeXodusinoプロジェクトが展開されます。
f:id:Lynx-EyED:20130403093504p:plain
ここでLPCXpresso IDEの必要最小限の設定はおしまいです。



(4) スイッチマトリクスツールでIOピンを指定する
ダウンロードして来たスイッチマトリクスツールのjarファイルを起動します。Mac OSXの場合はダブルクリックで起動するはずですが、起動しない場合は、ターミナル.appで

java -jar Switch\ Matrix\ Tool\ -\ LPC8xx\ ver1\ 20121210.jar 

のように起動します。
今回は8pinのLPC810M021FN8を選択します。
f:id:Lynx-EyED:20130403121554p:plain

ペリフェラルが使うIOを指定します。今回はUARTとLED点滅用のGPIOピンを使おうと思います。
UARTはTXとRXの2ピンが必要です。どのピンにも指定可能ですが、今回は

PIO0_4 -> UART0_TXD
PIO0_0 -> UART0_RXD

に指定します。USART0をクリックします
f:id:Lynx-EyED:20130403123902p:plain


次にPIO0_4をクリックし、ポップアップから、U0_TXDを選択します。
f:id:Lynx-EyED:20130403124257p:plain



同様にPIO0_0をクリックし、ポップアップから、U0_RXDを選択します。
f:id:Lynx-EyED:20130403124521p:plain

これで設定は完了です。ウィンドウ下部のswm.cをクリックし、SwitchMatrix_Init()関数の中身を貰ってきます。右クリックではコピーメニューが出ませんので、ショートカットキー[Ctrl + C]でコピーできます。
f:id:Lynx-EyED:20130403130416p:plain



(5) eXodusinoプロジェクトにコピー
/eXodusino/src/core/device_dependent/lpc800/swm.cpp にSwitchMatrix_Init()関数の中身をペーストします。
f:id:Lynx-EyED:20130403130741p:plain



(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を選択
f:id:Lynx-EyED:20120901152810p:plain
[C/C++ Build]の項目を選択 → Manage Configurations... → [LPC810M_F021F_DIP8]を選択 → [Set Active]
[OK] → [Apply] → [OK]
f:id:Lynx-EyED:20130403132220p:plain

これで完了です。*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
が書き込むバイナリです。


■配線図
書き込み後、以下の回路でテストしました。
f:id:Lynx-EyED:20130403150358p:plain
3.3V電源で駆動してください。

シリアルから9600baudで
1秒ごとに経過時間が表示され、LEDが1秒間隔で点滅します。
f:id:Lynx-EyED:20130330131831p:plain

実験風景
f:id:Lynx-EyED:20130330124030j:plain


番外編:LPC812も使ってみる

いつものフラクタルを描いてみました。今回はLPCXpresso LPC812とMAPLEボードを使っています。一部、OLEDの配線の関係でジャンパーを飛ばしました。
f:id:Lynx-EyED:20130318232303j:plain
詳細はまた、別記事にて。

*1:DIP8パッケージを選択した場合、eXodusinoはInternal RCで動作するようコンフィグレーションします