買って写真だけ撮って放っていた TIのLM4F120 LaunchPad で遊んでみる。

TIのStellarisシリーズはいつの間にかTiva Cシリーズに変わっていて、このボードに載っているLM4F120H5QRはTM4C1233H6PMになったらしく、LM4F120H5QRのデータシートはTIのサイトで見つけることができなかった。(ネットには落ちているけど)
対照表がこのページのTiva C Series ARM Cortex-M Microcontrollers にあるなんてわからないよ!
TI謹製のCCSを使うと何の問題もないのだけれど、開発環境ばかり増えるのも嫌なのでEclipse+OpenOCDかInsight+OpenOCDでやりたいと思って放っておいたのだが、教材に使う魂胆でOpenOCDで使ってみることにした。
OpenOCD 0.7.0 がICDIに対応したというのでDLしてみたが、LM4F120 LaunchPadは対応していないようだ。ところが、OpenOCDのサイトにあるUser's GUIDEはrelease 0.8.0-devになっていて、このドキュメントにはLM4F120LaunchPadのICDIもサポートされると書いてある。
OpenOCD 0.8.0-devを探していると、ねむいさんのページにあったのでさっそくDLしてみると、tcl/boardにek-lm4f120xl.cfgがあった。(ねむいさんに感謝)
例によってRAMで動くプログラムを作ってみた。
STM32vlDiscoveryに載っているSTM32F100RBT6BのRAMは8k、トラ技おまけのLPC1114FN28のRAMは4kだが、このボードに載っているLM4F120H5QRのRAMは余裕の32kである。
ねむいさんのページにあったLM4F120H5QRのkickstartを参考にして、リンカスクリプト(lib/linker/lm4f120xxx.ld)を編集してすべてのセクションをRAMに配置するようにして、(">ROM"を">RAM"にするだけの手抜き) makeするとmain.sym、main.binができる。
ek-lm4f120xl.cfgを使ってOpenOCDを起動するとICDI経由ターゲットのLM4F120H5QRが見える。
openocd -s ./tcl -f bord/ek-lm4f120xl.cfg
C:\OpenOCD\OpenOCD-0.8.0>openocd.exe -s ./tcl -f board/ek-lm4f120xl.cfg Open On-Chip Debugger 0.8.0-dev-00131-gf4943ac-dirty (2013-08-30-09:42) 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 |
telnetでlocalhost:4444に接続して、main.binをロードして実行する。
Open On-Chip Debugger > version Open On-Chip Debugger 0.8.0-dev-00131-gf4943ac-dirty (2013-08-30-09:42) > reset halt target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x0000334c msp: 0x20001000 > load_image C:\\LM4F120H5QR_Launchpad\\main.bin 0x20000000 bin 2340 bytes written at address 0x20000000 downloaded 2340 bytes in 0.078000s (29.297 KiB/s) > mdw 0x20000000 2 0x20000000: 20008000 20000281 > reg sp 0x20008000 sp (/32): 0x20008000 > reg pc 0x20000280 pc (/32): 0x20000280 > mww 0xE000ED08 0x20000000 > resume > |
LM4F120H5QRのFlashは0000:0000-0004:0000、RAMは2000:0000-20000:8000に配置してあるので、スタックポインタ(SP)は、20000:8000を、プログラムカウンタ(PC)はmain.symからResetHandlerのアドレスを探すか、main.binをロードして2000:0000に書かれているアドレスを、mww 0x20000000で調べて指定する。(2000:0280)
reg sp 0x20008000
reg pc 0x20000280
LM4F120は割り込みベクタテーブルはVTABLEレジスタ(E000:ED08)で設定する。
VTABLEレジスタにRAMの開始アドレス2000:0000を書くと割り込みベクタがRAMに配置されるらしい。
(Tiva™ TM4C1233H6PM Microcontroller (identical to LM4F120H5QR) DATA SHEET tm4c1233h6pm.pdf P154 Register 68: Vector Table Offset (VTABLE), offset 0xD08 参照)
mww 0xE000ED08 0x20000000
そして
resumeするとPC=0x20000280 ResetHandlerから実行される。
フラッシュメモリの内容をシリアルにダンプするプログラムを書いてみた。
Welcome to LM4F120XL LaunchPad dump program !! F : dump Flash area R : dump RAM area H : Help
address +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0000:0000 00 10 00 20 4D 33 00 00 BB 2A 00 00 8F 11 00 00 ... M3...*...... 0000:0010 07 27 00 00 07 27 00 00 07 27 00 00 00 00 00 00 .'...'...'...... 0000:0020 00 00 00 00 00 00 00 00 00 00 00 00 07 27 00 00 .............'.. 0000:0030 07 27 00 00 00 00 00 00 07 27 00 00 81 27 00 00 .'.......'...'.. 0000:0040 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:0050 07 27 00 00 BD 16 00 00 07 27 00 00 07 27 00 00 .'.......'...'.. 0000:0060 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:0070 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:0080 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:0090 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00A0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00B0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00C0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00D0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00E0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'.. 0000:00F0 07 27 00 00 07 27 00 00 07 27 00 00 07 27 00 00 .'...'...'...'..
|
もう少し大きなプログラムを書いてみよう。
最近のコメント