#include <stdio.h>
#include "platform.h"
#include "xparameters.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "xgpio.h"
#include <unistd.h> // usleep()延时函数头文件
#include <stdbool.h> // bool
#define LED_DEVICE_ID XPAR_AXI_GPIO_1_DEVICE_ID
#define KEY_DEVICE_ID XPAR_AXI_GPIO_0_DEVICE_ID
XGpio LEDInst;
XGpio KEYInst;
u8 key_value_pre=0;
u8 key_value_now=0;
int main()
{
init_platform();
int status;
//初始化
status = XGpio_Initialize(&KEYInst, KEY_DEVICE_ID); // initial KEY
/*int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId)
*功能:初始化XGpio实例。
*参数1:指向设备实例的指针。
*参数2:设备ID。
*返回:成功返回XST_SUCCESS,失败返回XST_DEVICE_NOT_FOUND */
if(status != XST_SUCCESS)
//调用上述函数之后根据返回值来判断是否初始化成功,如果status不等于XST_SUCCESS则认为失败
return XST_FAILURE;
status = XGpio_Initialize(&LEDInst, LED_DEVICE_ID); // initial LED
if(status != XST_SUCCESS)
return XST_FAILURE;
//配置阶段
XGpio_SetDataDirection(&KEYInst, 1, 1); // set KEY IO direction as in
/*void XGpio_SetDataDirection(XGpio * InstancePtr, unsigned Channel,u32 DirectionMask)
*功能:设置各个通道的输入输出方向。
*参数1:指向设备实例的指针。
*参数2:准备操作的GPIO的通道(Vivado中设置gpio IP时的设置通道,为1或2)。
*参数3:决定输入输出方向的掩码,1位输入0为输出。
*/
XGpio_SetDataDirection(&LEDInst, 1, 0); // set LED IO direction as out,将灯设置为输出
XGpio_DiscreteWrite(&LEDInst, 1, 0x0);// at initial, all LED turn off
/*void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data)
*功能:向输入设备实例写入输入数据。
*参数1:设备实例
*参数2:通道
*参数3:要写入的数据
*返回: void*/
printf(">>> Press PL KEY1 ~ KEY4 one by one, and check the PL LED1 ~ LED4\n");
//实际程序执行阶段
while(1)
{
usleep(100000); // 0.1s sleep, to debounce, in common, the meta-state will sustain no more than 20ms
/*usleep命令用于延迟以微秒为单位的时间
*1秒=1000毫秒=1000,000微秒=1000,000,000纳秒。
*常用方式
*格式:usleep <us>
*延迟<us>微秒。*/
key_value_pre=key_value_now;
key_value_now= XGpio_DiscreteRead(&KEYInst, 1) & 0x0F;
/* u32 XGpio_DiscreteRead(XGpio * InstancePtr, unsigned Channel)
*功能:读当前IO状态。
*参数1:设备实例指针。
*参数2:通道。
*返回:IO当前值。*/
XGpio_DiscreteWrite(&LEDInst, 1, key_value_now);
if(key_value_pre!=key_value_now)
printf("key state_changed!\n");
}
cleanup_platform();
return 0;
}
FPGA-按键实验
最新推荐文章于 2023-10-28 19:46:02 发布