1、目标
本人参考的是正点原子的教学视频https://www.bilibili.com/video/av78603756?p=13
zynq中FPGA与ARM的接口是EMIO,EMIO的主要的功能是PS通过PL扩展接口,控制PL上连上的设备。
2、实现过程
2.1添加工程
2.2 修改IO端口
为GPIO端口,并且添加EMIO端口
打开EMIO端口,配置成8个位端口:
2.3 对PL的端口进行链接
2.4 根据开发板芯片的手册
2.5 生成bit 到处硬件配置信息,然后启动sdk。
新建一个空的工程的项目。建立一个C语言的项目,加入如下main函数
/*
* main.c
*
* Created on: 2020年1月21日
* Author: Scottar
*/
#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#define GPIO_DEVICE_ID XPAR_XGPIOPS_0_DEVICE_ID
XGpioPs_Config *ConfigPtr; //结构体 共有两个参数,一个参数是id 一个是器件的及地址
XGpioPs Gpio; /* The driver instance for GPIO Device. */
#define EMIO_LED0 57
#define EMIO_LED1 56
#define EMIO_LED2 55
#define EMIO_LED3 54
#define EMIO_KEY0 61
#define EMIO_KEY1 60
#define EMIO_KEY2 59
#define EMIO_KEY3 58
//
//
//#define XGPIOPS_DEVICE_MAX_PIN_NUM (u32)118 /**< Max pins in the Zynq GPIO device
// * 0 - 31, Bank 0
// * 32 - 53, Bank 1
// * 54 - 85, Bank 2
// * 86 - 117, Bank 3
int main(){
u32 key_value;
print("GPIO MIO control led ");
//初始化GPIO的驱动
/* Initialize the GPIO driver. */
//根据器件的id 然后查找器件的配置信息
ConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
//初始化gpio 驱动
XGpioPs_CfgInitialize(&Gpio, ConfigPtr,ConfigPtr->BaseAddr);
//将GPIo的方向设置成为输出
//(0是输入 1 是输出)
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED0, 1);
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED1, 1);
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED2, 1);
XGpioPs_SetDirectionPin(&Gpio, EMIO_LED3, 1);
//(0是输入 1 是输出) 设定成按键的读入的状态
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY0, 0);
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY1, 0);
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY2, 0);
XGpioPs_SetDirectionPin(&Gpio, EMIO_KEY3, 0);
//0 是关闭输出使能 1 是打开输出使能
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED0, 1);
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED1, 1);
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED2, 1);
XGpioPs_SetOutputEnablePin(&Gpio, EMIO_LED3, 1);
//写数据到GPIO的输出的引脚
//XGpioPs_WritePin(&Gpio, MIO0_LED, 1);
print("we are going in while ");
while(1){
//读取按键的状态
key_value = XGpioPs_ReadPin(&Gpio,EMIO_KEY0);
//将按键的状态写入led
XGpioPs_WritePin(&Gpio, EMIO_LED0, ~key_value);
//读取按键的状态
key_value = XGpioPs_ReadPin(&Gpio,EMIO_KEY1);
//将按键的状态写入led
XGpioPs_WritePin(&Gpio, EMIO_LED1, ~key_value);
//读取按键的状态
key_value = XGpioPs_ReadPin(&Gpio,EMIO_KEY2);
//将按键的状态写入led
XGpioPs_WritePin(&Gpio, EMIO_LED2, ~key_value);
//读取按键的状态
key_value = XGpioPs_ReadPin(&Gpio,EMIO_KEY3);
//将按键的状态写入led
XGpioPs_WritePin(&Gpio, EMIO_LED3, ~key_value);
}
return 0;
}
3、实验总结
实验能够通过控制EMIO的接口对外部的设为的状态进行读写,能够方便的控制LED的亮灭
来源:CSDN
作者:没有水杯和雨伞的工科男
链接:https://blog.csdn.net/weixin_42066185/article/details/104066170