ZYNQ DRIVER之GPIO

地图图片

重要特性:

  • 支持动态编程分配一个channel的各位为输出或输入
  • 支持reset之后,各个bit的值不同
  • 支持产生中断请求(这个怎么用?)( The channels can be configured to generate an interrupt when a transition on any of their inputs occurs.)

image

关于能运行的最高速度:

image

对GPIO不同配置下,会耗费的FPGA资源:

image

image

看到这里,我还是没太搞清楚如何配置各个bit随意为输入或者输出,但是可以看到上表中的寄存器GPIO_DATA应该是写和读复用的,在程序中,也是对应的一句读语句,可能把所有的一个channel的值都读到这个寄存器中,然后根据需要取用某个bit,然后再写的语句,也是把整个寄存器都写上。或许是这样吧。

image

这个能很好的解释我关于配置bit的疑问:

image

具体对每个bit配置为输入或输出,是由三态门寄存器实现的。

驱动使用:

image

这是设置bit的方向,一开始觉得很复杂,但是其实就是个channel1或者channel2设置一个u32,这个u32的值可以具体地去控制每个bit的方向,和单片机里的DDRA是类似的。

而初始化GPIO的函数也是比较简单的:

image

在此之前会定义一个structure,这个结构体的->BaseAddress就是初始化的地址。

下面这个函数是做static初始化的:(是不是上面那个函数是在运行过程中需要不断地去改变一个口的输入输出状态,貌似不是这样的,我现在没太搞明白这两个初始化函数的区别?)

image

原文地址:https://www.cnblogs.com/uvw654/p/3696635.html