【精品博文】EDK之路(2)——GPIO之SDK篇

在上篇文章中,说明了一下一个简单的GPIO工程的XPS部分。XPS部分的建立说明我们的硬件平台已经搭好,类似已经做好单片机了。接下来就是在这个“单片机”中运行我们的软件程序,即SDK部分的操作。

SDK部分

在导出到SDK时,最好新建一个sdk_workspace文件夹,这样方便文件的管理。

关于bsp的建立,C工程的建立这里就不再说明了。

建立好这些后,下面就要开始程序的编写了,这时我们需要用到各种API函数来实现我们的预期功能(当然,直接通过寄存器地址操作寄存器也可以,但是使用API函数的话会方便许多)。API函数以及相关IP核驱动的说明和例子都可以在bsp中的.mss文件中查阅

下面我就通过一份代码来说明一下程序如何编写。

1,首先要include一些相关文件,include的文件可以在bsp->microblaze_0->include 中查看。

xparameters.h 是每个工程都必须要include的,里面包含了各个IP核的相关参数,尤其是我们添加的IP的参数尤为关键。如下图,可以看到DEVICE_ID 以及BASEADDR等数值,这些在使用相应GPIO时都会用到。

xgpio.h是GPIO的驱动文件,要使用GPIO的API函数的话,则需要将它include进来。

xil_printf.h。提供打印信息函数。如在程序中有两种打印信息函数:

print("begin to initial GPIO\n");

xil_printf("the num is %0x. \n",led_display[i][1]);单纯的只打印一行字的只需要使用print。而如果需要打印含有变量的信息,则需要使用xil_printf或者printf。又printf可以打印浮点数据,xil_printf只能打印定点数据。但xil_printf占用的程序空间会小很多,建议使用xil_printf.

2,宏定义部分,为的是简化程序的编写,以及增加程序的可读性

3, 在使用所有添加的IP核时,都需要先实例化。

4,使用IP核时,第一步操作就是初始化,具体操作以及返回值等参考相关API函数。后面的程序也是如此。

编写完成后即可自动编译,最后下载到板子即可。

关于下载,说明一下相关问题。如图点击进去。

出现下面列表,这表示各种下载方式,理论上选择“auto detect”就好了,但是有些时候选该选项会出现下载不了的问题,这时候就需要选择相应的下载方式了。

关于下载方式也有很多种:

1,通过SDK里面的Program FPGA下载

2,通过xilinx的iMPACT或者digilent的Adept。选择sdk_workspace里的硬件信息的文件夹,里面会有个download.bit文件,按照ise下载的方法下载即可。

3,通过xps下载,有时我们在xps中修改了硬件信息,而SDK中的内容并没有更改,这时我们就没必要再到SDK中进行下载了。

首先,如下图,我们要先选择一个elf文件编译到download.bit文件中(配置好后,以后的操作则不需要再进行这一步了),elf即软件层的可执行文件,很多时候我们把download.bit文件下载到板子里后发现没反应,这时候很有可能就是因为里面没有编译elf文件进去,导致没有软件程序在运行,必须在SDK中点击run来运行软件程序。而如果download.bit中包含有elf文件,则板子加载完download.bit后,会自动运行软件程序。

注意elf文件的路径,在C工程的debug文件夹里。

编译好的download.bit文件会出现在与SDK同级的implementation文件夹中(这里的download.bit和第二个下载方式提到的download.bit不是同一个,前者是需要自己手动添加的,后者是已经自动包含elf文件信息了)。

之后,如下图,先点击updata bitstream(每次修改硬件后都需要执行该步骤),更新完毕后再点击download bitstream,则会自动下载implementation中的download.bit文件。

在下载成功之后,我们就可以查看打印信息,以及debug操作了。

首先,我们要先进行配置,如下操作:

双击1,即出现下面的gpio Debug。点击2,勾选Connect STDIO to Console, 然后点击 run即可。

如下图,我们可以查看到打印信息

之后如果我们只是单纯修改了SDK中的程序的话,就不用再将所有硬件信息下载进去了,只需要点击run即可。

debug操作和很多软件的操作类似,就不再说明了。

(0)

相关推荐