TOPPERS/JSP BF518依存部、動き出した

今朝からEZ-BOARD*1 BF518の裏面JTAGに対応するための引き出し線を作り、刺身包丁を使いやすくしました。
さて、おもむろにTOPPERS/JSP BF518依存部作成開始です。実はずいぶん前にビルドまで進めていましたので楽なはずでしたが、何しろ私のやることですからあれこれ引っかかりました。

  • cdefBF518.hがない
  • SYSCLKの値の設定がおかしい
  • メモリに乗らない

cdefBF518.h

以前BF518依存部をビルドした際には、CPU依存部にcdefBF***.hをVisualDSP++からコピーして使っていました。そのあと、ライセンスの純度を上げるためにソースツリーから削りました。その際、BF518依存部は手を入れませんでした。
その後、ToolchainにcdefBF***.hが組み込まれました。今回、それを活用できると思っていたのですが、実はToolchainの2009R1.1にはcdefBF51*.hがありません。
orz
結局、Toolchainのnightly snapshotに目指すファイルがあったため、コピーして難を逃れました。

SYSCLKの値がおかしい

とりあえずLEDちかちかを作ったところ、LEDはきちんと点滅します。しかし周期が微妙におかしい。マニュアルを調べ直してEZ-BOARDのCLKIN周波数や、レジスタ設定値を調べなおしましたが間違っていません。
結局、例によって「ROMからブートしているプログラムのPLL設定がそのまま通っているのではないか」とにらんだところ、そのとおりでした。マニュアルによるとEZ-BOARDはハードウェアの制限からシステムクロックを80MHzに制限しています。しかし開発した依存部はそこを133MHzと仮定していました。結局、GDBから連続ロードした際にリセットされない*2ため、ROMのPLL設定がそのまま継承されていたのでした。

メモリに乗らない

Sample1をビルドして走らせたところ、クラッシュします。LDファイルがおかしいとにらんでみたところ、案の定間違いがありました。で、正しく設定するとメモリに乗りません。
BF518のRev0.0には命令SRAMが不連続になるというとんでもないバグがあります。これに対応しなければ正常には動作しません。全部SDRAMにおいてSRAMをキャッシュとして使う方法も考えられますが、そういうのは後に回したいところです*3
結局、LDスクリプトのEXCLUDE_FILE機能を使って無事に命令を分割配置することができました。
コードはCVSのhimejiブランチにコミットしてあります。連休中にHEADに統合できるでしょう。

*1:BF518のボードはUSB JTAG ICEが別ボードになっている。まとめて買うとEZ-KIT

*2:仕様

*3:GDBからSDRAMコントローラを設定するなどが必要