ARM7TDMI

ARM

interface 2009-05付録基板で遊ぶ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/cq-frk-nxp.jpg

  • とりあえず、付録基板を手に入れてみたものの、どうすればよいか分からず途方にくれました。
  • LEDチカチカのHEXファイルは、 interfaceダウンロードページ の2009-4月号第三章のCQ.lzhを用います。
  • ARM基板に書き込むツールはFlashMagicを使います。
    • ボーレートが不明だったのですが、とりあえず230400bpsの設定で書き込めました。マニュアル等では9600bps であるように書かれていて、よくわかっていません。
    • FlashMagic以外では、avrspみたいな書き込みツールlpcspがあるそうです。
  • コンパイラはGNUARMWinARM を使う予定です。interfaceのサンプルはIAR用に書かれていますが、IARは有償です。
    • 30日試用版か32kB制限版は無償ですが、ダウンロード時に個人情報を記入する必要があります。
  • NXP LPC-2388用のヘッダーファイルやサンプルプロジェクトが欲しいのですが・・・どこにあるのか分かりません。

リンク切れてますね。このへん?

目標

短期的なもの

  • WinARMをインストールする。 --- 済み
  • LEDチカチカをWinARMでビルド。--- 済み
  • その他サンプルをWinARMでビルド。 --- 済み

DownLoad: LEDチカチカのWinARM版を用意致しました。


中期目標

  • 簡易的なシリアル接続のmonitor(H8用)を移植する。--- 済み
  • OpenOCDを使ってみたい。
  • NXPのHPにあるHIDサンプルとかUSB仮想COMポートのサンプルをWinARMでビルドしたい。

DownLoad: H8TinymonのWinARM版を用意致しました。


長期的目標

  • オーディオ帯域のオシロ&ロジアナアプリ。
  • 各種USBデバイスを書く練習。
  • PS2キーボードをプロトコル変換して、USBの謎デバイス(?)に接続する。





Installメモ

WinARMから、WinARM_20080331_testing.zip をダウンロード。

C:\> unzip WinARM_20080331_testing.zip
C:\> path %path%;C:\WinARM\bin;C:\WinARM\utils\bin
  • C:\に展開すると、C:\WinARM\ 以下にコンパイラがインストールされる。
  • 実行パスを C:\WinARM\bin と C:\WinARM\utils\bin の両方に通す。
  • ここまではWinAVRとほとんど同じ使い勝手です。
  • コンパイラはarm-elf-gcc ではなく arm-eabi-gcc になります。

参考:ARM gcc バッドノウハウ集

遊び方

  • Makefile中に定義されているgccコマンド名をarm-elf-gcc などから、arm-eabi-gcc のように書き換えます。
  • 普通にMakeして、同じくELMさんのサイトにある、lpcspを使って付録基板にHexを焼きこみます。
  • ブートジャンパーを外してUSBを繋ぎ直すか、基板をリセットします。
  • teraterm等で基板のCOMポートに接続します。ボーレートは230400でOKでした。

'>'プロンプトが出たところで、

>md 0

とやるとメモリーダンプを実行出来ます。

メモリーダンプ以外に、SDカード上のFATファイルをダンプしたりディレクトリを切ったりする便利コマンドが含まれているようです。

ELMさんのファームウェア

  • mp3プレイヤーのタスクと、SDカードの読み出し機能を含む対話型シリアル端末のタスクを asmfunc.S内のタスクディスパッチャーで切り替えている。
  • タスクの登録はStartTask()関数に、関数アドレスとスタックエリアを与えて行っている。
  • タスクのディスパッチはmain()関数内の無限ループ
    	/* Drive threads */
    	for (;;) {
    		DispatchTask(TaskContext[0]);
    		DispatchTask(TaskContext[1]);
    	}
    で行っているようです。
  • タスクの切り替えはタスク内からSleep()関数を呼び出すことで、main()関数のループ内 に戻るようになっています。Sleepの引数が非ゼロの場合は所定Tickの間だけタスクの実行を遅らせているようです。

ARM7TDMI:NXP LPC2388用の適当なサンプルフレームワークはどれがいい?

  • 一応、ARM_Project のHPにある、
    • GPIO, UART and interrupt example for the NXP LPC2378, NXP LPC2368 and other NXP LPC23xx/24xx devices
    • lpc2378_demo1_20070629.zip
  • がお勧め。
  • LPC2378とLPC2388の違いは、RAMの容量(32kB/64kB)の違いとUSBがOn the Goかどうかだけ、のようだ。
  • だから、リンカスクリプト(Common/LPC2378-ROM.ld)だけ書き換えて使えば良い。
  • USBを含む、そのようなお手本に関してはまだ見つからないが、上記の通りNXP
    Sample Code Bundle for LPC23xx/LPC24xx Peripherals using Keil's μVision, V1.60 (Mar 10, 2009) 
    (code.bundle.lpc23xx.lpc24xx.uvision.zip )
    を適当に改造して使うことになりそうだ。
  • KeilとWinARMでは割り込みハンドラーの扱いがかなり異なっているような気がするので、要注意なとこだけか。
  • 結局asmソース(Startup.S irq.S)の移植は不要。






ARM基板を何に使うかという読者向けネタ振り。

  • 速度、Flash容量、SRAM容量とも充分にある。
  • ペリフェラルも豊富過ぎるくらいある(EtherとかUSB On the Goまである)
  • 出来ないことと言えば、BeagleBoardのようにLinuxを動かしたりPDAにするのはちょっと無理っぽい。


では、どんなことをしたら面白いだろうか?思いついたことを書いてみる(勿論、実行するわけではない)

  • Arduinoもどき。ARMduinoっぽいみたいな感じのもの。
    • リソースはArduino MEGAを遥かに凌ぐ。
    • しかもフル32ビット演算全開。
  • Gainerもどき。 Gainer ARMとでも名付ける。
    • I/Oが100本くらい使用できる。
    • クリスマス電飾を全部ソフトでコントロール。(いや、あれは100本も制御点がない)
    • どうやってKONFIGURATIONしようか・・・?
  • USBクラスをいろいろ実験
    • USB Audio / USB CDC / USB storage / USB HID / ...
    • 普通にStorageだとつまらないので、 SD/MMCデバイスをUSB FloppyやUSB CDROMに見せかけるドライバとか。
    • On the go がついているのでUSBブリッジっぽいことが出来る?
    • 例えばPC to PCのデータ転送ケーブル(昔あった)
  • USB Midiクラスで楽器。
    • あの楽器???!
    • Midiフォーマットの復習には手ごろ。
  • On the Goで何か面白いことが出来ないか考えてみる。
    • いろんなUSBデバイスをシリアルに変換する等。
  • なつかPCのエミュレータ
    • 一応RAM64Kなので、Z80エミュとか入れるとMZ80KやX1の低速エミュレータが作れるはず。
    • ビデオ周りやサウンド周りはさすがにFPGAのように高速にはいかないだろうけれど・・・。
  • めちゃ古い機械接点キーボードなどをソフトスキャンしてUSB HID Keyクラス。
    • むしろPICでやるべきことか。
  • USB接続のUV-EPROMライタ
    • いや、FlashROM全開の時代に完全に逆行してるんですけど。殺菌灯とか要るし。
  • 外部バス(8bitミニバス アドレスは16bit)が出ているのでそこにVRAMを実装してミニVGA
  • OpenOCD JTAG系のツール。
    • それこそAVRでAVRライタばかり作ってるのと同類になってしまう・・・。
  • USBバスプロトコルアナライザ
    • マイコンでやるよりも48MHzくらいでFPGAかCPLDを回すのが正解だけれど、PCとやり取りするコントローラとしてはOK。
    • むしろ解析ソフトを組むのが大変なので、大仕事になるとおもう。
  • PC接続のロジアナ、オシロ系
    • これもFPGAかCPLDのほうが向いている。

いろいろ考えてみたけれど、512Kのフラッシュを満たせるような用途は思いつかなかった。

  • むしろ流行のロボット系メカの脳みそ用

interface 2009-05付録基板で遊ぶPartIIに続く・・・





リンク集

interface 5月号付属ARMマイコン基板の使用上の注意点(重要!!)、よくあるご質問等

interfaceダウンロードページ

ARM_Project

アルゴ算法堂:ARMアセンブラ解説

ELM:I/F誌付録LPC2000基板の試食

ARMUZK

  • http://www002.upp.so-net.ne.jp/uratan/ArmUZK/
  • UZK は、「キーボード・マウス共有器」、あるいは「延長器」、あるいは 「PC をまるごと USB キーボード・マウスにするためのブリッジ装置」です。

SYSLAB blog

ARMプロセッサ対応 JTAG-ICE "DAIICE for ARM"

FT2232のJTAGアダプタは、Amontec JTAG Keyが有名(29ユーロ)

  • 回路図は公開されているので自分で作れる。


各種JTAGアダプタを自作 New!


ARM PACMAN (AVRでもPACMANを作成されている方)