Zynq-7000 を使用する際、ソフトウェア割込みをかけたい。でもその為のライブラリがなぜか使えない。ならばレジスタを直接たたけばいいじゃない
という事でレジスタを調査した時のメモ
#ソフトウェア生成割込み用レジスタ説明(原文)
#内容メモ
見た感じ、シェル上でdevmemを打つだけでソフトウェア割込みができそう
(※devmem <物理アドレス(原文で言うAbsolute Address)> <サイズ> [書き込みたい値])
レジスタに書き込む値は以下を参考に。
-
Reserved[31:26]
意味はない。後々使われる可能性あるかもなって所 -
TargetListFilter[25:24]
割込み信号を出す対象を決める領域。
0b00 : CPUTargetListで指定した対象に割込み信号を出す
0b01 : すべてのCPUに割込み信号を出す
0b10 : 割込み信号を出してくれといったCPUにのみ出す
0b11 : 予約値。意味はない -
CPUTargetList[23:16]
TargetListFilterで0b00を入力した際に利用。
例えば、CPUTargetList[0]はCPU0を意味する。CPUTargetList[0]=1とすると、CPU0に割込みをかけることになる。 -
SBZ[14:4]
SBZが何者か分からず。ほかの資料を読むとReserve扱いされているので、使用しなくても大丈夫か -
SGIINTID(INTID)[3:0]
ソフトウェア割込みID番号。0~15で選択。
例: 0b0011なら割込みIDは3となる
#devmemで割込みを出してみよう
devmem 物理アドレス サイズ 値
例:
devmem 0xF8F01F00 32 0x10000
CPU0に割込みID No.0の割込みを送信(セキュリティなし)
(これはまだ実機で試してない。試したら追記します)
※うまくいきました。割り込み信号が上記で送信できたこと確認済みです
レジスタは32bitで0b000000 | 00 | 00000001 | 00 | 00000000 | 0000
毎度のことながら、ただのメモ書きでした