H8 シリアル入(出)力サンプル・プログラム |
はじめに |
<説明> ここで紹介するシリアル入(出)力、サンプル・プログラムは、勉強用やデモ用を想定していますので、実際の業務での運用に耐えうるかどうかを保証いたしません。 そもそも、gigoさんのCstartとC標準ライブラリを使用すれば、printf や scanf が付いて来ますので、通常の用途ではわざわざ「シリアル入出力プログラム」を作る必要はありません。 このプログラムの作成目的は、以下の3点です。 1.デバイスIO、デバッガの使い方、CPUの割り込み制御に関する実験。 2.サンプルのためのソースを公開して、プログラミングやデバッグの勉強を助ける。 3.デバッガでBreak Pointをかけたり、何回も気にしないでロードと実行ができるように、H8/3048FのFlush ROMにデバッガを組み込み込んだ環境のRAMで動作可能とする。 この「安全な大きさでRAMに収める」というのが、なかなか苦労した点です。当初は2つのシリアルポートと、入出力の割り込みをサポートするはずだったのですが(ROMでは動作確認済)、RAMに入りきらないため、シリアルをポート0限定にして、割り込みも入力のみサポート、さらに余計なメッセージや、エラー処理を削る事で、なんとかこの大きさにしました。 |
動作概要 |
<説明> プログラムは、全部で3つあります。 ユーザ側から見た動作仕様は、同じですが内部動作が違います。 動作は、SCI0(シリアルポート0番)に、'?' プロンプトを出力し、任意のユーザコマンドの入力を待ちます。 数字が入力された場合には、入力された回数分の内部ループ処理を行います。ループ処理中に、もし別の文字の入力が行われた場合にどうなるか、というのがポイントです。 (16MHz環境で適当な長さのループは、5000000〜9000000ぐらいだと思います。) '.' ピリオド、Ctrl-C の入力でプログラムは終了し、制御をモニターに返します。 それ以外の入力では、単に入力文字をエコーバックするだけです。 SCI2.C - 割り込みを使わないで、上記動作をします。 SCI3.C - 入力時に、シリアルの割り込みを使って、上記処理をします。 SCI4.C - 入力時に、シリアルの割り込みを使い、なおかつリングバッファによる受信データプール処理をおこないます。 cstartT.src - アセンブラで記述した割り込みハンドラです。cstartオリジナルのcstartT.srcと置き換えて、リンクして使用します。 |
実行方法 |
<説明> 1.すべてのプログラムのコンパイル、リンクを終え、オブジェクトのSレコードを作っておきます。 2.シリアル・ケーブル(25ピンの方)で開発環境のパソコンとAKI-H8を接続します。 3.所定手順で、Cstartサポート&ライブラリ付モニターをROMに焼きます。 4.開発環境のパソコンで、ハイパーターミナルを立ち上げます。 5.gigoさんのサンプル・テスト・プログラムをRAMにロードして、動作確認します。 6.上記手順と同様、モニターの'L'コマンドで、シリアル・テストプログラムをロードします。 7.実行は、モニターから 'g FF000' です。 8.パソコンに接続するシリアル・コネクタを9ピンのポート0に接続し直します。 9.「Enter」キーをたたいて、'?' プロンプトが出れば、シリアルサンプル・プログラムは動作しています。 10.'.' (ピリオド)コマンドで終了後は、再びシリアル・ケーブルをつなぎ変えます。 |
補足情報 |
<説明> 「n2i105h8.zip」に含まれるバッチファイルでは、組み込み対象とするモニターのバージョンが違うため、リンクに失敗します。以下に、Ver. 2.1Cのリンクに使用するモジュールを列挙しますので、ご自身でバッチファイルの書き換えをしてからリンクして下さい。書き換えが必要なファイルは、 「AKIH8.BAT」「ccH8M.BAT」です。 「AKIH8.BAT」の書き換えの際には、必要なモジュールがコンパイルされるようにも修正します。 cpu01,cpu02,cpu03,cpu04 cmd01,cmd02,dmy03,cmd04,cmd05,cmd06,cmd07,cmd08,cmd09,cmd10 cmd11,dmy12,cmd13,cmd14,dmy15,cmd16,cmd17,dmy18,cmd19,cmd20 cmd21, dmy23,cmd24,cmd25,dmy26,cmd27,cmd28,dmy29,cmd30 cmd31,cmd32,cmd33,cmd34,cmd35,cmd36,cmd37,cmd38,dmy39 mod01,mod02,mod03,mod04,mod05,mod06,mod07,mod08,mod09,mod10 mod11,mod12,mod13,mod14,mod15,mod16,mod17,mod18,mod19,mod20 mod21,mod22,mod23,mod24,mod25,mod26,mod27,mod28,mod29,mod30 mod31,mod32,mod33,mod34,mod35, mod37,mod38,mod39 |