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
チカチカさせるためには、あとはsleepを入れて、forループで回せばよいと思う。