3

シリアル ポートを使用する 16 ビット アセンブリで記述されたアプリケーションを変更することになっています。目的の 1 つは、19200 ボーの速度をサポートすることです。私がインターネットで読んだリソースのほとんど (たとえば、この) は、INT 14h を使用してそれを行う方法を示しています。私は基本的にマジックナンバーをアルレジスタに書き込み、割り込みを呼び出し、ポートが(うまくいけば)設定されます。OS のシステム コール アプリケーションがシリアル ポートをセットアップするために使用している方法は、同じ方法を使用しています (必要に応じて自由に変更できます)。

このアプローチの問題点は、速度を設定するフィールドが 3 ビット フィールドであり、最大速度が 9600 ボーの場合です。高速を使用するにはどうすればよいですか?

4

1 に答える 1

2

BIOSの機能についてはあまり詳しくありませんが、シリアルポートの基盤となるUARTチップについて詳しく知っている場合は、BIOSのサポートをバイパスして、直接プログラムすることができます。

たとえば、従来の16550 UART(たとえばここにあるデータシート)は最大約1 Mbpsをサポートし、2つの8ビットレジスタを使用して目的のクロックスケーリングを表現します。

これはまさにそれを行うためのリファレンステキストです。つまり、「除数ラッチバイト」をプログラミングして目的のボーレートを設定します付随するコードから、ベースI / Oアドレスが、のCOM1の0x3f8場合、下位の除数バイトが0x3f8に、上位のバイトがにあることが明らか0x3f9です。

于 2011-12-14T08:21:55.157 に答える