MIO/EMIO控制
1.定义XGioPs_Config 结构体指针,该结构体包含设备ID号和寄存器基地址。
XGpioPs_Config *ConfigPtr;
- 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);
}
}