[[lbed]]
#contents
2013/10/13からのアクセス回数 &counter;
[[lbedクラスライブラリでARM学習基板で実験>lbed/08-ARM学習基板で実験]]した結果、
このようなクラスライブラリの実用性を実感することができました。
そこで、デバッガを搭載してDSP命令、PFUを搭載したTiのStellaris LM4F120 LaunchPad
評価ボード(以下LM4F120 PaunchPadと記す)を使ってLPC以外のマイコンでもlbedの
ようなクラスライブラリが有効であることをみてみましょう。
LM4F120用のOpenOCDの作成については、[[arm/Stellaris LM4F120 LaunchPad評価ボード]]を参照して下さい。
** PinNamesの設定 [#q9469b77]
LM4F120 PaunchPadでは、J1, J3, J4, J2のコネクターから40本のピンがでています。
今回は、J1の1番ピンについて、P1_1とピン番号を付け、PA0のようなレジスター番号については
PA_0のようにピン番号を命名しました。
ピンの配置とレジスターの関係は以下の通りです。
&ref(layout.png);
** LPCXpresso6へのプロジェクト作成 [#l8169351]
今回lbedをLM4F120 PaunchPadに移植するにあたって一番苦労したのが、LPCXpressoにLPC以外のMPUの
プロジェクトを作成することでした。
CPU Settingでm4を選択し、試行錯誤でようやくLM4F120 PaunchPad用のC++のプロジェクトができました。
*** TestLEDのLED点滅で動作確認 [#t3e8c3e6]
最初の動作確認は、LEDをチカチカするTestLEDです。
LM4F120 PaunchPadには、3色LEDと2個のタクトスイッチがついています。
PinNames.hでは以下の様に定義しています。
- LEDR : PF1 赤のLED
- LEDB: PF2 青のLED
- LEDG: PF3 緑のLED
- SW1: J4_10
- SW2: J2_4
TestLED.cppは、以下の様になります。
#pre{{
#include "lbed.h"
int main(void) {
DigitalOut myled(LEDG);
while(1) {
myled = ! myled;
wait_ms(1000);
}
}
}}
あまりに単純で驚かないでください。((LEDを変数のように代入したり、参照するだけで制御できてしまう、これがmbedのクラスライブラリの威力ですね。))
&ref(LM4F120_LaunchPad.png);
*** LM4F120 PaunchPadへのダウンロード [#s4253a62]
アプリケーションのLM4F120 PaunchPadへのダウンロードには、OpenOCDを使用しました。
詳しくは、[[arm/Stellaris LM4F120 LaunchPad評価ボード]]を参照してください。
ターミナルでOpenOCDのディレクトに移動し、以下のコマンドを入力します。
((-sオプションでtclディレクトリを指定していますが、openocdをmake installでインストールしておけば、この指定は不要です。))
#pre{{
$ ./openocd-code/src/openocd -s ./openocd-code/tcl/ -f LM4F120XL.cfg
Open On-Chip Debugger 0.8.0-dev-00131-gf4943ac (2013-09-08-17:38)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : ICDI Firmware version: 9270
Info : lm4f120h5qr.cpu: hardware has 6 breakpoints, 4 watchpoints
}}
最後に 4 watchpointsと出ていれば、正常にOpenOCDが起動したことが確認できます。
*** Zylin CDTのインストール [#yfad14a0]
次に、LPCXpressoにZylin CDTのプラグインをインストールします。
手順については、[[arm/開発環境のセットアップ]]を参照してください。
RunメニューからDebug Configurations…を選択し、Zylin Embedded debug(Native)に新規でLBED_LM4F120_MAIN Debugを以下の様に作成します。
&ref(th_debug_config1.jpg);
Debuggerタグでは、GDB debuggerをセットしますが、Browser… ボタンから
/Applications/lpcxpresso_6.0.2_151/lpcxpresso/tools/bin/arm-none-eabi-gdb
を選択します。
Commandsタグでは、Initialize commandsに以下のテキストをコピー&ペーストしてください。
#pre{{
target remote localhost:3333
monitor reset halt
load
monitor reset init
thbreak main
}}
これで、Debugボタンを押すとmyvectorsで止まった状態になります。
これは、停止したときのアドレスなので、場合によって異なるアドレスとなります。
&ref(halt_at.png);
ここで、RunメニューのResumeを選択すると、無事main関数の最初でとまります。
&ref(stop_at_main.png);
このままデバッグすることできますし、RunメニューのResumeを押すとLEDの点滅を繰り返します。
6行の左端をダブルクリックすると、6行にブレークポイントセットされ、
途中でプログラムを止めることもできます。
** TestLCDで文字列を表示 [#kd4c2c72]
mbedライクなクラスライブラリlbedを使う理由は、mbedの豊富なクラスライブラリを利用できる点に
あります。
試しに、LPC1343への移植で使ったTextLCDを使ってLCDにテキストを表示してみます。
オレンジボードに接続したLCDには、以下の様に接続します。
| CNピン名 | 信号名 | LM4F LaunchPadピン |h
| p24 | E | P1_9:PA6 |
| p26 | RS | P1_10:PA7 |
| p27 | DB4 | P2_10:PA2 |
| p28 | DB5 | P2_9:PA3 |
| p29 | DB6 | P2_8:PA4 |
| p30 | DB7 | P1_8:PA5 |
TestLCD.cppも以下の様にします。
#pre{{
#include "lbed.h"
#include "TextLCD.h"
int main(void) {
int count = 0;
DigitalOut myled(LEDG);
TextLCD lcd(PA_6, PA_7, PA_2, PA_3, PA_4, PA_5); // rs, e, d4-7
lcd.print("Hello World!");
while(1) {
lcd.locate(0, 1);
lcd.print("Count=");
lcd.print(count++);
myled = ! myled;
wait_ms(1000);
}
}
}}
実行すると、以下の様にHello World!と表示し、その下にCount=回数を表示します。
&ref(LCD_Setting.png);
** 最新のソース [#s5c7df83]
LM4F120 LaunchPad版のソースは、Githubの以下のURLにあります。
- https://github.com/take-pwave/lbed
** コメント [#h8bd6a64]
#vote(おもしろかった,そうでもない,わかりずらい)
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha