前言
DDR是zynq的内存又可以叫做主存。是CPU能直接寻址的存储空间,没有DDR的话,运行内存只有很小的内部RAM,软件大小受限,也几乎没法跑操作系统。作为下一篇AXIDMA的基础知识提前做个准备,内容很简单这里就简单做一个读写测试,也可以当做验证下DDR是否都可以正常访问
还是找到我们的老朋友"xparameters_ps.h"可以看到如下代码:
/* Canonical definitions for DDR MEMORY */ #define XPAR DDR MEM BASEADDR 0x00000000U #define XPAR DDR MEM HIGHADDR 0X3FFFFFFFU
这就是DDR的基址和偏移了也就是说1GB的内存,
关于DDR的详细描述在芯片手册第十章10.6部分有详细的DDR编程介绍,但是呢按照现在的认知来看,大部分情况下是用不到的,只需要会简单的读写就好了)
而在xil_io.h里又能找到下面这些读写函数(xilinx真香)
//从某个地址读数据 u8 Xil_In8(INTPTR Addr); u16 Xil_In16(INTPTR Addr); u32 Xil_In32(INTPTR Addr); //向某个地址写数据。 void Xil_Out8(INTPTR Addr, u8 Value); void Xil_Out16(INTPTR Addr, u16 Value); void Xil_Out32(INTPTR Addr, u32 Value);
有了这些已经完完全全可以对DDR进行读写了
那下面要做的就很简单了,挑几个地址访问验证一下就好啦!所以我为什么要单独写一篇,真是奇怪
#include "xparameters_ps.h" #include "xil_io.h" #include "xil_printf.h" int main () { int value; Xil_Out32(XPAR_DDR_MEM_BASEADDR,0x12); value = Xil_In32(XPAR_DDR_MEM_BASEADDR); xil_printf("the address 0 is 0x%x\r\n",value); Xil_Out32(0x1FFFFFFF,0x34); value = Xil_In32(0x1FFFFFFF); xil_printf("the address 0x1FFFFFFF is 0x%x\r\n",value); Xil_Out8(XPAR_DDR_MEM_HIGHADDR,0x7); value = Xil_In8(XPAR_DDR_MEM_HIGHADDR); xil_printf("the address 0x3FFFFFFF is 0x%x\r\n",value); }