lbed

2013/10/13からのアクセス回数 3848

lbedクラスライブラリでARM学習基板で実験した結果、 このようなクラスライブラリの実用性を実感することができました。

そこで、デバッガを搭載してDSP命令、PFUを搭載したTiのStellaris LM4F120 LaunchPad 評価ボード(以下LM4F120 PaunchPadと記す)を使ってLPC以外のマイコンでもlbedの ようなクラスライブラリが有効であることをみてみましょう。

PinNamesの設定

LM4F120 PaunchPadでは、J1, J3, J4, J2のコネクターから40本のピンがでています。

今回は、J1の1番ピンについて、P1_1とピン番号を付け、PA0のようなレジスター番号については PA_0のようにピン番号を命名しました。

ピンの配置とレジスターの関係は以下の通りです。

layout.png

LPCXpresso6へのプロジェクト作成

今回lbedをLM4F120 PaunchPadに移植するにあたって一番苦労したのが、LPCXpressoにLPC以外のMPUの プロジェクトを作成することでした。 CPU Settingでm4を選択し、試行錯誤でようやくLM4F120 PaunchPad用のC++のプロジェクトができました。

TestLEDのLED点滅で動作確認

最初の動作確認は、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_LaunchPad.png

LM4F120 PaunchPadへのダウンロード

アプリケーションの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が起動したことが確認できます。

Zylin CDTのインストール

次に、LPCXpressoにZylin CDTのプラグインをインストールします。 手順については、arm/開発環境のセットアップを参照してください。

RunメニューからDebug Configurations…を選択し、Zylin Embedded debug(Native)に新規でLBED_LM4F120_MAIN Debugを以下の様に作成します。

th_debug_config1.jpg

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で止まった状態になります。 これは、停止したときのアドレスなので、場合によって異なるアドレスとなります。

halt_at.png

ここで、RunメニューのResumeを選択すると、無事main関数の最初でとまります。

stop_at_main.png

このままデバッグすることできますし、RunメニューのResumeを押すとLEDの点滅を繰り返します。 6行の左端をダブルクリックすると、6行にブレークポイントセットされ、 途中でプログラムを止めることもできます。

TestLCDで文字列を表示

mbedライクなクラスライブラリlbedを使う理由は、mbedの豊富なクラスライブラリを利用できる点に あります。

試しに、LPC1343への移植で使ったTextLCDを使ってLCDにテキストを表示してみます。

オレンジボードに接続したLCDには、以下の様に接続します。

CNピン名信号名LM4F LaunchPadピン
p24EP1_9:PA6
p26RSP1_10:PA7
p27DB4P2_10:PA2
p28DB5P2_9:PA3
p29DB6P2_8:PA4
p30DB7P1_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=回数を表示します。

LCD_Setting.png

最新のソース

LM4F120 LaunchPad版のソースは、Githubの以下のURLにあります。

コメント

選択肢 投票
おもしろかった 0  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。


(Input image string)

*1 LEDを変数のように代入したり、参照するだけで制御できてしまう、これがmbedのクラスライブラリの威力ですね。
*2 -sオプションでtclディレクトリを指定していますが、openocdをmake installでインストールしておけば、この指定は不要です。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc