cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Zynq-7000 および Zynq MPSoC デバイスでの PL から PS への割り込みを設定するためのレジスタ

katsuki
Xilinx Employee
Xilinx Employee
4 0 1,324

概要

 

このブログでは、Zynq-7000 および Zynq MPSoC デバイスで、 PL 部からPS 部への割り込みを使用する場合に確認する必要がある、属性設定用のレジスタを紹介します。割り込みプログラムを作成する際の、ご参考になれば幸いです。本ブログは、株式会社 PALTEK 瀧澤様が作成されたブログです。

 

1. Zynq-7000 デバイスの場合


Cortex-A9 コアは、nIRQとnFIQの 2 つの割り込みポートを持っています。

PL から、この割り込みポートに接続するためには、CoreX_nFIQ ポートか CoreX_nIRQ ポート、またはは IRQF2P ポートを使用します。

優先度の高い割り込みについては、一般的に CoreX_nFIQ ポートや CoreX_nIRQ ポートを使用します。

 

1.png

 

1.1 センシティビティの設定


1.1.1 CoreX_nFIQ、CoreX_nIRQ の場合


CoreX_nFIQ、CoreX_nIRQ は PPI (プライベートペリフェラル割り込み) なので、センシティビティを変更することはできません。

 

1.png

 

1.1.2 IRQF2P の場合


IRQF2P は、立ち上がりエッジ か High レベルを選択できます。

尚、Rising edge をGIC(汎用割り込みコントローラー)が認識するためには、クロック「CPU_2x3x」の、2 サイクル以上のパルス幅が必要です。

 

2.png

 

次に、関連する設定レジスタをに示します。

詳細は、『Zynq-7000 デバイス テクニカルリファレンスマニュアル』(UG585 日本語版 英語版)を参照してください。

 

IRQF2P [7:0](IRQ ID# = 68:61)の設定レジスタ


ICDICFR3 レジスタ(アドレス0xF8F01C0C)

 

3.png

 

ICDICFR4 レジスタ(アドレス0xF8F01C10

 

4.png

 

IRQF2P[15:8](IRQ #ID = 91:84)の設定レジスタ


ICDICFR5レジスタ(アドレス0xF8F01C14)

 

 

111.png

 

1.2 ターゲット CPU の設定


IRQF2P は、割り込みの入力先を、CPU#0 かCPU#1 の片方または両方に設定できます。

割り込み ID と設定レジスタの関係は、次のように定義されています。

 

6.png

 

2. Zynq MPSoC デバイスの場合


PL から PS への割り込み信号には、SPI(共有ペリフェラル割り込み)と SPI 以外の FIQ/IRQ が用意されています。

SPI(pl_ps_irq0, pl_ps_irq1)は、ほかのペリフェラルからの割り込みと同様の手続きで処理できます。

割り込み ID が各ビットに割り当てられており、その割り込み ID は、APU と RPU から、同じ ID 番号で扱うことができます。

 

例)pl_ps_irq0[0] の割り込み信号は、APU、RPU 共に ID=121 として扱います。

 

優先度の高い割り込みについては、一般的に FIQ/IRQ を使用します。

 

7.png

 

2.1 割り込み ID の割り当てについて

 

割り込みIDは、次のように割り当てられています。

 

8.png

 

詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』(UG1085 日本語版 英語版 )を参照してください。

 

9.png

 

10.png

 

 

2.2 センシティビティの設定

 

2.2.1 FIQ/IRQ の場合

 

pl_ps_apugic_fiq、pl_ps_apugic_irq、nfiq0_lpd_rpu、nirq0_lpd_rpu、nfiq1_lpd_rpu、およびnirq1_lpd_rpu は、

「CPU プライベートペリフェラル割り込み」であり、センシティビティを変更することはできません。

PLから入力する際の極性は、アクティブ High です。


2.2.2 pl_ps_irq0/1の場合

 

Active High または Rising Edge の選択ができます。

尚、Rising Edge の場合、LSBUS クロックの 2 サイクル以上のパルス幅が必要です。

設定用レジスタは、GICD_ICFGR[0:11] (GIC400) です。

レジスタの詳細については、Arm 社の仕様書を参照してください。

 

Capture.PNG

 

2.3 ターゲット CPU の設定


pl_ps_irq0/1 は、SPI(共有ペリフェラル割り込み)なので、ターゲット CPU を指定できます。


2.3.1 APU(GIC-400)の場合


GICD_ITARGETSR レジスタで設定します。1つの ID に 8 ビットが割り当てられています。

レジスタの詳細については、Arm社の仕様書を参照してください。

 

a.png

 

 

 

b.png

 

 

2.3.2 RPU(PL-390) の場合


enable_targets_spi_INTID レジスタで設定します。RPU (PL-390) の場合、1 つの ID に8 ビットが割り当てられています。

 

222.PNG

 

まとめ

 

このブログでは、PL から PS への割り込みを使用するときに設定が必要な、関連するレジスタを紹介しました。

 


参照資料

 

Zynq Ultrascale+ デバイス テクニカル リファレンス マニュアル 日本語版 英語版

Zynq-7000 デバイス テクニカル リファレンス マニュアル 日本語版 英語版

ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification