私たちのグループは、カスタム ドライバを使用して、共有 I2C バス上で 4 つの MAX3107 UART と接続しています。4 つの MAX3107 の割り込みは、ARM9 プロセッサ (LPC3180 モジュール) の GPIO ピンに接続されます (つまり、論理和による共有割り込み)。これらのデバイスの 1 つまたは複数が割り込みを行うと、レベル センシティブな割り込みとして構成されている GPIO ラインが低くなります。私の質問は、ハンドラ コード内の特定の割り込み行を無効にする必要があるかどうかに関するものです。(Linux 2.6.10 を実行していることを付け加えておきます)。
割り込みに関するいくつかの ARM 固有のアプリケーション ノートを読んだところによると、ARM プロセッサが割り込みを受け取ると、対応する割り込み行が自動的に無効化 (マスク?) されるようです (この場合、これは、選択した GPIO ピン)。これが正しい場合、割り込みハンドラー コードでこの GPIO ピンの割り込みを無効にする必要はないように思われます。別の言い方をすれば、割り込みが発生したときに ARM プロセッサが GPIO 割り込みを自動的に無効にする場合、どちらかといえば、割り込みハンドラー コードは、デバイスが処理された後に割り込みを再度有効にするだけでよいように思われます。
使用している割り込みハンドラー コードにdisable_irq_nosync(irqno);
は、ハンドラーの最初と対応するenable_irq()
ハンドラーの最後に含まれています。ARM プロセッサが (ハードウェアで) 割り込みラインを既に無効にしている場合、これらの呼び出し (つまり、 への呼び出しにdisable_irq_nosync()
続いてenable(irq())
?