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

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

4c7d0b5482788507758694d9f78f1235.png

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

52cff4d726827fe8db8f4d2738db54c7.png

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

d63ce67ceec291f944ea1d37483d3885.png 45383ee8391f963c962fdb85a0c3897a.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操作。

c6d43d7b207913ca6dd3ab4dd3b9896a.png

ZYNQ从放弃到入门(一)MIO

Zynq是一款由Xilinx公司推出的高度集成的可编程系统芯片,它融合了双核ARM Cortex-A9处理器和FPGA可编程逻辑单元。在使用Zynq进行系统开发时,我们可以选择将系统引导(启动)方式设置为从EMMC(嵌入式多媒体卡)启动。 EMMC是一种高集成度的存储设备,类似于SD卡,通常用于嵌入式系统中。在Zynq中,EMMC可以作为启动设备,用于存储和加载引导镜像(Boot Image)。 首先,我们需要将引导镜像生成为可以在EMMC上加载的格式,通常为BOOT.BIN文件。BOOT.BIN文件包含了FSBL(First Stage Boot Loader)和bitstream文件。FSBL是Zynq启动过程中的第一阶段引导加载程序,它负责初始化硬件、加载FPGA bitstream以及启动处理器核心。 然后,通过将该BOOT.BIN文件写入EMMC存储设备中,可以利用Zynq的启动ROM程序来从EMMC引导系统。启动ROM程序会首先加载FSBL到处理器的内存中运行,并由FSBL继续完成引导过程。 在FSBL的引导过程中,它会首先加载FPGA的bitstream,通过配置FPGA可编程逻辑。接着,FSBL会初始化处理器并加载U-Boot引导加载程序。U-Boot负责加载Linux内核映像和根文件系统到内存中,并将控制权转交给Linux内核。 通过这种方式,Zynq从EMMC启动系统能够快速、稳定地加载并运行复杂的嵌入式应用程序。同时,通过调整引导镜像的配置,还可以轻松实现其他启动方式,如从SD卡、网络等启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值