基于ZYNQ的嵌入式学习笔记一(实现流水灯)

2019-07-13 05:31发布

        本人大三软院菜鸡一枚,对嵌入式很有兴趣,不想仅仅只限于软件,希望对硬件有更多的了解,因此在老师给的学习资料基础上,自己又查阅了一些资料,通过具体实验加入了自己的一些理解,整理出以下笔记,欢迎学习嵌入式的朋友们一起交流学习!!! 1.ZYNQ基本架构 嵌入式处理器是嵌入式系统的核心,有硬核和软核之分。软核就是CPU架构,指令,功能一样,但是物理特性不一样,例如芯片尺寸,电压等等物理参数。硬核一样不仅仅是CPU架构,指令,功能一样,也要求物理参数必须一样。   ZYNQ主要由PS和PL两部分组成: 2,GPIO GPIO(General Purpose Input/Output port), 即通用输入输出端口,就是芯片的一些引脚。作为输入端口时,我们可以通过它们读入引脚的状态--高电平或低电平,作为输出端口时,我们可以通过它们输出高电平或低电平来控制连接的外围设备。   ZYNQ至少有三种GPIO可以调用:AXI_GPIO,MIO,EMIO。MIO和EMIO是直接挂在PS上的GPIO,调用头文件时只调用#include  "xgpiops.h"即可。而AXI_GPIO是通过AXI总线挂在PS上的GPIO,调用时则需要则需要#include "xgpio.h"。ZYNQ上PS的MIO数量是54,管脚是固定的,192位GPIO通过EMIO接口连接到PL,是通过PL部分扩展的,所以使用EMIO需要在约束文件中分配管脚,其中64位输入,128位输出,每一位可动态编程访问也可分组访问,每一位均可单独中断,并可实现指定中断类型。 3、在AXI总线上添加GPIO实现流水灯: (1)在Vivado中新建RTL项目:   (2)创建块设计: 首先对ZYNQ Processing System,即PS处理器部分添加处理器配置文件TCL, 添加一个GPIO的IP来传输信号,控制LED流水灯,选择全输出,这里的输入还是输出是相对PS部分而言的:   Create HDL Wrapper: Vivado会为IP子系统生成一个顶层文件,这样我们就可以对该系统进行综合、实现并生成bit流了当bit流生成完成后,在Vivado中最后的工作就是要将设计导入到SDK中,然后对ARM进行编程 最后、在设计好bd文件后、系统会自动在路径:..standalone_bsp_0ps7_cortexa9_0include生成 xparameters.h文件.我们可以在其中查看对应的外设ID。 3、流水灯实现代码: #include "xparameters.h" //硬件参数定义头文件 #include "xgpio.h" //GPIO库函数头文件 #include "xil_printf.h" //串口输出库函数头文件 int main(void) { int Status; volatile int Delay; int i; xil_printf("Start to light the leds "); /* Initialize the GPIO driver */ Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID); if (Status != XST_SUCCESS) { xil_printf("Gpio Initialization Failed "); return XST_FAILURE; } /* Set the direction for all signals as inputs except the LED output */ XGpio_SetDataDirection(&Gpio, LED_CHANNEL, 0);//set all pins as output /* Loop forever blinking the LED */ while (1) { for (i=0;i<8;i++) { /* Set one LED light each time */ XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, ~(LED<