GPIO,MIO,EMIO,LED的关系是什么

参考视频:

FPGA小白到精通共10讲:MIO GPIO结构简介_哔哩哔哩_bilibili

GPIO,MIO,EMIO的全称是什么

GPIO: General-Purpose Input/Output

MIO: Multiplexed Input/Output

EMIO: Extended Multiplexed Input/Output

关系图

将MIO配置成别的

MIO 引脚的配置原理

  • 多路复用(Multiplexing):MIO 引脚的核心机制是多路复用。Zynq 的处理系统(PS)包含了多种外设(如 GPIO、UART、SPI 等),而 MIO 引脚的数量有限。通过多路复用技术,每个 MIO 引脚可以根据配置选择用于不同的外设功能。

  • 功能选择:每个 MIO 引脚有多个预定义的功能,这些功能通过特定的配置寄存器选择。例如,一个 MIO 引脚可以被配置为 UART 的 Tx 引脚,也可以被配置为 SPI 的时钟引脚,具体取决于如何设置该引脚的功能。

通过配置MIO实现别的功能

如下图,MIO的第16到21。不能同时被定义为SD和SP。因为冲突了。

如下图,可以将uart即串口定义到mio的48到49.

GPIO的实现

EMIO的实现

下面的这段不理解.

、如下图所示目标,他的机理是什么呢?

代码和相应的注释

/*
 * main.c
 *
 *  Created on: 2024年8月26日
 *      Author: Administrator
 */


#include "xparameters.h"
#include "xgpiops.h"
#include "xstatus.h"
#include "xplatform_info.h"
#include <xil_printf.h>

// XPAR_XGPIOPS_0_DEVICE_ID 实际上是宏定义的0
#define GPIO_DEVICE_ID  	XPAR_XGPIOPS_0_DEVICE_ID
#define LED_MIO_0			7
#define LED_MIO_1			8

// EMIO位宽为1,是54,位宽为2,是55,依次类推
#define LED_EMIO_0			54


/* The driver instance for GPIO Device. */
XGpioPs Gpio_ps;
int main()
{
// 实例化一个GPIO的配置指针
	//	typedef struct {
	//		u16 DeviceId;		/**< Unique ID of device */
	//		u32 BaseAddr;		/**< Register base address */
	//	} XGpioPs_Config;
	XGpioPs_Config *Gpio_ConfigPtr;

/* Initialize the GPIO driver. */
	// 传入一个设备ID,获取基地址等指针
	Gpio_ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
	// 返回值可以不要,因为正常情况下不会失败
	XGpioPs_CfgInitialize(&Gpio_ps, Gpio_ConfigPtr,Gpio_ConfigPtr ->BaseAddr);

// 设置管脚的方向
	// void XGpioPs_SetDirectionPin(XGpioPs *InstancePtr, u32 Pin, u32 Direction)
	// InstancePtr是传入的结构体的指针,pin是管脚的MIO编号,Direction,1代表输出,0代表输入
	XGpioPs_SetDirectionPin(&Gpio_ps, LED_MIO_0	, 1);
	XGpioPs_SetDirectionPin(&Gpio_ps, LED_MIO_1	, 1);
	XGpioPs_SetDirectionPin(&Gpio_ps, LED_EMIO_0, 1);

// 使能GPIO的管脚
	XGpioPs_SetOutputEnablePin(&Gpio_ps, LED_MIO_0	, 1);
	XGpioPs_SetOutputEnablePin(&Gpio_ps, LED_MIO_1	, 1);
	XGpioPs_SetOutputEnablePin(&Gpio_ps, LED_EMIO_0	, 1);

// 给管脚写入数据
	while(1)
	{
		XGpioPs_WritePin(&Gpio_ps, LED_MIO_0	, 0x0);
		XGpioPs_WritePin(&Gpio_ps, LED_MIO_1	, 0x0);
		XGpioPs_WritePin(&Gpio_ps, LED_EMIO_0	, 0x0);

		sleep(1);

		// 我在板子上面的LED
		XGpioPs_WritePin(&Gpio_ps, LED_MIO_0	, 0x1);
		// 没有连东西的MIO
		XGpioPs_WritePin(&Gpio_ps, LED_MIO_1	, 0x1);
		// 这个EMIO能够在XDC文件里面配置,我绑定了扩展板的led
		XGpioPs_WritePin(&Gpio_ps, LED_EMIO_0	, 0x1);

		sleep(1);
		print("output!");
	}

// 读取管脚
//	Data = XGpioPs_ReadPin(&Gpio, Output_Pin);



	return 0;
}

输出和板子的情况

并且此时的板子上面的灯和扩展板的灯是亮的

PS和PL联合调试,查看ila

要使用ila,这里不做勾选

在vivado中拉出ila

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值