問題タブ [irq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - IRQ マッピングの設定
カーネルをセットアップするために、いくつかのチュートリアルとリファレンスに従っています。チュートリアルで、まったく説明していないなじみのないコードに出くわしました。16 IRQs (0-15)
ISRの場所にマップすると言われているのはコードです32-47
:
のコードoutportb()
は次のとおりですが、私はすでにそれが何をしているのかを明確に把握しています:
これは保護モードの x86 アーキテクチャ上にあることに注意してください。このソース コードは正常に動作し、その機能は理解できますが、どのように機能するかはわかりません。誰かがここで何が起こっているのか説明してもらえますか?
linux - 2枚のデジタルカードをアスタリスクボックスに接続する際のIRQの問題
それぞれ 8 つの FXO ポートを備えた 2 つの Digium Wildcard TDM800P があります。両方を同時に接続すると、IRQ ミスが発生し始め、コンピューターが応答しなくなり、使用できなくなります。
1 枚のカードで正常に動作しますが、Telco からのコールを受信するには、16 の FXO ポートすべてが動作する必要があります。カードが互いに通信して、多くの割り込みを生成しないようにする方法はありますか。または、Linux を微調整して、カードごとに個別の IRQ を専用にする方法。
オーディオ、ACPI、および USB ポートを無効にしようとしました。それでも IRQ ミスが多すぎます。
windows-mobile - PPC2003からWM6へのドライバーの移植:ISRは呼び出されません
iPAQhx4700のCFポートを使用するカスタムデバイス用に開発したドライバーを移植しようとしています。
ターゲットは、Windows Mobile6を実行する新しいiPAQ210です。WM6(およびWindows CE 5.0)は新しいドライバーアーキテクチャに切り替えましたが、レガシードライバーをサポートしていると主張しています。
割り込み処理部分を除いて、すべてが正常に機能しています(登録、メモリマッピングなど) 。ISRをに登録しましCardRequestIRQ()
たが、IRQが生成されると、ISRが呼び出されることはありません。
注意:私は明確に定義されたプラットフォーム(iPAQ 210)用に開発しているので、Platform Builder、OAL、...はありません。
私がこの問題に光を当てるのを助けることができるこの種のことを経験した人はいますか?
interrupt - CPU が ISR を見つけてデバイスを区別する方法
まず、私が知っていることをすべて共有する必要がありますが、それは完全なカオスです。このトピックにはいくつかの異なる質問がありますので、イライラしないでください:)。
1) ISR を見つけるために、CPU には割り込み番号が提供されます。x86 マシン (286/386 以上) には、ISR を含む IVT があります。サイズが 4 バイトの各エントリ。したがって、ISR を見つけるには、割り込み番号に 4 を掛ける必要があります。最初の質問は、CPU が割り込みを受け取るメカニズムに完全に混乱していることです。割り込みを発生させるには、まずデバイスが IRQ をプローブする必要があります。割り込み番号は「IRQで」CPUに向かって移動しますか? また、データバスに ISR アドレスを配置するデバイスのようなものも読みました。それは何ですか?ISR をオーバーライドするデバイスの概念は何ですか。CPU が割り込みをポーリングするデバイスの例をいくつか教えてもらえますか? そして、それらの ISR をどこで見つけますか?
2) 2 つのデバイスが IRQ を共有している場合 (その可能性は非常に高い)、それらの間で CPU はどのように異なるのでしょうか? 両方のデバイスが同じ優先度の割り込みを同時に発生させた場合はどうなるでしょうか。同じタイプのマスキングと優先度の低い割り込みがあることを知りましたが、この通信は CPU とデバイス コントローラ間でどのように行われるのでしょうか? この問題に対する PIC と APIC の役割を調べましたが、理解できませんでした。
読んでくれてありがとう。回答ありがとうございました。
linux-device-driver - ISR としてドライバー コードに関数を登録する方法
Linuxカーネル開発に関する以前の質問から得たフィードバックに続いて、
私は、既存のドライバーと比較し、そのコードから大幅に「借用」することによって (Linux カーネル v2.6.32 で) ドライバーを作成しました。ドライバーは正常に登録されています。init() と probe() は正常に動作しています。周辺機器のレジスタにもアクセスできます。:-)
しかし、私はIRQ/ISRについて少しぼんやりしています。周辺機器は入力デバイスであり、GPIO ピンで割り込みを発生させます。
現在の状態から先に進み、IRQ を処理して ISR 関数を実行するにはどうすればよいですか?
assembly - ARMv6 FIQ、割り込みの確認
i.mx35 armv6 コア プロセッサを使用しています。割り込み 62 を FIQ として構成し、ハンドラーをインストールして呼び出しています。現時点では、ハンドラーは出力ピンをトグルするだけなので、スコープでレイテンシーをテストできます。以下のコードでは、FIQ をトリガーすると、可能な限り高速に継続し、明らかに認識されていません。Interrupt Force Register を使用して FIQ をトリガーしているので、ソースがこれほど速くトリガーしていないことは確かです。FIQ ルーチンの AVIC で割り込み 62 を無効にすると、割り込みは 1 回だけトリガーされます。
ARM1136JF-S および ARM1136J-S テクニカル リファレンス マニュアルの VIC ポートに関するセクションを読み、適切な終了手順について説明しています。FIQ ハンドラーは 1 つしかないので、分岐する必要はありません。私が理解していない行は次のとおりです。
AckFinished がどうあるべきか、このコマンドが何をするべきかはわかりません。
私の FIQ ハンドラーは以下のとおりです。
最初の実行後にハンドラーを無効にすると、ハンドラーが正常に返され、通常のシステム操作が再開されます。そうしないと、常にトリガーされ、システムがハングしているように見えます。
コアが AVIC を認識していない、またはこの FIQ トリガーの別の原因がある可能性があるという私の仮定は正しいと思いますか? コアが AVIC を認識していない場合、それを認識するために何をする必要がありますか?
linux-kernel - 短い (5ms) フレーム データ転送中にすべての IRQ をブロックする方法
私はハードウェアとデバイス ドライバーの経験が豊富で、ハードウェアの制御には以前のバージョンの Linux を使用していました。私は最近、組み込み処理を使用した Linux とデバイス制御のゲームに戻ってきましたが、Linux の世界で (より良い方向に) 多くの変化があったことを発見しました。ただし、データ フレームの適切なデータ転送タイミングを確保するために、短時間 (5 ミリ秒) の間すべての割り込みをオフにする必要がある、非常に高速な SPI ベースのフレーム データ転送カーネル モジュールに関連するハードウェア制御の問題に取り組んでいます。Linux の「昔」では、save_flags - cli() - sti() フレームワークを使用して、クリティカル セクションの割り込みを無効にしていました。新しい (2.6.33 以降) Linux IRQ 制御フレームワーク内でこれを達成する最も簡単な方法は何ですか?
スコット
driver - キーボード割り込み
低レベルのデバイスドライバーについて勉強しています。割り込みと IRQ の間で混乱しています。キーボードをフックするサンプル ドライバ コードは、キーボード割り込みが 0x31 であることを示唆していますが、マイクロプロセッサに関する私の本では 0x09 と書かれています。「デバイス マネージャー -> キーボード -> リソース」を開くと、IRQ が 1 であることが示されます。
ありがとう、サンジーブ
c - カスタム RS485 プロトコル
分散システム内のシリアル通信用の単純なマルチドロップ RS485 プロトコルを作成しています。スレーブ デバイスが応答するために 20 ミリ秒のウィンドウが与えられるアドレス可能なモデルを使用しています。マスター uC は、接続されたデバイスを更新のためにポーリングし、それに応じて応答します。チェックサムを採用し、必要なオーバーラン予防策を講じて、接続されたデバイスが不正な形式のメッセージに応答しないようにします。この方法は、約 99% の状況で有効であることが証明されていますが、通信セッション中に新しいデバイスが導入されると、パケットが失われます。新しいデバイスを「ホット」に差し込むと、非常に短時間だけでも、スレーブ デバイスによって監視されている信号に悪影響が及びます。私はエンジニアリングのソフトウェア側にいます。しかし、TCP を再作成しようとせずにこの状況を緩和するにはどうすればよいでしょうか? ポーリング モデルを使用するのは、RTOS 機能を必要とせず、高速であり、アプリケーションで適切に機能するためです。基本的に考えて、各CPUに豊富なサイクルがあります。
assembly - 最新の PC で経過時間を測定する最も正確な方法は何ですか?
システム タイマーである IRQ0 を使用できることはわかっていますが、これは 14.31818MHz クロックに基づいていますよね? これ以上の精度を提供するものはありますか?
ありがとう。
編集: QueryPerformanceCounter が使用する Windows 関数を知っている人はいますか?