ZYNQ之MIO

MIO简介

GPIO 是英文“general purpose I/O”的缩写,即通用的输入/输出。它是 ZYNQ PS 中的一个外设,用于观测和控制器件引脚的状态。
GPIO 分为 4 个 Bank,其中 Bank0和 Bank1 连接到 MIO;而 Bank2 和 Bank3 连接到 EMIO。

在这里插入图片描述

MIO寄存器简介

在这里插入图片描述

  1. DATA_RO 是数据只读寄存器,通过该寄存器能够观察器件引脚上的值。如果 GPIO信号配置为输出,则通常会反映输出上驱动的值,写入此寄存器将被忽略。
  2. DATA 是数据寄存器,该寄存器控制 GPIO信号配置为输出时要输出的值。该寄存器的所有 32 位都是一次写入的。读取该寄存器返回写入 DATA 或 MASK_DATA_{LSW,MSW}的先前值,它不会返回器件引脚上的当前值。
  3. MASK_DATA_LSW 和 MASK_DATA_MSW是数据掩码寄存器,该寄存器使软件能够有选择地一次更改所需的的输出值。可以写入最多 16 位的任意组合,MASK_DATA_LSW 控制 Bank 的低 16 位, MASK_DATA_MSW 控制高 16位。未写入的那些位保持不变并保持其先前的值。读取该寄存器返回写入DATA 或 MASK_DATA_{LSW,MSW}的先前值;它不会返回器件引脚上的当前值。该寄存器避免了对未更 改位的读-修改-写序列的需要。
  4. DIRM 是方向模式寄存器,用于控制 I/O 引脚是用作输入还是输出。当 DIRM [x]==0 时,输出驱动器被禁用,该引脚作为输入引脚使用。
  5. OEN 是使能输出寄存器。将 I/O 配置为输出时,该寄存器控制是否启用输出。禁用输出时,引脚为 3态。当 OEN [x] ==0时,输出被禁用。

SDK代码解读

头文件

 #include "xparameters.h"	 //器件参数信息
 #include "xgpiops.h"		 //包含 PS GPIO 的函数声明

宏定义

//宏定义 GPIO_DEVICE_ID  
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID//定义GPIO的设备ID

//定义 MIO 的 PIN
#define Output_pin0   0
#define Input_pin0    0

main code


void GpioOutput(u32 Output_Pin,u32 data);
void GpioInput(u32 Input_Pin,u32 *DataRead);
XGpioPs Gpio;//GPIO 设备驱动列化
int main()
{
	u32 DataRead;//接收输入数据
	XGpioPs_Config *ConfigPtr;//包含GPIO配置信息 
	
	/* Initialize the GPIO driver. */
	ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
	XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);

	while(1)
	{
		/* user edit code*/
		 GpioOutput(Output_pin0,0);
		 GpioInput(Input_pin0,&DataRead);
	}
	return 0;
}

void GpioOutput(u32 Output_Pin,u32 data)
{
	 //Set the direction for the pin to be output or input (1 or 0);
	XGpioPs_SetDirectionPin(&Gpio, Output_Pin, 1);
	 // Enable the Output enable for the LED Pin.
	XGpioPs_SetOutputEnablePin(&Gpio, Output_Pin, 1);
	/* Set the GPIO output to be data. */
	XGpioPs_WritePin(&Gpio, Output_Pin, data);

}

void GpioInput(u32 Input_Pin,u32 *DataRead)
 {
 	/* Set the direction for the specified pin to be input. */
 	XGpioPs_SetDirectionPin(&Gpio, Input_Pin, 0x0);

 	/* Read the state of the data so that it can be  verified. */
 	*DataRead = XGpioPs_ReadPin(&Gpio, Input_Pin);

 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值