OpenOCD TI-ICDI + LM4F120 LaunchPad
買って写真だけ撮って放っていた 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から実行される。
フラッシュメモリの内容をシリアルにダンプするプログラムを書いてみた。
|
もう少し大きなプログラムを書いてみよう。
« 開発改善コンクール | トップページ | 知的生産の技術 »
「JTAG」カテゴリの記事
- STM32F0-Discovery + OpenOCD(2014.07.30)
- versaloon(2014.02.03)
- usb_jtag + カメレオンUSB FX2(2013.09.16)
- OpenOCD TI-ICDI + LM4F120 LaunchPad(2013.09.03)
- JTAGkey Clone(2012.08.04)
「CPUボード」カテゴリの記事
- 久々の物欲(2022.05.21)
- stcgal <質問に答える>(2021.02.21)
- micro:bitで跳び上がると表示する名札 <ウケ狙い>(2020.11.18)
- micro:bit <BLEが乗った低価格マイコンボード>(2020.09.15)
- Google日本語モールス入力(2020.05.01)
コメント