FPGA-按键实验

#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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值