第三章 流水灯实验
1赞不管如何,流水灯实验在哪都跑不掉。从本章开始我们实验都将在前章实验的基础上添加新的IP,不再建立新的工程。新建一个文件夹作为本章工程文件夹,复制上一章工程到本章。启动ISE后,启动XPS进行配置。
◎添加AXI GPIO,即通用接口IP。
◎添加后弹出的对话框中,将IP命名为LED,修改数据位宽为8位,保持和mis603上LED灯个数一致。
◎点击OK后,将IP连接到MB上。
◎从Ports中可以看出,添加的LED,端口已经输出,且数据位宽为8bit。
◎在LED的IP中,下拉列表中选择GPIO_IO_O为连接到外部输出,GPIO_IO选择为No Connection。
◎在mhs文件中同样可以看到对应的硬件信息。
◎在UCF文件中添加LED的信号约束。这样LED灯的硬件平台就构建结束,使用Generate Netlist产生对应的网表。
◎在ISE中产生顶层文件,并编译该工程。待编译完成后,通过XPS打开SDK,路径设置为MB_SDK。
◎在SDK里,我们可以看到上次测试用的DDR3_Test工程,这里不在用到这个工程了,可以不用理会。
◎在system.xml里面查看,各个IP的版本号是否都在,如果不在,重启SDK。
◎在SDK中新建一个空的项目,命名为Water_LED。
◎在src路径下新建个water_led.c文件。
◎添加LED灯闪烁的源代码
/ * Water_LED.c * Created on: 2016-01-10 * Author: Milinker XU */ #include "xparameters.h" #include "xgpio.h" #include "stdio.h" #include "xil_types.h" void delay_ms(u16 tnms)//不精确的延迟 { u16 n1,n2; for(n1=0; n1<2500; n1++) for(n2=0;n2 } int main() { u8 i=0; u32 led; led=0x0000; XGpio_Out32(XPAR_LED_BASEADDR,led); delay_ms(500); led=0xffff; XGpio_Out32(XPAR_LED_BASEADDR,led); delay_ms(500); while(1) { i=0; led=0xFE; while(i<8) { XGpio_Out32(XPAR_LED_BASEADDR,led); led<<=1; i++; delay_ms(100); } } return 0; } |
◎将Bit文件下载到mis603,再运行上面程序,可以看到LED此时欢快地跑起来了。
◎下面简单谈谈MB系统中,通用IO的使用。由于MB类似于一个单片机系统,因此,其配置的IO口,与单片机的并口相类似。Xilinx在SDK开发环境中提供的BSP,里面有完成开发所需的头文件和源文件等。如下图所示,BSP文件包中对于开发者而言,提高了太多的效率。使得MB系统就如同普通单片机一样简单。
◎打开gpio_v3_01_a文件下,查看底层的源文件和文件。Xilinx对每个IP的开发,都有详细的介绍和对应的开发例程序。然而很多人并不知道,很多人在开发的过程中,各种查阅自己,却不知道,ISE和SDK在安装的时候就已经有该部分的文档了。打开安装路径下的..\ISE\14.7\ISE_DS\EDK\sw\XilinxProcessorIPLib\drivers,可以看到SDK开发过程中的每个IP。
◎如我们现所使用的gpio,其对应的文件就包括下图所示。有了这些,开发将会变的极其轻松。但是请注意,最好将XilinxProcessorIPLib整个文件夹拷贝一份到别处使用,防止我们对底层文件修改,导致SDK中编译无法通过。对于具体的寄存器的使用,这里不在一一介绍,请大家根据自身需求完成开发。