酔漢電子工作手帳

2004-09-11

移植

| 17:40 | 移植 - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - 移植 - 酔漢電子工作手帳

機も熟した、ということで一気に移植作業に移りました。ソースコードとドキュメントを読んで、大体次の方針でいきます。

SIO非対応
TOPPERS/JSPに普通についてくるSIO (UART)のPDICは今回対応しません。このモジュールはTOPPERS/JSPにとって必須ではないにもかかわらず、結構面倒な癒着を起こしているので移植の邪魔になります。
周波数は決めうち
クロック周波数は45.089MHzの固定とします。データシートには45.088と書いてあるのですが、計算して四捨五入すると089になります。切捨てしているのはなぜでしょう。
タイマー1をvxget_timに
性能計測用サービスコールvxget_timにはタイマー1をフリーランニングで使用します。タイマー1は32ビットしかありませんが、周波数が低いのでこれで100秒くらいは持ちます。十分でしょう。タイマー1を別用途に使いたいときには、単にvxget_tim (sys_config.c)を空にしてタイマーを空け渡します。

SIOさえはずしてしまえば、後は割りと優しい作業です。hw_timer.hはタイマー0のスタート、ストップ、割り込みクリアを行うだけですので簡単です。

少しわずらわしいのはsys_support.Sで、ここは割り込みハンドラを持つため、アセンブリ言語で書いてあります。内部で作業が必要な場所は、

  • 割り込み番号の取り出し
  • 割り込みのマスク

の二つですが、ADuC7020はこの部分がexcaliburと違うので作業が必要でした。hardware_init_hook()はアセンブリ言語での記述の必要はないのでsys_config.cに移しました。

簡単なはずが

| 20:57 | 簡単なはずが - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - 簡単なはずが - 酔漢電子工作手帳

さて、システム依存部は簡単なはずだったのですが、CPU依存部に思いもよらぬ罠が潜んでいました。ARM版はROM化を想定していないということがドキュメントに書いてあるのですが、結局、ROMでのデバッグを行っていないのではなく、ROMではまったく動かないということでした。システム依存部にかなり大規模な書き換えが発生する可能性もあります。仕事が忙しくなっていますし、年内どこまでやれるか急に怪しくなってきました。

しかしながら

21:56 | しかしながら - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - しかしながら - 酔漢電子工作手帳

割と簡単にクリアできたようです。シミュレーションで確認できる点はそれほど多くないので、この後は実機になります。が、ADuC7020は毎回ROMに焼かなければデバッグができません。この後はROMライターの開発となります。といってもS-RECORD*1からgdbスクリプトへの変換ソフトです。

とりあえず、CPU依存部で変更した部分を書いておくと、arm_vector_addとarm_handler_add周りはまったくデバッグされていないようだったので配列ごと削除しました。install_arm_handler()はCPUの例外ベクトルを直接書き換えるように変更しています。起動時は当然ROMデータですが、ADuC7020はremapを行うことでベクトルをSRAMに差し替えますからinstall_arm_handler()は正しく動作します。

一風呂浴びてさっぱり

23:14 | 一風呂浴びてさっぱり - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - 一風呂浴びてさっぱり - 酔漢電子工作手帳

gdbのコマンドから実機のフラッシュROM制御レジスタにアクセスしました。フラッシュを書き換えられることを確認できましたので、いよいよソフトウェアROMライターを作る準備ができました。

ライター完了!

00:56 | ライター完了! - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - ライター完了! - 酔漢電子工作手帳

S-RECORDをgdbコマンドに変換するプログラムを作りました。時間がかかりますがアプリケーションを焼きこめることを確認。まだ一括消去ができませんが、もう一歩のところまで近づいています。

*1:以前は勝手にIntel HEXだと思っていた

トラックバック - http://ecrafts.g.hatena.ne.jp/suikan/20040911