ZYNQ: GPIO 之 MIO 控制 LED 实验

GPIO 之 MIO 控制 LED 实验目的

使用 GPIO 通过两个 MIO 引脚控制 PS 端两个 LED 的亮灭,实现底板上 PS_LED0、PS_LED1 两个 LED 灯同亮同灭的效果。
在这里插入图片描述

简介

ZYNQ PS 中的外设(如 USB 控制器、UART 控制器、I2C 控制器以及 GPIO 等等)可以通过 MIO(multiplexed I/O,多路复用 I/O)模块连接到 PS 端的引脚上,也可以通过 EMIO(extended multiplexed I/O interface,扩展多路 I/O 接口)连接到 PL 端的引脚。Zynq-7000 系列芯片一般有 54 个 MIO,

MIO 一览表
在这里插入图片描述
DATA_RO 是数据只读寄存器,通过该寄存器能够观察器件引脚上的值
DATA 是数据寄存器,该寄存器控制 GPIO 信号配置为输出时要输出的值
MASK_DATA_LSW 和 MASK_DATA_MSW 是数据掩码寄存器
DIRM 是方向模式寄存器,用于控制 I/O 引脚是用作输入还是输出。当 DIRM [x] == 0 时,输出驱动器被禁用,该引脚作为输入引脚使用。

在这里插入图片描述

硬件设计

创建 Vivado 工程

在“Hello World”实验的基础上进行
先打开“Hello World”实验的 Vivado 工程,打开后选择菜单栏的 File-> Project->Save As
在这里插入图片描述
在这里插入图片描述

使用 IP Integrator 创建 Processing System

在这里插入图片描述
在这里插入图片描述
点击OK ,按 Ctrl+S 快捷键保存 Diagram
在这里插入图片描述

连接到外设 LED 和 KEY 的 GPIO_MIO
在这里插入图片描述

生成顶层 HDL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成 Bitstream 文件并导出到 Vitis

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

软件设计

在 Vitis 中创建应用工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

		case XPLAT_ZYNQ:
			Input_Pin = 14;
			Output_Pin = 10;
			break;

修改为

		case XPLAT_ZYNQ:
			Input_Pin = 14;
			Output_Pin = 0;
			break;

在这里插入图片描述
在这里插入图片描述

#include "xparameters.h" //器件参数信息
#include "xstatus.h" //包含 XST_FAILURE 和 XST_SUCCESS 的宏定义
#include "xil_printf.h" //包含 print()函数
#include "xgpiops.h" //包含 PS GPIO 的函数
#include "sleep.h" //包含 sleep()函数
// MIO 引脚的高电平对应的是 LED 灯亮,低电平对应 LED 灯灭
//宏定义 GPIO_DEVICE_ID
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
//连接到 MIO 的 LED
#define MIOLED0 7 //连接到 MIO7
#define MIOLED1 8 //连接到 MIO8
XGpioPs Gpio; // GPIO 设备的驱动程序实例

int main()
{
int Status;
XGpioPs_Config *ConfigPtr;

print("MIO Test! \n\r");
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS){
return XST_FAILURE;
}
//设置指定引脚的方向:0 输入,1 输出
XGpioPs_SetDirectionPin(&Gpio, MIOLED0, 1);
XGpioPs_SetDirectionPin(&Gpio, MIOLED1, 1);
//使能指定引脚输出:0 禁止输出使能,1 使能输出
XGpioPs_SetOutputEnablePin(&Gpio, MIOLED0, 1);
XGpioPs_SetOutputEnablePin(&Gpio, MIOLED1, 1);

while (1) {
XGpioPs_WritePin(&Gpio, MIOLED0, 0x0); //向指定引脚写入数据:0 或 1
XGpioPs_WritePin(&Gpio, MIOLED1, 0x0);
sleep(1); //延时 1 秒
XGpioPs_WritePin(&Gpio, MIOLED0, 0x1);
XGpioPs_WritePin(&Gpio, MIOLED1, 0x1);
sleep(1);
}
return XST_SUCCESS;
}

在这里插入图片描述
在这里插入图片描述

下载验证

右键选择 gpio_mio 工程,在弹出的菜单中选择 Run as-> Launch on Hardware
在这里插入图片描述
在这里插入图片描述
完成比完美重要!!!
学习记录,侵权联系删除
来源:正点原子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

li星野

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

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

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

打赏作者

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

抵扣说明:

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

余额充值