TOPPERS/JSPカーネルのH8向け実装には、シリアルインタフェースの受信時にブレーク信号を検出した際の割り込みハンドラが実装されていない様です。これで相当にハマりました。しょうがないので、自分で作ることにします。
幸いな事に、TOPPERS/JSPカーネルのソースツリーを調べると、SH2プロセッサのSH7615向けにはブレーク信号検出の割り込みハンドラが実装されていますので、それを参考にします。というか、他のプロセッサ/プラットフォーム向けにはブレーク信号検出の割り込みハンドラが実装されていない様に見受けられます。みんな必要なかったんでしょうか。。。謎だ。
さて、以下は作業予定ですので、実際にこの通りやってうまくいかない可能性も有ります。作業が終わったらまたアップデートする予定です。
作業のレシピはこんな感じ。
ソース:
- jsp/config/sh2/sh7615scif.c
- 割り込みハンドラの実体である sh2scif_isr_siop_brk 関数があります
- シリアルチャネル0向けの割り込みハンドラである sh2scif_isr_brk 関数があります(その実体は sh2scif_isr_siop_brk 関数です)
- シリアルチャネル1向けの割り込みハンドラである sh2scif_isr2_brk 関数があります(その実体は sh2scif_isr_siop_brk 関数です)
- jsp/config/sh2/hsb7616it/hw_serial.h
- 割り込みハンドラの名前を付け変える以下の#defineディレクティブがあります
- #define sio_handler_brk sh2scif_isr_brk
- #define sio_handler2_brk sh2scif_isr2_brk
- jsp/config/sh2/hsb7616it/hw_serial.cfg
- 割り込みハンドラを登録する以下の静的APIがあります
- DEF_INH(INHNO_SERIAL_BRK, { TA_HLNG, sio_handler_brk });
- DEF_INH(INHNO_SERIAL2_BRK, { TA_HLNG, sio_handler2_brk });
なんか、これだけ材料があったら負ける気がしません(笑)。
さて、私がターゲットにしているのはH8 3069を搭載した秋月電子製マイコンボード(H8 3069F LANボード)ですので、上記のレシピで以下の様な読み替えを行います。
- sh2 => h8
- hsb7616it => akih8_3069f
また、シリアルチャネルの数が最大3に増えます。
この読み替えを行うと、H8 3069F LANボード向けには以下の作業をすることになります。
作業:
- jsp/config/h8/akih8_3069fscif.c を作成する
- 割り込みハンドラの実体である h8scif_isr_siop_brk 関数を実装する
- シリアルチャネル0向けの割り込みハンドラである h8scif_isr_brk 関数を実装する(その実体は h8scif_isr_siop_brk 関数である)
- シリアルチャネル1向けの割り込みハンドラである h8cif_isr2_brk 関数を実装する(その実体は h8scif_isr_siop_brk 関数である)
- シリアルチャネル2向けの割り込みハンドラである h8cif_isr3_brk 関数を実装する(その実体は h8scif_isr_siop_brk 関数である)
- jsp/config/h8/akih8_3069f/hw_serial.h を作成する
- 割り込みハンドラの名前を付け変える以下の#defineディレクティブを定義する
- #define sio_handler_brk h8scif_isr_brk
- #define sio_handler2_brk h8scif_isr2_brk
- #define sio_handler3_brk h8scif_isr3_brk
- jsp/config/h8/akih8_3069f/hw_serial.cfg を作成する
- 割り込みハンドラを登録する以下の静的APIを記述する
- DEF_INH(INHNO_SERIAL_BRK, { TA_HLNG, sio_handler_brk });
- DEF_INH(INHNO_SERIAL2_BRK, { TA_HLNG, sio_handler2_brk });
- DEF_INH(INHNO_SERIAL3_BRK, { TA_HLNG, sio_handler3_brk });
- jsp/config/h8/akih8_3069fscif.c を作成する
- 既存の jsp/config/h8/hw_serial.c に追記する
- jsp/config/h8/akih8_3069f/hw_serial.h を作成する
- 既存の jsp/config/h8/hw_serial.h に追記する
- jsp/config/h8/akih8_3069f/hw_serial.cfg を作成する
- 既存の jsp/config/h8/hw_serial.cfg に追記する
さらに、既存のH8向けシリアルインタフェースドライバの関数名を踏襲しましょう。修正された作業内容は以下の通りです。
- 既存の jsp/config/h8/hw_serial.c に追記する
- 割り込みハンドラの実体である SCI_brk_handler 関数を実装する
- シリアルチャネル0向けの割り込みハンドラである sio_brk_handler 関数を実装する(その実体は SCI_brk_handler 関数である)
- シリアルチャネル1向けの割り込みハンドラである sio_brk2_handler 関数を実装する(その実体は SCI_brk_handler 関数である)
- シリアルチャネル2向けの割り込みハンドラである sio_brk3_handler 関数を実装する(その実体は SCI_brk_handler 関数である)
- 既存の jsp/config/h8/hw_serial.h に追記する
- 割り込みハンドラの名前付け変えは不要
- 既存の jsp/config/h8/hw_serial.cfg に追記する
- 割り込みハンドラを登録する以下の静的APIを記述する
- DEF_INH(INHNO_SERIAL_BRK, { TA_HLNG, sio_brk_handler });
- DEF_INH(INHNO_SERIAL2_BRK, { TA_HLNG, sio_brk2_handler });
- DEF_INH(INHNO_SERIAL3_BRK, { TA_HLNG, sio_brk3_handler });
さて、これでやることが決まりました。
作業を始めますか。。。
0 件のコメント:
コメントを投稿