E-2 確実にシリアル転送を行う手段 |
確実にシリアル転送を行う手段として、次のものが考えられます。
(1)の手段は、ビジュアルメモリの時計機能が、ベースタイマー割り込みを利用しているため、割り込み禁止中は時計のカウントができません。結果、時計が遅れることになります。
(2)の手段は、受信割り込みより優先順位の高い割り込みが、すべて発生した場合を想定し、その処理時間と受信割り込み処理時間を合計した時間を、送信待機時間とします。このためデータの転送は確実になりますが、送信にかかる時間が増します。
![]() 受信割り込みを最優先にすれば、確実に受信可能に思われがちですが、ベースタイマー割り込みハンドラ(時計処理ルーチン)がROM空間にあるため、フラッシュメモリ空間に用意した受信割り込みハンドラが呼び出されません。 ベースタイマー割り込みが発生するとCHANGE命令により、CPUがROM内プログラムフェッチしはじめます。ROM内BIOSのベースタイマー割り込み処理中に受信割り込みがかかると、CPUはROM空間の割り込みテーブル(相当のアドレス)を参照し、そこに記述されているアドレスへジャンプします。このときCPUはROMをフェッチしているので、用意した受信割り込みハンドラへジャンプしてきません。結果としてこの方法は利用できないということになります。 |
(1)を選ぶか(2)を選ぶかは、自由ですがそれぞれのメリットとデメリットを考慮してコーディングしてください。次にそれぞれの、メリットとデメリットを説明します。
受信割り込み以外の割り込みをすべてマスクすると、ベースタイマー割り込みを利用している時計が遅れます。ただし(3)の方法に比べ、転送速度が早くロジックが簡単です。
数バイトの転送であれば、時計の遅れは誤差程度で済みます。頻繁にデータを転送したり、たくさんのデータを転送する場合は、(3)の手段を利用してください。
送信待機時間は、次のように計算します。
すべての割り込みをマスクする場合に比べ、転送速度がかなり遅くなり、送信待機時間の計算や割り込みの優先順位などに注意してコーディングする必要があります。ただし、時計が遅れることはありません。
送信待機時間の計算は、受信割り込みより優先順位の高い割り込みがすべて発生したことを想定します。その処理時間と受信処理時間を加え、送信待機時間とします。
![]() ポート3割り込みはレベル割り込みのため、シリアル転送中にユーザーがボタンをおし続けていると、割り込みがかかり続けどんなに送信待機時間を設定しても取りこぼしが発生します。 シリアル転送中にボタンの押下状況をチェックする場合は、ポート3割り込みを禁止し、タイマー0などを用いてポート3ラッチを監視してください。 |
![]() 最長の場合は、年に1回発生するものなので、必ずしもこのステップ数を確保する必要はありません。 システムクロックと分周比は、アプリケーションで設定した値が引き継がれます。 |
[←] | [INDEX] |
(C)SEGA ENTERPRISES, LTD., 1999