[Uclinux-h8-devel] H8で外部からの割込みを受けつける場合

アーカイブの一覧に戻る

ykominami ykomi****@nifty*****
2005年 11月 15日 (火) 08:04:36 JST


はじめまして。
小南と申します。

私はSL811HSがついているボードは持っていないので確認はできません。
ただSH3に外付けの16550互換UARTをつけたボードにgdbスタブを移植し
ようとした時に似たような現象(UARTでは受信割込みが発生しているの
にSH3の割込みハンドラが呼び出されない)を経験しましたので、(佐藤
さんのお話はもう一月以上前のことであり、すでに解決されておられ
るかもしれませんが)体験談として書かせて下さい。

> カーネルの方もSL811HSのドライバを移植していますが、割り込みがこないという
> 謎の現象に悩まされていて、全然進んでいません。
> さらに困ったことにこのドライバi386以外考慮していないような気が…
> 
> という状況なので、すぐに試すのは多分難しいと思います。
> 
> 割り込み問題は誰か追試してもらえるとうれしいです。
> IRQを直接さわるとハンドラが呼ばれるので、多分SL811HSのIRQがおかしい。
> ただ、ステータスを見るとIRQが出ていることになっている。
> 出、IRQがちゃんと出ているか確認したい。けど道具が無いので。

SH3+互換UARTで、同じような現象を経験しました。
互換UARTのレジスタを見ると、受信割込みが発生しているのに、SH3は
割込みの発生自体を認識していない(割込み処理ルーチンが呼び出されない、
割込み要因がレジスタに設定されていないなど)状態でした。
そこでいろいろ調べて試したところ、以下の処理が必要でした。

1.外付けの互換UARTと接続するピンの機能を外部割込み受付にする
2.該当ピンの入出力方向を設定する
3.該当ピンの割込みの受け付け方法を設定する(レベル/トリガ、low/high
アクティブなど)
4.割込みコントローラで該当ピンからの外部割込みを有効にする
5.該当ピンからの外部割込みの優先度を設定する
6.該当ピンからの外部割込みに割込みマスクから外す
7.CPUの割込み禁止を解除

私の場合、3の割込み受け付け方法の設定を、UARTの仕様(Highアクティブ)
に合わせていなかったのが原因でした。
ただしいろいろ試行錯誤していたため、7の割込み禁止解除を忘れてしまい、
実際に割込みハンドラが呼び出されるようになるまで、もう少し時間がかか
りました。

つまり私の場合、割込み信号が変化しても、それをCPUが割込みと認識でき
ていなかったのが原因でした。

この場合、ピン自体の状態と、ピンからの外部割込み発生はそれぞれレジスタ
で確認できますので、特別なハードウェアは必要有りませんでした。

このあたりの仕組みはSHとH8ではよく似ていると思いますので、参考に
なれば幸いです。
---------------------------------------------------------------------
小南 ykomi****@nifyt*****



Uclinux-h8-devel メーリングリストの案内
アーカイブの一覧に戻る