i.mx35 armv6 コア プロセッサを使用しています。割り込み 62 を FIQ として構成し、ハンドラーをインストールして呼び出しています。現時点では、ハンドラーは出力ピンをトグルするだけなので、スコープでレイテンシーをテストできます。以下のコードでは、FIQ をトリガーすると、可能な限り高速に継続し、明らかに認識されていません。Interrupt Force Register を使用して FIQ をトリガーしているので、ソースがこれほど速くトリガーしていないことは確かです。FIQ ルーチンの AVIC で割り込み 62 を無効にすると、割り込みは 1 回だけトリガーされます。
ARM1136JF-S および ARM1136J-S テクニカル リファレンス マニュアルの VIC ポートに関するセクションを読み、適切な終了手順について説明しています。FIQ ハンドラーは 1 つしかないので、分岐する必要はありません。私が理解していない行は次のとおりです。
STR R0, [R8,#AckFinished]
AckFinished がどうあるべきか、このコマンドが何をするべきかはわかりません。
私の FIQ ハンドラーは以下のとおりです。
ldr r9, IOMUX_ADDR12
ldr r8, [r9]
orr r8, #0x08 @ top LED
str r8,[r9] @turn on LED
bic r8, #0x08 @ top LED
str r8,[r9] @turn off LED
subs pc, r14, #4
IOMUX_ADDR12: .word 0xFC2A4000 @remapped IOMUX addr
最初の実行後にハンドラーを無効にすると、ハンドラーが正常に返され、通常のシステム操作が再開されます。そうしないと、常にトリガーされ、システムがハングしているように見えます。
コアが AVIC を認識していない、またはこの FIQ トリガーの別の原因がある可能性があるという私の仮定は正しいと思いますか? コアが AVIC を認識していない場合、それを認識するために何をする必要がありますか?