目录:
一、建立工程并生成SDK
二、SDK使用测试程序
三、具体的代码
说明:
平台:黑金社区的ZYNQ-7010
开发软件:vivedo2017.4
一、建立工程并生成SDK
建立工程:
然后下一步,给工程去个名字随便取下。
进入到这一个步骤,选择这个之后进行next下一步
选择对应的芯片平台,按照自己的芯片来选取(使用的是zynq7010)
最后next之后就直接点击完成就创建了一个工程了。
这个时候就会直接进入我们创建的工程中,然后在左侧窗口,创建块Design:
提示block名字可以随便起一个
一旦创建block design成功之后就会发现我们的右侧会有以窗口,并且点击+号那个图标:添加对应平台的block desin,.输入ZYNQ就会提示出。
点击添加之后会出现一下模块,然后双击这个图块。进去里面设置
然后就会来到一下设置界面。配置我们要使用的功能。我这里分为三个步骤吧
第一步、首先说明一下,去掉这个购的意思,就是我们这里仅仅是PS层的引脚,没有使用到PL层.这个MAXI是我们不需要的将其去掉。
第二步、我这里同时也配置了串口1,不然到时候有什么错误信息打印出来看不到。
我们本质就是使用PS的MIO引脚,然后将其添加上就可以了
第三步、这个是有关DDR设置,要看具体的芯片里面使用的DDR芯片了。最后点击OK。
点击自动生成块。然后有一个提示,直接点构建就OK了。
然后按照一下步骤,将其整个工程都构造一个,不要在意aaaa(名字我随便起的)
Generate Output Products
选择点击:Generate
当创建完3之后,然后再次创建4这个文件。直接默认点击Generate
在菜单栏:file->Export->Export Hardware,导出硬件信息,包含PS的配置信息
值得注意的是:当没有PL参与的时候没有使能 include bitstream当有PL参与的时候需要将其选项选上
剩下的时间就是在等待了。右上角的那个东东一旦旋转之后,就可以了。并且它会提示你说构建组合完成了。然后进行进行这一步,打开SDK
二、SDK使用测试程序
当SDK打开之后按照老规矩先建立一个HELLO的工程。
到这一步就深入了解一下。有关GPIO的两个带有API函数的头文件了
主要看的是这里,作为新手认识一下里面的API,分一下类这些API究竟是干嘛的。
到这里工程创建和API的介绍就完结了。
三、具体的代码**
这里要跑到原理图看下,你的PS-LED在那个引脚上面。正如大家看到我的是挂接在MIO0上面。
最后奉上我自己写的代码。
#include “stdio.h”
#include “xgpiops.h”
#include “GPIO.h”
#define DEVICEID XPAR_PS7_GPIO_0_DEVICE_ID
#define REG_INPUT 0
#define REG_OUTPUT 1
#define DATA_LOW 0
#define DATA_HIGH 1
#define BANK_MIO0 0
XGpioPs InstancePtr;
XGpioPs* XGInstancePtr = &InstancePtr;
int XGpiops_Init(void)
{
char * FUNCTION = "[XGpiops_Init]";
int Status = 0;
XGpioPs_Config * XGpio_Cif;
XGpio_Cif = XGpioPs_LookupConfig(DEVICEID);
Status = XGpioPs_CfgInitialize(XGInstancePtr,XGpio_Cif,XGpio_Cif->BaseAddr);
if(Status != 0) {
xil_printf("%s XGpioPs_CfgInitialize error status:%d \n\r",FUNCTION,Status);
return -1;
}
//set MIO 0 as output & set MIO 13 as output
XGpioPs_SetDirectionPin(XGInstancePtr,BANK_MIO0,REG_OUTPUT);
//Enable
XGpioPs_SetOutputEnablePin(XGInstancePtr,BANK_MIO0,REG_OUTPUT);
//default LED off
//set MIO 0 as status OFF
XGpioPs_WritePin(XGInstancePtr,BANK_MIO0,DATA_HIGH);
//set MIO 13 as status OFF
return Status;
}
void MIO0_LED_OFF(int bank)
{
XGpioPs_WritePin(XGInstancePtr,bank,DATA_HIGH);
}
void MIO0_LED_ON(int bank)
{
XGpioPs_WritePin(XGInstancePtr,bank,DATA_LOW);
}
int main()
{
int Status = 0;
init_platform();
Status = XGpiops_Init();
if(Status != 0) {
xil_printf("XGpiops_Init error \n\r");
return 0;
}
while(1) {
MIO0_LED_ON(0);
}
printf("Hello World\n\r");
cleanup_platform();
return 0;
}