2008/10/29(水)TOPPERS/ASP kernelのSH7144への移植~その1

[TOPPERS/ASP]プロセッサ依存部の資料

大枠

ポーティング資料の大元は,以下のファイル.

asp/doc/porting.txt
  TOPPERS/ASPカーネル
  ターゲット依存部 ポーティングガイド
  対応バージョン: Release 1.3.2 (最終更新: 2008年8月3日)

sh12a_gcc/prc_user.txt より

@SH12Aプロセッサ依存部(asp-1.3.1対応)Last Modified: '08/05/12 
SH13A依存部は,SH1/2/2Aをターゲットとしている.SH1/2/2Aにはいくつかの
バリエーションが存在し,バリエーションによっては,割込み関連のレジスタ

誤植もあるが,SH2対応のarchitecture対応と明示されている.(方針) (方針)SH7144対応は,コレに対するpatchという形で作成する

SH2A(7211)とSH2(7144F)とでは,SCIそのものの構成が変わっている.SCIのレジスタアドレス・制御レジスタの構造はもちろん,SH2AのほうがFIFOを積んでいて快適そうだ.
流用できないことが自明になったが,本家が pdic/sh/sh_scifとしているため,当初はSCIFのコードをtarget依存部においていた.しかしながら,秋月のSH7145へのポーティング((私がやるのではなく,第三者が,と考えています.同時に複数触らない&買い増すならSH2A以上とか..))を視野に入れると,pdicなのかな?と.ただ,pdicて外付けICのためのように思えたりもするのだけれど….

ディレクトリ構成の詳しいシキタリやドキュメント記述ルールも明確化しないと,結構ばらついているように思います.
いざリリースしようと思っても,どれにあわせるべきかで悩んでしまった.

RENESASのサイトでダウンロードできるヘッダファイル集*1をパクってくると良い感じだろうか.

ToDo?

資料より,何をすべきしたかをまとめる.もともとポーティングについて纏まって記述されているが,具体的作業を併記することで,別プロセッサへの移植の助けになることを期待.

ファイルの新規作成
  • asp/arch/sh12a_gcc/配下
    サポートするプロセッサの型番を(sh7xxx)とする.
    • テンプレートファイル(sh7xxx.tf)
    • カーネル実装のターゲット依存の定義(sh7xxx_config.h)
    • ハードウェア資源のヘッダーファイル(sh7xxx.h)
  • asp/target/cq7144/配下(ディレクトリも新規作成)
    基本は既存のtargetファイルを元に作成する.今回はapsh2a_gccをベースにする.
    {asp/doc/porting.txt::10.1 ターゲット依存部のファイル一覧に詳しく書かれている….
    • E_PACKAGE
      asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option
    • MANIFEST
      asp/doc/porting.txt :: 9.2 パッケージ記述ファイル/option.個別パッケージ作成用ファイル.
    • Makefile.target
    • cqsh2.h
    • target.tf
    • target_cfg1_out.h
    • target_check.tf
    • target_config.c
    • target_config.h
    • target_kernel.h
    • target_rename.def
    • target_rename.h
    • target_serial.c
    • target_serial.cfg
    • target_serial.h
    • target_sil.h
    • target_stddef.h
    • target_support.S
    • target_syssvc.h
    • target_test.h
    • target_timer.cfg
    • target_timer.h
    • target_unrename.h
    • target_user.txt
      asp/doc/porting.txt :: 9.1 ドキュメントにて要求されている.記述内容もtarget設定や環境など該当ドキュメントに記載されている.
    • test_log.txt
      sampleプログラムのconsole出力結果(log.

以下,さらに抽出.

  • 不思議ファイル
    個別パッケージ生成時のコマンド例
      % utils/makerelease arch/arm_gcc/MANIFEST
    簡易パッケージ生成時のコマンド例
      % utils/makerelease target/at91skyeye_gcc/E_PACKAGE
    

[bf:MANIFEST}や*PACKAGEで,リリース用のアーカイブを作る際に内包させるファイル等を明記する,ということのようです.

  • その他のファイルが必要な場合は,プロセッサの型番を先頭に着けたファイルを作成,

ターゲット依存部からインクルードすればよい.


割込み優先度設定

prc_config.c :: const IPR_INFO ipr_info_tbl[] を IPR_INFO_TBL_DATA で初期化する.依存部(shxxx_config.h)にて,IPR_INFO_TBL_DATAを含めた割込み関連のシンボルを定義する.割込みベクタのMIN.値をindex=0として,該当ベクタの優先度設定のためのIPRレジスタのアドレスをaddressメンバへ放り込む.resere/空きもあるので,そこは 0を代入しておくこと.

typedef struct {
    /* 割込み優先順設定レジスタのアドレス */
    uint32_t address; 
    /* オフセット */
    uint32_t  offset;
} IPR_INFO;

メモ

tareget依存部のmakefile(Makefile.target)に,以下のシンボルが存在する.
これによりプロセッサ依存部のファイルを選択するようになった.JSPではプロセッサとターゲットを個別に指定する必要があった*2と思う.

BOARD = cqsh2a
PRC   = sh12a
TOOL  = gcc

*1 : include_sh_080130.zip

*2 : ほとんど触らずに終わったので怪しい