#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"


#define GPIO_DEVICE_ID  	XPAR_XGPIOPS_0_DEVICE_ID  // gpio 只有1个, 这个值其实就是0
#define PS_LED              7
#define PS_KEY              12
#define PL_KEY              54

int main(){
	XGpioPs_Config* ConfigPtr;  // 器件的id, 和基地址0xE000A000
	XGpioPs* Gpio;

	printf("start! \r\n");
	// 初始化gpio驱动
	ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);  // 查找一个gpio器件的配置信息, 基于一个独立的器件id
	XGpioPs_CfgInitialize(&Gpio, ConfigPtr, ConfigPtr->BaseAddr);

	// 设置gpio引脚为输出 output类型(0输入/1输出)
	XGpioPs_SetDirectionPin(&Gpio, PS_LED, 1);
	// 打开引脚的输出(0关闭/1打开)
	XGpioPs_SetOutputEnablePin(&Gpio, PS_LED, 1);

	// 设置 key为输入
	XGpioPs_SetDirectionPin(&Gpio, PS_KEY, 0);
	XGpioPs_SetDirectionPin(&Gpio, PL_KEY, 0);

	printf("gpio mio test! 一共选择了 %d 个gpio设备~ \r\n", XPAR_XGPIOPS_NUM_INSTANCES);
	// 写入数据到引脚中
    while (1) {
//    	  printf("闪烁啦~\r\n");
//        XGpioPs_WritePin(&Gpio, PS_LED, 0x0); //向指定引脚写入数据：0或1
//        usleep(1000*500);  // 500ms
//        XGpioPs_WritePin(&Gpio, PS_LED, 0x1);
//        sleep(1);  // 1s


    	 XGpioPs_WritePin(&Gpio, PS_LED, ~XGpioPs_ReadPin(&Gpio, PS_KEY));
    	 XGpioPs_WritePin(&Gpio, PS_LED, ~XGpioPs_ReadPin(&Gpio, PL_KEY));

    }

	return 0;
}




//
////****************************************Copyright (c)***********************************//
////原子哥在线教学平台：www.yuanzige.com
////技术支持：www.openedv.com
////淘宝店铺：http://openedv.taobao.com
////关注微信公众平台微信号："正点原子"，免费获取ZYNQ & FPGA & STM32 & LINUX资料。
////版权所有，盗版必究。
////Copyright(C) 正点原子 2018-2028
////All rights reserved
////----------------------------------------------------------------------------------------
//// File name:           main.c
//// Last modified Date:  2019/5/10 14:56:36
//// Last Version:        V1.1
//// Descriptions:        通过EMIO扩展GPIO接口信号,连接到PL端按键,用于控制PS端LED
////----------------------------------------------------------------------------------------
//// Created by:          正点原子
//// Created date:        2019/5/9 10:55:56
//// Version:             V1.0
//// Descriptions:        The original version
////
////----------------------------------------------------------------------------------------
////****************************************************************************************//
//
//#include "stdio.h"
//#include "xparameters.h"
//#include "xgpiops.h"
//
//#define GPIOPS_ID XPAR_XGPIOPS_0_DEVICE_ID   //PS端  GPIO器件 ID
//
//#define MIO_LED0 7   //PS_LED0 连接到 MIO7
//
//#define EMIO_KEY 54  //PL_KEY0 连接到EMIO0
//
//int main()
//{
//    printf("EMIO TEST!\n");
//
//    XGpioPs gpiops_inst;            //PS端 GPIO 驱动实例
//    XGpioPs_Config *gpiops_cfg_ptr; //PS端 GPIO 配置信息
//
//    //根据器件ID查找配置信息
//    gpiops_cfg_ptr = XGpioPs_LookupConfig(GPIOPS_ID);
//    //初始化器件驱动
//    XGpioPs_CfgInitialize(&gpiops_inst, gpiops_cfg_ptr, gpiops_cfg_ptr->BaseAddr);
//
//    //设置LED为输出
//    XGpioPs_SetDirectionPin(&gpiops_inst, MIO_LED0, 1);
//    //使能LED输出
//    XGpioPs_SetOutputEnablePin(&gpiops_inst, MIO_LED0, 1);
//
//    //设置KEY为输入
//    XGpioPs_SetDirectionPin(&gpiops_inst, EMIO_KEY, 0);
//
//    //读取按键状态，用于控制LED亮灭
//    while(1){
//        XGpioPs_WritePin(&gpiops_inst, MIO_LED0,
//                ~XGpioPs_ReadPin(&gpiops_inst, EMIO_KEY));
//    }
//
//    return 0;
//}

