Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Zynqのqemu (その6)


Zynqのqemu (その5)の続きです。

割り込みがあるI/Oに対しては、次のような関数で割り込みを設定します。
 257     sysbus_connect_irq(sysbus_from_qdev(dev), 0, pic[26]);
sysbus_connect_irq関数でI/Oの割り込みをpic[26]の値に設定します。

I/Oのレジスタと割り込みを同時に設定できる関数も用意されています。
 243     sysbus_create_simple("xilinx,lqspi", 0xE000D000, pic[19]); //IRQ 51
 244
 245     sysbus_create_simple("xilinx,can", 0xE0008000, pic[28]); // IRQ 60
 246     sysbus_create_simple("xilinx,can", 0xE0009000, pic[51]); // IRQ 83
 247
 248     sysbus_create_simple("cadence,iic", 0xE0004000, pic[25]); // IRQ 57
 249     sysbus_create_simple("cadence,iic", 0xE0005000, pic[48]); // IRQ 80
sysbus_create_simple関数にて、対応するI/O(第一引数:文字列で指定)の開始アドレスと割り込みを設定します。

また、複数の割り込みを設定する場合は、sysbus_create_varargs関数を使います。
 265     sysbus_create_varargs("cadence_ttc", 0xF8001000,
 266             pic[10], pic[11], pic[12], NULL); // IRQ 42
 267     sysbus_create_varargs("cadence_ttc", 0xF8002000,
 268             pic[37], pic[38], pic[39], NULL); // IRQ 69
 269
 270     sysbus_create_varargs("zynq_gpio", 0xE000A000, pic[20], NULL); // IRQ 52

次回は、'sysbus_create_simplesysbus_create_arargsを見てみます。

検証、Verification、FPGA