ザイリンクスでの割り込みのコンフィギュレーションとセットアップ
組み込みシステムの設計において、割り込み処理は非常に重要な部分です。このブログでは、ザイリンクス環境で割り込みをコンフィギュレーションおよびセットアップする方法について説明します。
以下は、割り込みをセットアップおよび構成するためのコード例です。
void platform_setup_interrupts(void)
{
Xil_ExceptionInit();
XScuGic_DeviceInitialize(INTC_DEVICE_ID);
/*
* Connect the interrupt controller interrupt handler to the hardware
* interrupt handling logic in the processor.
*/
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
(Xil_ExceptionHandler)XScuGic_DeviceInterruptHandler,
(void *)INTC_DEVICE_ID);
/*
* Connect the device driver handler that will be called when an
* interrupt for the device occurs, the handler defined above performs
* the specific interrupt processing for the device.
*/
XScuGic_RegisterHandler(INTC_BASE_ADDR, TIMER_IRPT_INTR,
(Xil_ExceptionHandler)timer_callback,
(void *)&TimerInstance);
/*
* Enable the interrupt for scu timer.
*/
XScuGic_EnableIntr(INTC_DIST_BASE_ADDR, TIMER_IRPT_INTR);
return;
}
目次
例外処理の初期化
Xil_ExceptionInit();
割り込みの処理を開始する前に、まず例外処理システムを初期化する必要があります。これは、関数を呼び出すことによってXil_ExceptionInit()
行われます。
割り込みコントローラを初期化する
XScuGic_DeviceInitialize(INTC_DEVICE_ID);
XScuGic_DeviceInitialize(INTC_DEVICE_ID);
関数を呼び出して、特定のデバイス ID で割り込みコントローラーを初期化します。
割り込みハンドラを登録する
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,
(Xil_ExceptionHandler)XScuGic_DeviceInterruptHandler,
(void *)INTC_DEVICE_ID);
この関数を使用してXil_ExceptionRegisterHandler
、割り込みコントローラーの割り込みハンドラーをプロセッサーのハードウェア割り込み処理ロジックに接続します。
デバイスドライバーハンドラーを接続する
XScuGic_RegisterHandler(INTC_BASE_ADDR, TIMER_IRPT_INTR,
(Xil_ExceptionHandler)timer_callback,
(void *)&TimerInstance);
この関数を使用してXScuGic_RegisterHandler
、デバイス ドライバー ハンドラーを接続します。このハンドラーは、デバイスで割り込みが発生したときに呼び出されます。
割り込みを有効にする
XScuGic_EnableIntr(INTC_DIST_BASE_ADDR, TIMER_IRPT_INTR);
XScuGic_EnableIntr
SCUタイマの割り込みを許可する機能を使用します。
以上がこのコードの基本的な説明です。この記事では、ザイリンクス環境で割り込みと例外を操作するためにザイリンクスが提供するXScuGic_
およびファミリの関数を使用します。Xil_Exception
このブログが、ザイリンクスでの割り込みのコンフィギュレーションおよびセットアップ方法の理解に役立つことを願っています。ご質問がございましたら、下のメッセージ領域にご質問ください。できるだけ早く返信させていただきます。