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 文件

#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操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值