本帖最后由 mytom520 于 2015-6-12 00:06 编辑
本文主要实现由拨码开关的状态控制LED灯的亮灭(运行中遇到问题,在反编译成汇编的区域代码都一样,无法单步运行调试,求高手解决)1.1搭建的硬件系统
1.2在Vivado中File->Export->Export Hardware->OK File->Launch SDK->OK; 在SDK中->File->New->New App ...
1.3自动包含的源文件
在SDK中:
system.hdf里面是硬核对应的外设地址
system.mss里面有对外设的各种说明文档
xparameter.h对应系统内外设的地址映射和设备号,这个文件有你的硬件设计平台生成,即由Block Design决定
xgpio.h对应GPIO的可以调用的函数,包括GPIO初始化、GPIO读写、GPIO数据方向
XGpio_SetDataDirection :说明:对特定的GPIO通道设置所有独立信号的输入、输出的方向.
XGpio_GetDataDirection :说明:对特定的GPIO通道获取所有独立信号的输入、输出的方向.
XGpio_DiscreteRead :说明:对特定的GPIO通道读取所有独立信号的状态.
XGpio_DiscreteWrite :说明 对特定的GPIO通道写寄存器
具体查看system.mss里面的各种说明文档及例程
软件代码如下:
- /*
- * Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved.
- *
- * Xilinx, Inc.
- * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
- * COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
- * ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
- * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
- * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
- * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
- * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
- * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
- * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
- * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
- /*
- * helloworld.c: simple test application
- *
- * This application configures UART 16550 to baud rate 9600.
- * PS7 UART (Zynq) is not initialized by this application, since
- * bootrom/bsp configures it to baud rate 115200
- *
- * ------------------------------------------------
- * | UART TYPE BAUD RATE |
- * ------------------------------------------------
- * uartns550 9600
- * uartlite Configurable only in HW design
- * ps7_uart 115200 (configured by bootrom/bsp)
- */
- #include "xparameters.h"
- #include
- #include "platform.h"
- #include "xgpio.h"
- #include "xil_printf.h"
- /*
- * The following constant is used to determine which channel of the GPIO is
- * used for the LED if there are 2 channels supported.
- */
- #define SW_CHANNEL 1
- #define LED_CHANNEL 2
- /************************** Variable Definitions *****************************/
- /* The following are declared globally so they are zeroed and so they are
- * easily accessible from a debugger
- */
- XGpio Din, Dout; /* The Instance of the GPIO Driver */
- int main()
- {
- int i;
- u32 sw_status;
- int program_status;
- print("-- Start of the Program --rn");
- program_status = XGpio_Initialize(&Din, XPAR_SW_4BIT_DEVICE_ID) && XGpio_Initialize(&Dout, XPAR_LED_3BIT_DEVICE_ID);
- if (program_status != XST_SUCCESS) {
- return XST_FAILURE;
- }
- /* Set the direction for all signals to be inputs except the
- * LED output
- */
- XGpio_SetDataDirection(&Dout, LED_CHANNEL, 0xffffffff);
- while (1)
- {
- /* Read the state of the data so that only the LED state can be
- * modified
- */
- sw_status = XGpio_DiscreteRead(&Din, SW_CHANNEL);
- switch (sw_status)
- {
- case 0xfffffff1: XGpio_DiscreteWrite(&Dout, LED_CHANNEL, 0xfffffff1); break;
- case 0xfffffff2: XGpio_DiscreteWrite(&Dout, LED_CHANNEL, 0xfffffff2); break;
- case 0xfffffff3: XGpio_DiscreteWrite(&Dout, LED_CHANNEL, 0xfffffff3); break;
- case 0xfffffff4: XGpio_DiscreteWrite(&Dout, LED_CHANNEL, 0xfffffff4); break;
- default: XGpio_DiscreteWrite(&Dout, LED_CHANNEL, 0xfffffff0); break;
- }
- xil_printf("Switch Status is %xrn", sw_status);
- for (i=0; i<99999; i++);
- }
- return XST_SUCCESS;
- }
下一步project->Build All,下一步Xilinx Tools->Program
FPGA,下一步右击主程序所在目录Debug As->Launch on hardware(GDB)
接着卡壳了,不能顺利调试!!!求助高手……