割り込みのハンドリングはできたが・・
IoConnectInterruptを使って割り込みを受け取ることに成功しました。
割り込み処理ルーチンで遅延プロシージャコールを呼び出して、遅延プロシージャコールするところまでは成功。
DMAの転送完了待ちに割り込み適用するには、最初のIRPを保留にしておいて、遅延プロシージャコールで完了にすればよいのか。うーん。
Interfaceの2月号の記事(で紹介されているMicroSoftのPCIドライバのサンプル)がとても役に立つ。
割り込み処理ルーチンでは割り込み要因をクリアしている。だから、Windowsが応答したらINTA#が即座にDeassertされるはず。そんな状況で、押しボタンスイッチで直に割り込み発生させたら、割り込みが発生しまくって、Windowsがフリーズした。やっぱり割り込み処理ルーチンの中でDebugPrintとかしちゃいけない。
あとはスキャッタギャザー対応とか、割り込み発生をユーザのルーチンに伝えるしくみの構築とか、割り込み発生で次のDMAを行うしくみの構築とか、いろいろやることがある。ほとんどがデバイスドライバの仕事。
DMAの完了を割り込みで通知するようにした。INTA#をアサートしてから割り込み処理ルーチンが反応するまで約6μ秒要していることがわかった。結構かかる。

| 固定リンク


コメント