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

        本人大三软院菜鸡一枚,对嵌入式很有兴趣,不想仅仅只限于软件,希望对硬件有更多的了解,因此在老师给的学习资料基础上,自己又查阅了一些资料,通过具体实验加入了自己的一些理解,整理出以下笔记,欢迎学习嵌入式的朋友们一起交流学习!!!

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_0\ps7_cortexa9_0\include生成 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\r\n");
/* Initialize the GPIO driver */
Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);
if (Status != XST_SUCCESS) {
xil_printf("Gpio Initialization Failed\r\n");
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<<i));
/* Wait a small amount of time so the LED is visible */
for (Delay = 0; Delay < LED_DELAY; Delay++);
}
}
xil_printf("Successfully ran Gpio Example\r\n");
return XST_SUCCESS;
}

猜你喜欢

转载自blog.csdn.net/weixin_39626452/article/details/84880966