1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zynq ARMでソフトウェア割込みを送信する方法(レジスタ使用)

Last updated at Posted at 2018-04-22

Zynq-7000 を使用する際、ソフトウェア割込みをかけたい。でもその為のライブラリがなぜか使えない。ならばレジスタを直接たたけばいいじゃない

という事でレジスタを調査した時のメモ

#ソフトウェア生成割込み用レジスタ説明(原文)

SGI_1.png

SGI_2.png

SGI_3.png

#内容メモ
見た感じ、シェル上で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に割込みをかけることになる。

  • SATT[15]
    セキュリティ関連項目。
    SGI_4.png

  • 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

毎度のことながら、ただのメモ書きでした

#参考文献
Zynq-7000 All Programmable SoC テクニカル リファレンス マニュアル

ARM Generic Interrupt Controller Architecture Specification

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?