- SD卡设置是为了以后固化,没有SD卡固化不进板卡
- UART是为了后面调试和打印
- Constraints配置管脚,在vivao中创建xdc约束文件;ise中叫ucf文件
GPIO的使用
第一部分:Vivado硬件部分创建(xc7z020cig400-1)
- 创建vivado工程,创建完成点击Create Block Desion,点+,选择zynq
——第二步:设置zynq参数
- DDR Configeuration配置 :Memory存储 Part—>custom定制;Row行 address count(bits)-->14
Cas write latency延迟-->6; tRC -->49;tRASmin-->36
——第三步:设置引脚
- 点击run得到引脚。当未出现引脚时:右键,make Extemal极值.改名字在左边的工具栏里可以更改。
——第四步:设置顶层
- 切换到sources来源里,右键第一个文件,creat HDL Wrapper封装-->let vivado manage wrapper and auto-updatae自动更新(生成一个顶层文件)
——第五步:设置约束文件
- 在constraint约束-->constrs_1创建生成一个xdc(约束文件),右键,add sources。Add or creat constraints建立工程,打开并进行编辑。电平标准模板(1、物理引脚,板子接口与程序接口对应;2、引出bank的电平标准,LVCOMS33和程序接口。bank34的电压对应原理图叫vcco34,由此可以看到该bank的电压值,LVCONMS33)
- Language Templates模板-->XDC-->physical constraints-->placement布置-->specific明确的location位置-->io pin assignment任务
- Language Templates-->XDC-->io constrations-->iostandard
——第六步:
- 生成bit文件
第二部分:vivado软件部分
- file-->export出口-->Export Harware硬件,对话空点击 include bitstream,点击ok。
- File-->Launch SDK,点击ok,进行对SDK开发。
- 新建一个工程
- 注console里会有打印信息。更改文字大小window-->preference-->general-->editors-->Text editors,蓝色字体colors and fonts字体,C/C++ -->C/C++ editor text font,点击edit可以设置字体大小。回到Text editors点击show line numbers。
- 写程序
- 链接板卡上电,project Explorer探测器-->ex_gpio右键,Debug As -->Debug Configurations...。选择xilinx c/c++ application申请 (system Debugger调试器),勾选Program FPGA,apply,debug,yes.
注:
SDK中选择xiicps.h右键选择open declaration可以看到里面的全部函数
/**
* The XGpioPs driver instance data. The user is required to allocate a
* variable of this type for the GPIO device in the system. A pointer
* to a variable of this type is then passed to the driver API functions.
*/
typedef struct {
XGpioPs_Config GpioConfig; /**< Device configuration */设备配置
u32 IsReady; /**< Device is initialized and ready */
XGpioPs_Handler Handler; /**< Status handlers for all banks */处理者
void *CallBackRef; /**< Callback ref for bank handlers */回收,参考
u32 Platform; /**< Platform data */
u32 MaxPinNum; /**< Max pins in the GPIO device */
u8 MaxBanks; /**< Max banks in a GPIO device */
} XGpioPs;
/**
* This typedef contains configuration information for a device.
*/
typedef struct {
u16 DeviceId; /**< Unique ID of device */
u32 BaseAddr; /**< Register base address */
} XGpioPs_Config;
简单gpio程序过程:
(1)头文件
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xgpiops.h"
#include "xparameters.h" 找到gpio的id ,点击按ctrl+f输入gpio可以找到id
(2)宏定义
#define GPIO_DEV_ID XPAR_PS7_GPIO_0_DEVICE_ID
#define LED0 54
#define LED1 55
#define SW0 56
(3)静态全局变量
static XGpioPs GpioPs;
static XGpioPs_Config * GpioCnfPtr;
(4)声明函数体
int initIicPs(XIicPs *iicps , XIicPs_Config * iiccfg);
(5)主函数
int main()
{
函数体
}
(6)函数,配置gpio
GpioCnfPtr = XGpioPs_LookupConfig 找到对应gpio的id
status = XGpioPs_CfgInitialize 开发板gpio与程序相关联
XGpioPs_SetDirectionPin 设置引脚
XGpioPs_SetOutputEnablePin 设置引脚的使能
XGpioPs_CfgInitialize函数介绍
s32 XGpioPs_CfgInitialize(XGpioPs *InstancePtr, XGpioPs_Config *ConfigPtr,
u32 EffectiveAddr)
这个函数初始化一个XGpioPs实例/驱动程序。 初始化XGpioPs实例结构的所有成员,并将StubHandlers分配给银行状态处理程序。
InstancePtr是一个指向XGpioPs实例的指针
ConfigPtr指向XGpioPs设备配置结构
EffectiveAddr是虚拟内存地址空间中的设备基地址。 如果没有使用地址转换,则应该传递物理地址。 如果在调用该函数后,地址映射发生了变化,可能会出现不可预知的错误