zoukankan      html  css  js  c++  java
  • ZYNQ OCM 操作 低256kB与高256kB的模式切换方法

    1、zynq ocm地址分配如下图所示,在默认状态下256kB的OCM分布在如下地址空间;

      0000_0000  -0000_ffff       64kB

      0001_0000  -0001_ffff  64KB

      0002_0000  -0002_ffff  64KB

      ffff_0000  -ffff_ffff    64KB

     

     

     2、如何设置ocm 高地址

    通过4位的slcr.OCM_CFG[RAM_HI],以4个独立的64KB区域的粒度,将256KB RAM阵列映射到低地址范围(0x0000_0000~0x0003_FFFF),或者高地址范围(0xFFFC_0000~0xFFFF_FFFF);

     

     

     UG585中关于设置的寄存器如上所示slcr.OCM_CFG[RAM_HI] 设置 1111,

    具体在SDK操作了一下,c代码如下

    #include <stdio.h>
    #include "platform.h"
    #include "xil_printf.h"
    #include "xil_misc_psreset_api.h"
    #include "xil_io.h"

    int main()
    {uint a,b;
    init_platform();
    Xil_DCacheDisable();
    Xil_ICacheDisable();
    /* Unlock the slcr register access lock */
    Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE);
    a = Xil_In32(0xF8000910);
    Xil_Out32(0xF8000910, 0x1f);
    a = Xil_In32(0xF8000910);

    b = Xil_In32(0xF8F00000);
    Xil_Out32(0xF8F00000,(0xfffffffd & b) + 0x2);
    b = Xil_In32(0xF8F00000);


    Xil_Out32(0xF8f00040,0x00100000);
    Xil_Out32(0xF8F00044,0xFFE00000);
    while(1);

    cleanup_platform();
    return 0;
    }

    其中下面这个代码是打开slcr寄存器,一开始没有找到这个语句,所以在写0xF8000910这个寄存器的时候只能读,不能写,

    /* Unlock the slcr register access lock */
    Xil_Out32(XSLCR_UNLOCK_ADDR, XSLCR_UNLOCK_CODE);

     

     

     

    我验证了一下,不需要在BD里面使能HIGH_OCM同样可以操作,如下图所示AXI write back =2'b00,说明可以操作

     

     同时在SDK中查看mem数据与PL通过AXI4写入的数据一样,证明了成功操作HIGH_OCM

     

     

  • 相关阅读:
    owlcar 用法心得 自定义导航
    placeholder 颜色
    图片加载完后执行事件
    针对动态创建的数据添加事件
    弹窗(遮罩层)
    [iOS]把16进制(#871f78)颜色转换UIColor
    [AFN]AFNetworking错误总结
    [iOS]如何给Label或者TextView赋HTML数据
    [iOS]解决模拟器无法输入中文问题
    [iOS]开发者证书和描述文件的作用
  • 原文地址:https://www.cnblogs.com/wangyabin121/p/12745581.html
Copyright © 2011-2022 走看看