zynq学习篇章

MIO/EMIO控制

1.定义XGioPs_Config 结构体指针,该结构体包含设备ID号和寄存器基地址。

                XGpioPs_Config *ConfigPtr;

  1. 2.查找设备ID号

                ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);

3.初始化设备,返回状态。

                Status = XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);

4.设置管脚方向。最后一个参数—1:输出 0:输入

                XGpioPs_SetDirectionPin(&Gpio, LED0, 0x1);

5.设置管脚输出使能。

                XGpioPs_SetOutputEnablePin(&Gpio, LED0, 1);

6.管脚赋值。

                XGpioPs_WritePin(&Gpio, LED0, 1);

7.读取管脚状态值。

                val_btn0 = XGpioPs_ReadPin(&Gpio, BTN0 );

8.定义库。

                #include "xparameters.h"

                #include "xgpiops.h"

                #include "xstatus.h"

                #include "xplatform_info.h"

                #include <xil_printf.h>

9.宏定义MIO管脚。

10.定义结构体

XGpioPs Gpio;  /* The driver instance for GPIO Device. */

#include "xparameters.h"
#include "xgpiops.h"
#include "Xil_printf.h"
#include "xstatus.h"
#include "sleep.h"
#include "xplatform_info.h"

#ifndef GPIO_DEV_ID
#define GPIO_DEV_ID XPAR_XGPIOPS_0_DEVICE_ID
#endif

#define LED0 (54)
#define LED1 (55)
#define LED2 (56)
#define LED3 (57)

#define KEY0 (58)
#define KEY1 (59)

#define printf xil_printf

//XGpioPs_Config
XGpioPs GPIO;

int GPIO_INITIAL(u16 DeviceId);

int GPIO_INITIAL(u16 DeviceId)
{
	int Status;
	XGpioPs_Config *configPtr;
	configPtr =XGpioPs_LookupConfig(GPIO_DEV_ID);

	Status =XGpioPs_CfgInitialize(&GPIO,configPtr,configPtr->BaseAddr);
	//设置输出方向
	XGpioPs_SetDirectionPin(&GPIO, LED0, 0x1);
	XGpioPs_SetDirectionPin(&GPIO, LED1, 0x1);
	XGpioPs_SetDirectionPin(&GPIO, LED2, 0x1);
	XGpioPs_SetDirectionPin(&GPIO, LED3, 0x1);

	XGpioPs_SetDirectionPin(&GPIO, KEY0, 0x0);
	XGpioPs_SetDirectionPin(&GPIO, KEY0, 0x0);

	//设置输出是能
	XGpioPs_SetOutputEnablePin(&GPIO, LED0, 1);
	XGpioPs_SetOutputEnablePin(&GPIO, LED1, 1);
	XGpioPs_SetOutputEnablePin(&GPIO, LED2, 1);
	XGpioPs_SetOutputEnablePin(&GPIO, LED3, 1);
	//设置输出值
	XGpioPs_WritePin(&GPIO, LED0, 1);
	XGpioPs_WritePin(&GPIO, LED1, 1);
	XGpioPs_WritePin(&GPIO, LED2, 1);
	XGpioPs_WritePin(&GPIO, LED3, 1);

	return Status;
}

int main(void)
{
	int Status;
	u8 nled = 0;
	u32 key_0 = 0;
	u32 key_1 = 1;

	Status = GPIO_INITIAL(GPIO_DEV_ID);
	if(Status != XST_SUCCESS){
		printf("初始化未成功 \r\n");
		return XST_FAILURE;
	}
	while(Status == XST_SUCCESS){
		XGpioPs_WritePin(&GPIO, LED0, nled == 0);
		XGpioPs_WritePin(&GPIO, LED1, nled == 1);
		XGpioPs_WritePin(&GPIO, LED2, nled == 2);
		XGpioPs_WritePin(&GPIO, LED3, nled == 3);

		key_0 = XGpioPs_ReadPin(&GPIO, KEY0 );
		key_1 = XGpioPs_ReadPin(&GPIO, KEY1 );

		printf("key_0 = 0x%x  key_1 = 0x%x \r\n",key_0,key_1);
		if(nled == 3){
			nled=0;
		}
		else {
			nled++;
		}
		sleep(1);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值