zynq 7000 一般有2个cpu (arm A9),我们一般都用一个cpu0,本实验让2个cpu 都运行起来,cpu0 运行操作系统petalinux 2018.2, cpu1: 裸机流水灯。同时通过共享内存的方式,实现2个核之间的交互。
关于zynq 双核运行的官方文档有如下3篇:
xapp1078-amp-linux-bare-metal.pdf
xapp1079-amp-bare-metal-cortex-a9.pdf
ug1186-zynq-openamp-gsg.pdf
我们这个实验对应xapp1078, 但文档对应petalinux2014 的版本,有点太老了,而我的实验是在petalinux2018.2 上完成的。
前提条件
1:会做petalinux 2018.2 或其他版本的启动制作。如果不会请看:petalinux 2018.2 在ubuntu 16 下的工程制作并启动实验
2:熟悉 zynq 7000 AMP模式 双裸核CPU同时运行,因为这个比较简单,可以作为本实验的热身。
硬件平台的建立
硬件工程的建立是在Vivado2018.2 上完成的。其实要求很简单,符合linux下流水灯实验的要求即可,当然还需要挂接上SD卡。我的硬件就用的那个流水灯实验的工程,若有不清楚,请参考:
zynq 7000 petalinux 2018.2下的流水灯实验
裸机流水灯工程的准备和验证
这个流水灯工程是建立运行在cpu1上的,存放地址在0x1e00_0000,工程的建立请看:zynq 7000 AMP模式 双裸核CPU同时运行。链接里的工程建立的存放地址是0x1000_0000,但我们这里cpu0 要运行petalinux2018.2 ,所以设置得比较高。
程序的代码做了适当修改如下:
cpu1的led.c
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"
#define MY_IP 0x41200000
#include "xil_mmu.h"
#define COM_VAL (*(volatile unsigned int*)(0xffff0000))
#define COM_VAL1 (*(volatile unsigned int*