« PCI Expressでの割り込みの発生 | トップページ | 割り込みを確実に受け取るために »

2010.03.06

割り込みのハンドリングはできたが・・

IoConnectInterruptを使って割り込みを受け取ることに成功しました。
割り込み処理ルーチンで遅延プロシージャコールを呼び出して、遅延プロシージャコールするところまでは成功。
DMAの転送完了待ちに割り込み適用するには、最初のIRPを保留にしておいて、遅延プロシージャコールで完了にすればよいのか。うーん。
Interfaceの2月号の記事(で紹介されているMicroSoftのPCIドライバのサンプル)がとても役に立つ。

割り込み処理ルーチンでは割り込み要因をクリアしている。だから、Windowsが応答したらINTA#が即座にDeassertされるはず。そんな状況で、押しボタンスイッチで直に割り込み発生させたら、割り込みが発生しまくって、Windowsがフリーズした。やっぱり割り込み処理ルーチンの中でDebugPrintとかしちゃいけない。

あとはスキャッタギャザー対応とか、割り込み発生をユーザのルーチンに伝えるしくみの構築とか、割り込み発生で次のDMAを行うしくみの構築とか、いろいろやることがある。ほとんどがデバイスドライバの仕事。

DMAの完了を割り込みで通知するようにした。INTA#をアサートしてから割り込み処理ルーチンが反応するまで約6μ秒要していることがわかった。結構かかる。
Dma_int

|

« PCI Expressでの割り込みの発生 | トップページ | 割り込みを確実に受け取るために »

コメント

コメントを書く



(ウェブ上には掲載しません)




« PCI Expressでの割り込みの発生 | トップページ | 割り込みを確実に受け取るために »