EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 A-Lin 于 2018-10-8 10:39 编辑 , \$ A) O6 [ Q
R7 v) a; E g) x
转——编写软件程序
" s7 O3 b4 z5 j- ?; h6 x ~- _9 c
下面将为前面构建的嵌入式系统硬件编写软件应用程序,功能是写zebboard 板上的LED灯。通过修改链接脚本文件,将从BRAM运行脚本程序。 (1)创建应用工程 本节将导出硬件到SDK,然后创建应用工程。在Vivado主界面的Flow Navigator 窗口下,点击Open Block Design,或者在源文件下打开system.bd文件。同时找到Implementation选项,单击Open Implementation Design,打开实现后的设计;在viavdo 主菜单,执行File,Export,Export Hardware,在弹出的对话框中,选中Include bitstream 前面的复选框,单击OK。弹出 Module Already Exported 对话框,提示已经存在导出文件,是否覆盖文件信息,单击Yes,覆盖前面的的导出文件。 在Vivado 的主界面的主菜单下,依次点击File,Launch SDK,弹出对话框,在该对话框中,单击OK。在SDK主界面的左侧Project Explorer 窗口下,选中system_wrapper_hw_platform_1.单击鼠标右键,出现浮动菜单,执行命令Delete。类似的,分别选择standalone_bsp_0和TestApp,将其从磁盘删除。 在SDK主界面菜单下,执行File,New, Application Project,弹出对话框,下面的参数配置:Projact name:lab4;点击Next按钮,弹出New Project-Templates对话框,选择Empty Application选项,单击Finish按钮。 在SDK主界面下,找到lab4,在展开项中找到src,选中src,单击鼠标右键,出现浮动菜单。执行Import,弹出对话框,展开General文件夹。选中File System。单击Next,单击Browse按钮,选择lab4.c文件,单击Finish。 lab4.c代码如下 #include "xparameters.h"+ ^' v; ~6 D; ~; m0 [+ Q8 ?
#include "xgpio.h"
- c, ^9 }7 }* Y #include "led_ip.h"( X! {: G" Z! h
! A6 g+ c* p/ e0 r( ?- b int main(void)
7 q" {* `4 d' Q; K6 l {% h: r% s; k4 X# P' P" e
XGpio dip,push;! }6 H/ I) o0 ^* f* L" a# _7 ?
int i, psb_check,dip_check;$ S" N* t$ [0 b, w. x) }1 B2 G
* Q! q" G/ x3 J! R1 g
xil_printf("--Start of the Program--\r\n");
+ k0 h/ Q: ?, x* t e. f+ f% X9 C7 o p, c
XGpio_Initialize(&dip,XPAR_SWITCHES_DEVICE_ID);
+ G4 C, e: a. ?- ?. S5 u5 x; R XGpio_SetDataDirection(&dip,1,0xffffffff);
% ?/ x( a7 E3 E5 b$ J8 _+ v5 ]
& w" ^" u, ^5 c0 | d2 E/ K' a+ A XGpio_Initialize(&push,XPAR_BUTTONS_DEVICE_ID);) D9 Q1 @! ^" h3 A8 ]
XGpio_SetDataDirection(&push,1,0xffffffff);' a5 o5 `, j% U0 R
+ p7 R7 W( T& x$ v
while(1)
2 f5 B/ j& p- V+ E, a {
( j5 n$ N7 h0 B E psb_check = XGpio_DiscreteRead(&push,1);
$ R; i, @' C$ I1 N xil_printf("Push Buttons Status %x\r\n",psb_check);7 x2 c* W5 g" i' E+ E
dip_check = XGpio_DiscreteRead(&dip,1);
& d) H% s s7 L$ r. i( t xil_printf("DIP Switch Status %x\r\n",dip_check);
! d; z/ q( G) q6 S5 K( U( J$ x3 { w$ T3 ]1 h, e* ]5 i& c
LED_IP_mWriteReg(XPAR_LED_IP_S00_AXI_BASEADDR,0,dip_check); e& A- R$ }0 H! {
for(i=0;i<9999999;i++);& G) R7 x3 o+ T, ^+ |
6 U0 [" h% i' ~2 ^ p% |2 _ }9 i2 g. T) [/ E) q i! @
9 d! W* v' J5 a, E
} I4 M" R6 J2 G# [0 j6 Y
(2)为LED_IP分配驱动 在SDK主界面菜单下,执行菜单命令Xilinx Tools,Reposiories,弹出Preferences 对话框,单击 New 按钮看,定位路径到 LED IP的路径。 在SDK主界面,点击Xilinx Tools,Board Support Package Settings,弹出Select a board support package 对话框,选择lab4_bsp; 单击OK按钮,弹出Board Support Package Settings 对话框,在该对话框左侧选择drivers。 单击OK按钮。当创建IP 模板时,自动创建驱动程序代码,驱动程序包含更高级的函数,这些函数可以通过用户程序进行调用。驱动程序用于实现更低层次的功能,用于控制外设。 定位到如下目录,E:\vivadoProject\zynq_3\led_ip\ip_repo\led_ip_1.0\drivers\led_ip_v1_0\src,打开led_ip.c文件,它只包含用于IP的头文件。 ' }3 C) ^/ q2 X2 i4 A7 A/ g
(3)分析汇编目标文件 下面启动shell 和 objdump lab4.elf,查看不同的段。 在SDK主界面,单击Xilinx Tools,Launch Shell,先后输入 cd lab4. C$ h8 x2 e3 I; @7 p
cd debug
6 B2 O7 p. O7 E s. ~" G2 f输入下面的命令 ARM-xilinx-eabi-objdump –h lab4.elf
4 x# m, E$ p9 } r如图可以看到不同的段分配 (3)验证设计 连接PC 和 Zedboard之间的JTAG和UART。 选择SDK Terminal 标签,按前几篇文章的方法设置UART参数。 在SDK主界面,执行Xilinx Tools,Program FPGA,弹出对话框。单击Program按钮,将比特流下载到FPGA。 在SDK主界面左侧,选择lab4,单击鼠标右键,在浮动菜单内,执行Run As ,Launch on Hardware(GDB),把应用程序下载到板子,并且执行ps7_init 和 lab4.elf。 6 l1 J0 V0 v: G9 ~: m2 u9 F
% T" U! }& b7 z, G' h) _ |