EDK9.1iからSoftware Platform SettingsのInterrupt Handlersの設定が削除されました。このため、スターターキットガイドの11章に記載されている「割り込みハンドラの登録」ができません。
対処方法
対処方法は二通りあります。「方法1 静的に割り込みハンドラを登録」は、暫定的な対策です。Xilinx推奨の方法は「方法2 動的に割り込みハンドラを登録」になります。
方法1 静的に割り込みハンドラを登録
MSSファイルを修正し、静的に割り込みハンドラを登録します。- sz***-add_slot-********\xps_proj.mssを開く
- opb_sil00にint_handlerを追記し保存
BEGIN DRIVER PARAMETER DRIVER_NAME = opb_sil00 ・ ・ PARAMETER int_handler = timer_interrupt_handler, int_port = IP2INTC_Irpt # 追記 ・ ・ END
方法2 動的に割り込みハンドラを登録
割り込み初期化時に動的に割り込みハンドラを登録します。
- sz***-add_slot-********\code\interrupt.cを開く
- 関数 interrupt_init()に、XIntc_RegisterHandlerを追記し保存
int interrupt_init(void) { ・ ・ /*enable interrupt */ XIntc_RegisterHandler(XPAR_SYSTEM_INTC_BASEADDR,XPAR_SYSTEM_INTC_OPB_SIL00_0_IP2INTC_IRPT_INTR, (XInterruptHandler)timer_interrupt_handler, (void *)0); // 追記 ・ ・ }
- sz***-add_slot-********\drivers\opb_sil00_v*_**_*\opb_sil00.cを開く
- 関数 OPB_SIL00_Intr_DefaultHandler()の、xil_printfを削除し保存
void OPB_SIL00_Intr_DefaultHandler(void * baseaddr_p) { ・ ・ // xil_printf("IP Interrupt! Status register (ISR) value : 0x%08x \n\r", IntrStatus); // 削除 ・ ・ }
これは、自動生成されるデフォルトハンドラで使用しているxil_printf()が、stdioを使用しない環境では生成されないために、リンクエラーが発生することを避けるためです。
補足
Xilinx アンサー データベースに情報が掲載されております。あわせてご参照ください。