シリアル通信プログラム

WR-X CPU module用のシリアル通信プログラムを、以前H8/3069用に作ったプログラムから移植作業をここ数日やっていた。

昨日からどうにも割り込みがうまく動かないので、昨日8時間くらい、今日7時間くらいぶっ続けでやり続けて、ようやくバグの箇所も分かり、何とか動かすことができた。

SH4の割り込みは構造が非常に複雑なだけではなく、さらに特権モードの時にレジスタ構成が2つに分かれ、さらにユーザーモードも別にあるという、なんとも複雑な構成になっているため、割り込みをやるにもそう簡単ではなく、スタートアップルーチンから全部考えて作り直さなければいけないので、非常に複雑&大変なのであった。

今は特権モードのみで動かしているが、通常はユーザーモードで動作中にハードウェア割り込みが入って割り込み用特権モードに移行するわけだ。

つまり、特権モード動作中であっても、ユーザーモード動作中であっても同じように動かないといけないのだが、これまたSH4は割り込みが入ると勝手に内部でレジスタ構成を特権モード1に変更するため、電源投入後のデフォルトである特権モード1のまま普通にスタートアップルーチンとか動作させていると、割り込みが入った場合にレジスタ退避がうまくできなくなる。

レジスタセットが独立に2種類あるのはユーザーモードからの割り込み時に退避なしで高速動作ができる、という利点を考慮しての設計なのだろうが、実際には多重割り込みもかかし、割り込み要因がレジスタ値をシフトしてジャンプさせろ、みたいな何ともやりにくい構造になっているため、結局はレジスタが2種類あるせいで複雑になっているだけだったりもするw

で、何とかプログラムを組んだものの、どうにも動作しない。
PCとは違って、フィードバックがLED2個しかないので、デバッグが大変なのなんの。通信ルーチンさえできてしまえば情報をPCへ送って表示させたりできるのだが、その通信ルーチンを作っているんだからもうどうしようもない。

そして、不意にアセンブラで分岐命令を書こうものなら、SH4は遅延分岐を行っているため、bra命令の次の命令に注意しないと、思いもよらない動作をしてくれたりするし。

しかし、2日間みっちりやったおかげで、何とかバグもほぼ取れて、まともに動くようになった。

まったくこの2日間は苦労した。

●オマケ

研究室のある校舎に住み着いたネコの今日の様子。ここは余り人のいない校舎なので、のんびりその辺で昼寝などをしているのであった。

You can skip to the end and leave a response. Pinging is currently not allowed.

One Response to “シリアル通信プログラム”

  1. nati より:

    ネコ なつかしいですー!

Leave a Reply

Powered by WordPress | Designed by: Free MMO | Thanks to Social Games, Game Music Soundtracks and MMORPG Wallpapers