2017-11-01 14 views
0

自分のコンピュータから実際のシリアルポートを介してマイコンにバイナリデータを渡したいと思っています。現時点では、INB関数とOUTB関数を使用することを考えていますので、Linuxのtty文字のオーバーライドを使用する必要はありません。inbコマンドとoutbコマンドの通信速度 - linux

質問:シリアルポートのボーレートをINBおよびOUTB機能で使用するには、どうすれば設定できますか?たとえば、COM1(0x3F8)に書きたい場合、ボーレートデータがどのように書き込まれているかを確認する方法はありますか?

sttyには、INBとOUTBまたはsetserialを使用したバックグラウンドコントロールがありますか?

+2

「私は、Linuxのtty文字の上書きを我慢する必要はありませんので、*この時、私はINBとOUTBの機能を使用してと思ってい*。」あなたが作っています物事*多く*正当な理由でより複雑です。 rawモードでポートを置くことは簡単です。 –

+0

このベアメタルをやっていたら、DOSなどで、ドキュメントを読むだけです。しかし、あなたはlinuxにタグを付けて、api呼び出しを使ってuartを処理するだけです。 –

答えて

1

この時点では、INB関数とOUTB関数を使用することを考えています。したがって、Linuxのtty文字の上書きをする必要はありません。

これはひどい、良い、非常に悪い考えであり、動作しません。既存のシリアルドライバは、ポート設定を下から変更しようとすると非常に混乱します。

Use standard UNIX APIs to interact with the serial port.難しくありません。

0

もちろん、Duskwuffは正しいです。なぜ低レベルになり、APIを使用しないのですか?あなたがに話しているデバイスは、あなたがそれに話をするシリアルポートを使用することができるはずRS-232、 に似た何かをサポートしている場合

http://www.tldp.org/HOWTO/text/IO-Port-Programmingセクション6.3を参照してください。 Linux シリアルドライバは、ほとんどすべてのアプリケーションで十分であるはずです( はシリアルポートを直接プログラムする必要はないはずです)、おそらく にカーネルドライバを書き込まなければなりません。それは非常に汎用性がありますので、非標準のbpsレートを使用している などは問題ではありません。ここでは、これを説明するために

は「ボー・レートを設定する方法」の元の質問への答えです:ポート(COM1用など0x3F8)に加えて

を、次のいくつかのポート番号が使用されています様々な制御目的のために使用される。ボーレートを設定するには、まず除数115200/[希望のボーレート]を計算します。例えば。あなたは38400のボーをしたい場合は、除数はその後3です:

  • はPORT + 3
  • の最上位ビットをセットPORT
  • に除数の最下位バイトを送るの最上位バイトを送信

    :PORT + 1
  • クリアPORT + 3の最上位ビット(同時に、下位ビットはパリティを設定するために使用することができ、ビット等を停止)コードで

に除数

outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) 
    outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud 
    outb(PORT + 1, 0x00); //     (hi byte) 
    outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit 

出典ここにある:http://wiki.osdev.org/Serial_Ports