0

このコードをコメントよりもはるかに詳細に理解する必要があります。

void vicInstallIRQhandler(pVoidFunc_t pISR, uint32_t priority,
                      uint32_t vicIntSource) {

 // store the handler address in the correct slot in the vector 

 *(&VICVECTADDR0 + vicIntSource) = (unsigned long)pISR;

 // set the priority of the interrupt for this slot

 *(&VICVECTPRIORITY0 + vicIntSource) = priority;

 // clear FIQ select bit i.e. assign this interrupt source to IRQ

 VICINTSELECT &= ~(1UL << vicIntSource);

 // enable the interrupt

 VICINTENABLE |= (1UL << vicIntSource);
}
4

2 に答える 2

0

実際、コメントはかなり良いです。しかし、私はもっと説明しようとします。pISR全体として、関数は実際のサービスルーチンへのポインター、その優先度、および (物理) 割り込みのインデックスによって記述される割り込みハンドラーを設定します。

CPU では、アドレスと対応する優先順位が、開始アドレスVICVECTADDR0とそれぞれのテーブルに格納されVICVECTPRIORITY0ます。正しいテーブル エントリは、ベース アドレスに割り込みインデックスを追加することによって検出されます。

VICINTSELECTおよびVICINTENABLEはビット ベクトルであり、割り込みインデックスによってアドレス指定されたビットがそれぞれ設定および設定解除されます。のセマンティクスはVICINTSELECT、割り込み (クリア ビット) 用のサービス ルーチンが存在することを CPU に通知することです。のセマンティクスはVICINTENABLE、割り込みがマスクされていない、つまり有効になっている (ビットを設定する) ことを CPU に伝えることです。

私の説明が少しでもお役に立てば幸いです。

于 2013-01-04T22:31:53.233 に答える
-1

@Wrekaarそれが逐語的だと思う理由は何ですか?コピペする前にちょっと文言をいじってみようかな(冗談)

于 2013-01-07T03:09:26.420 に答える