2013/10/13からのアクセス回数 4073
lbedクラスライブラリでARM学習基板で実験した結果、 このようなクラスライブラリの実用性を実感することができました。
そこで、デバッガを搭載してDSP命令、PFUを搭載したTiのStellaris LM4F120 LaunchPad 評価ボード(以下LM4F120 PaunchPadと記す)を使ってLPC以外のマイコンでもlbedの ようなクラスライブラリが有効であることをみてみましょう。
LM4F120 PaunchPadでは、J1, J3, J4, J2のコネクターから40本のピンがでています。
今回は、J1の1番ピンについて、P1_1とピン番号を付け、PA0のようなレジスター番号については PA_0のようにピン番号を命名しました。
ピンの配置とレジスターの関係は以下の通りです。
今回lbedをLM4F120 PaunchPadに移植するにあたって一番苦労したのが、LPCXpressoにLPC以外のMPUの プロジェクトを作成することでした。 CPU Settingでm4を選択し、試行錯誤でようやくLM4F120 PaunchPad用のC++のプロジェクトができました。
最初の動作確認は、LEDをチカチカするTestLEDです。
LM4F120 PaunchPadには、3色LEDと2個のタクトスイッチがついています。 PinNames.hでは以下の様に定義しています。
TestLED.cppは、以下の様になります。
#include "lbed.h" int main(void) { DigitalOut myled(LEDG); while(1) { myled = ! myled; wait_ms(1000); } }
あまりに単純で驚かないでください。*1
アプリケーションのLM4F120 PaunchPadへのダウンロードには、OpenOCDを使用しました。 詳しくは、arm/Stellaris LM4F120 LaunchPad評価ボードを参照してください。
ターミナルでOpenOCDのディレクトに移動し、以下のコマンドを入力します。 *2
$ ./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が起動したことが確認できます。
次に、LPCXpressoにZylin CDTのプラグインをインストールします。 手順については、arm/開発環境のセットアップを参照してください。
RunメニューからDebug Configurations…を選択し、Zylin Embedded debug(Native)に新規でLBED_LM4F120_MAIN Debugを以下の様に作成します。
Debuggerタグでは、GDB debuggerをセットしますが、Browser… ボタンから /Applications/lpcxpresso_6.0.2_151/lpcxpresso/tools/bin/arm-none-eabi-gdb を選択します。
Commandsタグでは、Initialize commandsに以下のテキストをコピー&ペーストしてください。
target remote localhost:3333 monitor reset halt load monitor reset init thbreak main
これで、Debugボタンを押すとmyvectorsで止まった状態になります。 これは、停止したときのアドレスなので、場合によって異なるアドレスとなります。
ここで、RunメニューのResumeを選択すると、無事main関数の最初でとまります。
このままデバッグすることできますし、RunメニューのResumeを押すとLEDの点滅を繰り返します。 6行の左端をダブルクリックすると、6行にブレークポイントセットされ、 途中でプログラムを止めることもできます。
mbedライクなクラスライブラリlbedを使う理由は、mbedの豊富なクラスライブラリを利用できる点に あります。
試しに、LPC1343への移植で使ったTextLCDを使ってLCDにテキストを表示してみます。
オレンジボードに接続したLCDには、以下の様に接続します。
CNピン名 | 信号名 | LM4F LaunchPadピン |
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も以下の様にします。
#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=回数を表示します。
皆様のご意見、ご希望をお待ちしております。