2020/03/15

ultra96でLチカを試す PS側のLED

ZYNQ   

Qiitaの記事に、ZYBO (Z7-20)のLチカの記事あるので、それをベースにLチカをしてみる。
https://qiita.com/iwatake2222/items/39d2ed00fa88a1204fce

ultra96の回路図を見てLEDの配置を確認する

https://www.avnet.com/opasdata/d120001/medias/docus/193/Ultra96-V2%20Rev1%20Schematic.pdf

LEDは、
MIO20_PS_LED0
MIO19_PS_LED1
MIO18_PS_LED2
MIO17_PS_LED3

につながっていることがわかる。

一方、Zynqの設定を確認する。

ultra96のチュートリアル01で作成した設計したものである。
https://www.element14.com/community/docs/DOC-91053/l/01ultra96vivadointro2018201zip

Open Block Design から、ZYNQ Ultra Scale+を選択(ダブルクリック)して
I/O Configuraitonをクリックして、Low Speed → I/O Peripherals→GPIOを
確認する。

MIO20_PS_LED0 → gpio0[20]
MIO19_PS_LED1 → gpio0[19]
MIO18_PS_LED2 → gpio0[18]
MIO17_PS_LED3 → gpio0[17]

に接続されていることがわかる。

GPIOの説明は、

レジスタ概要は、テクニカルリファレンスマニュアルから参照する。
https://japan.xilinx.com/support/documentation/user_guides/j_ug1085-zynq-ultrascale-trm.pdf

実際のアドレスは、アドレスマップから参照する。
https://japan.xilinx.com/html_docs/registers/ug1087/ug1087-zynq-ultrascale-registers.html

多分、vivadoで、見ると、gpio0となっているのが、アドレスマップのGPIO Bank0に対応しているのではないかと思う。

ということで、GPIOのベースアドレスは、アドレスマップから、0xff0a0000だということがわかる

GPIOの方向の設定は、0x204、出力有効レジスタは0x208にある。

最後に、出力する値は、0x40になる。

制御するプログラムコードになる。

———————————
    uint32_t value = 1<<20;//4個のLEDを全部制御する。
     value |= 1<<19;
     value |= 1<<18;
     value |= 1<<17;

     xil_printf(“%xn”, value);

    uint32_t *ptr = (uint32_t*)(GPIO_OFFSET_DIRM);//出力方向設定アドレス

     *ptr = value;//出力方向設定を出力に、

     ptr = (uint32_t*)(GPIO_OFFSET_OEN);//出力有効設定あドレス

     *ptr = value;//出力を有効に。

     uint32_t value2 = ~(1<<20);//4個のLEDを全部消灯にしたい。
     value2 &= ~(1<<19);
     value2 &= ~(1<<18);
     value2 &= ~(1<<17);

     ptr = (uint32_t*)(GPIO_OFFSET_DATA);//出力値のアドレス

     xil_printf(“%p %xn”, ptr, value2);
     *ptr = value2;//4個のLEDを消灯にする。

———————–
これで、LEDが全部消えた

そもそもultra96のUser LEDがどこにあるかっていうと、

図面がここにあるん。
https://www.element14.com/community/docs/DOC-91042/l/ultra96-v2-rev1-mechanical-drawing

よく見ると、USER LEDとシルクで書いてありそう。↑のプログラムを動かすと、全部消灯されたのが確認できた。

チカチカさせるためには、あとはsleepを入れて、forループで回せばよいと思う。

« »