ZYNQ从放弃到入门(二)-PS端 GPIO

2022-04-14 10:36:27 浏览数 (3)

ZYNQ从放弃到入门(二)-PS端 GPIO

本博客着眼于驱动 GPIO 连接的 LED(PS 端)。虽然使 LED 闪烁是一项非常简单的任务,但通过驱动使 LED 闪烁所需的步骤,我们可以进一步探索 Zynq SoC 的其他方面,例如其定时器和中断。我将在以后的博客中讨论这些主题。Zynq SoC 具有多个通用 I/O 引脚,它们组合起来创建一个 10 位宽的通用 I/O 端口,如下所示。此 GPIO 组以混合电压分布在两个 MIO 组中。在本例中,我们的 LED 将连接到 MIO 47。

Xilinx 提供了许多驱动程序来简化 Zynq SoC 的 GPIO 的使用。支持文档和示例的链接可以在开发板支持包中的 system.mss 文件中找到:驱动 GPIO 所需的代码非常简单。文件 xparameters.h 包含 GPIO 实例的数量、系统内的 GPIO 设备 id 以及上限和下限地址范围:驱动 IO 所需的宏和函数在文件 xgpiops.h 中定义,该文件位于BSP 文件包。该文件包含 Zynq SoC 的 GPIO 所需的配置和初始化函数,以及支持读取和写入 GPIO 的函数,这毕竟是我们最感兴趣的。要使 LED 闪烁,我们需要执行以下操作:

1. 在主应用程序代码中包含 xgpiops.h 文件

代码语言:javascript复制
#include "xgpiops.h" 

2. 定义我们想要切换的输出引脚。在这种情况下,它是 10 组中的引脚 8,MIO 47:

代码语言:javascript复制

#define ledpin 47 

3. 声明驱动程序实例:XGpioPs Gpio;

代码语言:javascript复制

XGpioPs Gpio; /* The driver instance for GPIO Device. */

4. 配置 GPIO 并在希望使用的函数中定义初始化所需的状态和指针变量:

代码语言:javascript复制
int Status;

XGpioPs_Config *GPIOConfigPtr; 

5.初始化GPIO驱动:

代码语言:javascript复制
//GPIO初始化 
GPIOConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
Status = XGpioPs_CfgInitialize(&Gpio, GPIOConfigPtr, GPIOConfigPtr ->BaseAddr);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

6. 设置GPIO管脚方向,使能输出:

代码语言:javascript复制
XGpioPs_SetDirectionPin (&Gpio, ledpin, 1); 
XGpioPs_SetOutputEnablePin(&Gpio, ledpin, 1); 

7.将所需的输出值写入GPIO引脚:

代码语言:javascript复制
XGpioPs_WritePin(&Gpio, ledpin, 0x0); 

此写入功能可在循环中使用,以使 LED 以所需的速率闪烁,但是也可以使用此方法来驱动连接到 GPIO 引脚的任何东西。使用XGpioPs_ReadPin(&Gpio,INPUT_PIN)函数以类似的方式读取 GPIO 引脚。

PS端GPIO操作值得花一些时间阅读所提供的文档和示例,因为 Zynq SoC 的 GPIO 是一种非常灵活的资源。

❝ug585-Zynq-7000-全可编程SOC技术参考手册

第十四章介绍了裸机程序GPIO操作。

0 人点赞