AXI GPIO实例:
下面的例子只是展示了如何使用AxiGPIO类,实际使用的时候,可能会有LED, Button, Switches和RGBLED等扩展类可供使用。 在一个overlay加载了后,一个AxiGPIO实例可以立即通过AXI GPIO控制器的名字进行创建调用。
from pynq import Overlay
from pynq.lib import AxiGPIO
ol = Overlay("base.bit")
led_ip = ol.ip_dict['gpio_leds']
#这行代码从ip_dict字典中获取名称为'gpio_leds'的IP核实例,并将其赋值给变量led_ip
switches_ip = ol.ip_dict['gpio_switches']
leds = AxiGPIO(led_ip).channel1
#将ip核实例赋值给AXI GPIO的channel1
switches = AxiGPIO(switches_ip).channel1
简单的读写:
mask = 0xffffffff
leds.write(0xf, mask)#全1,全部点亮
switches.read()
把AXI GPIO当做数组处理:
switches.setdirection("in")
switches.setlength(3)
switches.read()
我们可以在pynq.lib.axigpio Module部分中知道更多的有关读写等操作的例子。在下面的文件中,我们可以找到一些有关按钮与LED的例子。/base/board/board_btns_leds.ipynb
AxiIIC
AxiIIC类提供了对AXI IIC控制器IP的读与写。send()和receive()方法可以用来读与写。
send(address, data, length, option=0)
- Address是外部设备IIC的地址
- Data是一个被发送到IP的字节数组
- length是发送的字节数
- option允许一个IIC重复运行
receive(address, data, length, option=0)
- Address是外部设备IIC的地址
- Data是一个被发送到IP的字节数组
- length是发送的字节数
- option允许一个IIC重复运行
更多有关AxiIIC模块和读写等操作可以在pynq.lib.axiiic Module 中找到。
DMA(直接内存访问)
PYNQ支持AX central DMA IP。DMA可以在PS DRAM与PL的快速交互中发挥出色的效果。DMA类只支持简单模式。 DMA有一个AXI lite控制接口,一个读写通道以及连接到一个IP的流端口。