PL读不到PS写入DDR的数据

背景

平台:ZYNQ7020

CPU0的设置默认,CPU1设置-DUSE_AMP=1(按已知的信息,CPU1会不使能L2 Cache),PL以AXI接口访问DDR。

CPU1往DDR中写数据后用Xil_DCacheFlushRange函数将数据回写到DDR,但是随后PL在DDR中读不到相关数据。

把CPU1中的相关代码放到CPU0中运行,PL能读到DDR中的相关数据。

原因分析

初步分析可能与L2 Cache有关,具体原因暂不明,欢迎留言指导。

解决办法

CPU0和CPU1程序入口分别调用如下函数:

//L2 CACHE在cpu0与cpu1进行等分
void L2CacheCut(void)
{
	u32 RegValue;
	
	RegValue = 0x0000000f;
    Xil_Out32(XPS_L2CC_BASEADDR + XPS_L2CC_CACHE_DLCKDWN_0_WAY_OFFSET, RegValue);
    Xil_Out32(XPS_L2CC_BASEADDR + XPS_L2CC_CACHE_ILCKDWN_0_WAY_OFFSET, RegValue);

    RegValue = 0x000000f0;
    Xil_Out32(XPS_L2CC_BASEADDR + XPS_L2CC_CACHE_DLCKDWN_1_WAY_OFFSET, RegValue);
    Xil_Out32(XPS_L2CC_BASEADDR + XPS_L2CC_CACHE_ILCKDWN_1_WAY_OFFSET, RegValue);
}

并取消CPU1中-DUSE_AMP=1设置,将L2 Cache等分给两个CPU使用。


参考

  1. Zynq7000 双核运行 L2Cache 寄存器配置 划分Cache;
  2. ZYNQ7000双核AMP工作方式下如何共享L2 Cache.

你可能感兴趣的:(ZYNQ,arm开发)