[Armadillo:00282] Re: シリアルIF HT3010でoverrun

Takamura Naoya email@hidden
2005年 5月 16日 (月) 13:30:03 JST


高村@テラテクニカです。
自己レスです。

8250.cの関数
static int serial_link_irq_chain(struct uart_8250_port *up)
内の割り込みハンドラ登録request_irq()
で高速ハンドラ(SA_INTERRUPT)の指定にしてみたところoverrunエラーが出なくなりました。

高速ハンドラ実行中は多重割り込みが完全に禁止になるので、IDEの割り込みによる
邪魔が入らなくなるということなのでしょうかねぇ。
でも割り込み線を共有しているのに多重割り込みが効くのでしょうか?

> ノーマルArmadillo(Armadillo-9ではありません)に
>  シリアルインターフェースHT3010
>  CFカードドライブHT3040
> を接続して使用しています。
> カーネル linux-2.4.21-rmk1-armadillo-2
> PCMCIAドライバ pcmcia-armadillo-2.4.21
> 
> シリアルで9600bpsでデータを受信し、そのデータをCFカードに記録しています。
> シリアル用のドライバは、8250.cを自分でArmadillo用に書き換えて使用しています。
> 
> 問題なのが、CFカードの上の記録済みデータファイルをgzipで圧縮すると
> シリアルでオーバーランエラーが起こるのです。
> syslogには以下のようなエラーが出力されます。
> May  9 15:51:37 armadillo kernel: ttyS: 1 input overrun(s)
> 
> シリアルのFIFOは有効にしているので、1msec/byte * 16byte = 16msec以上の割り込み禁止
> 期間が生じてしまっているようです。
> 
> 原因としては、PC104の割り込み線全てがCPUの割り込み1つだけを共有しているせいだと思われます。
>  CFカードへのアクセスで、PC104バスに割り込みが生じる
>  割り込み線を共有しているので、シリアルの受信割り込みが生じてもCPUが受け取らない
> ということだと予想しています。
> 
> IDE周りのドライバをいじればよいのは分かるのですが、私の力不足で手に負えません。
> どなたか、情報や対処法をご教示願えないでしょうか?
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo




armadillo メーリングリストの案内