博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zedboard如何从PL端控制DDR读写(七)
阅读量:6968 次
发布时间:2019-06-27

本文共 2811 字,大约阅读时间需要 9 分钟。

  前面已经详细介绍了从PL端如何用AXI总线去控制DDR的读写,并且从AXI_BRESP的返回值来看,我们也是成功写入了的。但是没有通过别的方式来验证写入的数据的话,总是感觉差了点什么。

  今天试了一把从PS端直接读取DDR里面的数据,刚好跟PL端写入的一样,这下可以放心的认为我们写入成功了。

 

  还是跟前面说的一样,在SDK里面使用hello world的模版就可以了。

  准备工作:这部分参考了

  1、DDR3的地址

  在mem_demo_bsp->ps7->cortexa9_0的路径下,打开xparameters_ps.h这个头文件,这个头文件是cortexA9可以直接控制的外设地址的宏定义。在里面可以找到DDR的地址,可以看到如下代码: 

/* Canonical definitions for DDR MEMORY */ #define XPAR_DDR_MEM_BASEADDR 0x00000000#define XPAR_DDR_MEM_HIGHADDR 0x3FFFFFFF

可以看出来,这里的地址也包括了一部分OCM,等会我们要使用这个地址,对DDR3进行读写操作。

  2、读写操作函数

  在mem_demo_bsp->ps7->cortexa9_0的路径下,打开xil_io.h这个头文件,这个头文件是cortexA9可以直接控制的内存映射或者映射到了地址空间的IO。在里面可以看到如下代码: 

//从某个地址读数据 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进行续写操作了。在这里,我们只尝试从PL写入,从PS读取。(你问我为什么不测试从PS写入,从PL读取,因为PL部分的代码之前已经写好了,再去综合一遍太麻烦)

代码如下:

/* * Copyright (c) 2009-2012 Xilinx, Inc.  All rights reserved. * * Xilinx, Inc. * XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A * COURTESY TO YOU.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS * ONE POSSIBLE   IMPLEMENTATION OF THIS FEATURE, APPLICATION OR * STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION * IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE * FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. * XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO * THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO * ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE * FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. * *//* * helloworld.c: simple test application * * This application configures UART 16550 to baud rate 9600. * PS7 UART (Zynq) is not initialized by this application, since * bootrom/bsp configures it to baud rate 115200 * * ------------------------------------------------ * | UART TYPE   BAUD RATE                        | * ------------------------------------------------ *   uartns550   9600 *   uartlite    Configurable only in HW design *   ps7_uart    115200 (configured by bootrom/bsp) */#include 
#include "platform.h"#include "xparameters.h"#include "xparameters_ps.h"#include "xil_printf.h"#include "xil_io.h"#define DDR_BASEARDDR XPAR_DDR_MEM_BASEADDR + 0x3ffff000 //只读取DDR中的一部分数据#define DDR_HIGHADDR XPAR_DDR_MEM_HIGHADDR//void print(char *str);int main(){ init_platform(); int i=0; int rev; print("Hello World\n\r");   while(DDR_BASEARDDR+i*4
我是从0x3ffff000开始读取数据的,当然从开头读起来也一样。接下来看串口返回的部分数据:

完全正确!接下来我要去别的地方闷声发大财了

 
posted on
2016-07-29 15:46 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/christsong/p/5718660.html

你可能感兴趣的文章
探访广铁深圳“父女搭档”乘警出勤风采
查看>>
6月Python热文Top10,精选自1000篇文章
查看>>
Vue 折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
查看>>
使用 React 全家桶搭建一个后台管理系统
查看>>
腾讯云容器团队内部Istio专题分享
查看>>
当我说要做大数据工程师时他们都笑我,直到三个月后……
查看>>
【数据科学系统学习】Python # 数据分析基本操作[二] pandas
查看>>
第一批95后已经是阿里科学家了
查看>>
第七章: ansible故障排查
查看>>
everything is object
查看>>
Android中的设计模式之单例模式
查看>>
webpack核心概念
查看>>
Vue 兼容 ie9 的全面解决方案
查看>>
移动端总结
查看>>
认识Arduino,开始嵌入式之旅
查看>>
深入了解Threadlocal
查看>>
HTTP的请求与响应
查看>>
rsync部署使用
查看>>
算法-java排序实现总结
查看>>
VS Code、ATOM这些开源文本编辑器的代码实现中有哪些奇技淫巧?
查看>>