1. 进入XPS,使用BSB wizard。
2. 命名新建的工程,并选择I would like to creat a system for a custom board
3. 板子参数:virtex4///xc4vsx25///ff668///-10
4. 晶振频率100MHz,Local memory选16KB
5. 点击Add Device,IO Interface Type选GPIO,Device选LEDS。GPIO Data Width就是板子上led的个数,选择6
6. STDIN和STDOUT选NONE
7. 点finish之后会弹出一个窗口,提示你需要该两个文件data/system.ucf和etc/download.cmd,点OK
8. 在system下双击download.cmd文件。其中需要修改的是两处数字,这个数字表示的是你FPGA在JTAG链中是第几个。这里将1改为2.
9. 在system下双击system.ucf文件,开始锁管脚。打开SEED-FEM025.pdf,找到clk、rst和LEDS的管脚,并修改。
10. Hardware->Generate Netlist。这个过程比较费时。
11. Software->Generate Libraries and BSPs
12. 双击Application下sources下的TestApp_Memory.c,写程序。
13. 在SEED-FEM025.pdf中可以看到赋值为1时led亮,LED的排列方式为:
SEED |
led2 |
led5 |
led4 |
led3 |
|
led6 |
led1 |
14. 写完之后Software->Build All User Applications。
无误之后就可以Download到板子上查看结果了 ,下面是源码:
/* * Xilinx EDK 12.3 EDK_MS3.70d * * This file is a sample test application * * This application is intended to test and/or illustrate some * functionality of your system. The contents of this file may * vary depending on the IP in your system and may use existing * IP driver functions. These drivers will be generated in your * XPS project when you run the "Generate Libraries" menu item * in XPS. * * Your XPS project directory is at: * E:\Projects\FPGA\Xilinx\TEST12.3\light_led\ */ // Located in: microblaze_0/include/xparameters.h #include "xparameters.h" #include "xgpio.h" #include "xstatus.h" #define LED_DELAY 1000000 XGpio LED_POINTER; //==================================================== int main (void) { /* * Enable and initialize cache */ #if XPAR_MICROBLAZE_0_USE_ICACHE Xil_ICacheInvalidate(); Xil_ICacheEnable(); #endif #if XPAR_MICROBLAZE_0_USE_DCACHE Xil_DCacheInvalidate(); Xil_DCacheEnable(); #endif #if XPAR_MICROBLAZE_0_USE_DCACHE Xil_DCacheDisable(); Xil_DCacheInvalidate(); #endif #if XPAR_MICROBLAZE_0_USE_ICACHE Xil_ICacheDisable(); Xil_ICacheInvalidate(); #endif volatile int DELAY; int count=0; XGpio_Initialize(&LED_POINTER,XPAR_LEDS_DEVICE_ID); XGpio_SetDataDirection(&LED_POINTER,1,0x0000); while(1) {count++; if(count%2==0) { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x02); } else { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x16); } for(DELAY=0;DELAY<LED_DELAY;DELAY++); if(count%2==0) { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x08); } else { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x04); } for(DELAY=0;DELAY<LED_DELAY;DELAY++); if(count%2==0) { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x32); } else { XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,0x01); } for(DELAY=0;DELAY<LED_DELAY;DELAY++); } return 0; }