碎碎思 · 2022年04月02日

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

59b9ef2730abdd62c0dcfdad3db08dca.jpg

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

d4d7b96bf704ccf8b755dcc52029f0ce.png

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

45f3293b9e8ad131aa1890b03426ea12.png

8c92c183caa3272e101a0871f68a9555.png

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

#include "xgpiops.h" 

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

#define ledpin 47 

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

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

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

int Status;

XGpioPs_Config *GPIOConfigPtr; 

5.初始化GPIO驱动:

//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管脚方向,使能输出:

XGpioPs_SetDirectionPin (&Gpio, ledpin, 1); 
XGpioPs_SetOutputEnablePin(&Gpio, ledpin, 1); 

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

XGpioPs_WritePin(&Gpio, ledpin, 0x0); 

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

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


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

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

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA技术干货请关注FPGA 的逻辑技术专栏。
推荐阅读
关注数
10526
内容数
516
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息