出張帰りでぐったり疲れていて何もする気にならなかったので、気分転換にJSPカーネルをACB-BF592に移植しました。何か間違っている気がします。
TOPPERS/JSP for Blackfinは、ある時期に思い立ってカーネルのターゲット依存部を三層構造にしています。本来JSPカーネルは、ターゲット依存部がCPU依存部とシステム依存部の二層構造です。しかしながら、この構造はペリフェラルが単独LSIだった時代ならともかく、UARTやSPIコントローラと言った主要ペリフェラルがマイコンに集積されている現状とはそぐいません。そこで、Blackfin版JSPカーネルでは、CPU、CHIP、SYSTEMの三層にしました。この変更により、TOPPERS/JSP for Blackfinは移植時の作業量の見積もりが容易になっています。
CPU依存部については、今のところBlackfinプロセッサ全製品で共通ですので、書き換える必要はありません。ですのでACB-BF592に対応するに当たっては、チップ依存部とシステム依存部を書き換えるだけです。
チップ依存部の書き換えについては、インクルードファイルの変更のような雑務を除けば、だいたい以下のような変更で済みます。
- sys_initialize()内部でのPLLおよびUART初期化、ポート割り当ての変更
- 必要に応じて、device_dispatcher()関数の書き換え
- sys_config.h内部でのINHNO_XXXの書き換え
- システムが使うタイマーとUARTの決定
device_dispatcher()は、割り込みがかかったときに、優先順位、SIC_ISR、SIC_IMASKの値から、どのペリフェラルの割り込みハンドラを呼び出すべきか決定するルーチンです。Blackfinシリーズは物によってSIC_ISRの幅が違うため、初期にはBF537の導入時などに大幅な変更が必要になりました。しかしながら、主なバリエーションは網羅しているため、最近では適切なアーキテクチャを元にすれば書き直しは不要なはずです。今回は、BF533をお手本として、device_dispatcher()はそのまま使いました。
移植の容易さを目的として三層化していたおかげで、久しぶりであるにもかかわらず必要な作業は明確でした。2時間ほど手を動かした後、ちょっとしたタイポを修正して、すぐにビルドが通るようになりました。週末に時間をとってデバッグにかかるつもりです。
なお、GNUツールチェーンでビルドが通るコードをCVSにコミットしています。
移植お疲れ様です。
他の作業でもたもたしてたら先こされてしまいました(汗
今度Visual DSP++でも確認してみます。
いえいえ、私もまだ動作確認していませんので。