This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6678 MSMC 重映射问题

问题:

想把MSMC配置为不需要cache的一块区域,目前是通过配置XMPAXH、XMPAXL、MAR寄存器实现,现在有个问题,我能否在paltform中建一个段

MSMC_SRAM_NOCACHE,start=0x50000000, len=0x00400000,我在.cfg文件中可以指定变量到这个段中吗?我现在指定之后程序直接跑不起来。

代码如下:

/*  配置XMP */

#define MAR_BASE_ADDR (0x01848000)

void Cache_MSMC_initial(Uint32 index,Uint32 bAddr,Uint8 segSize,Uint32 rAddr)
{
CSL_XMC_XMPAXH mpaxh; // 存储保护和地址扩展寄存器(H)
CSL_XMC_XMPAXL mpaxl; // 存储保护和地址扩展寄存器(L)

/******************** 地址重映射 *********************/

mpaxh.bAddr = bAddr; // 基地址(匹配逻辑地址的高位地址)
mpaxh.segSize = segSize; // 重映射区段大小

// 设置XMPAXH寄存器. Writes:XMC_XMPAXH_SEGSZ,XMC_XMPAXH_BADDR.
CSL_XMC_setXMPAXH (index, &mpaxh);

// 设置该区段地址的访问权限
mpaxl.ux = 1;
mpaxl.uw = 1;
mpaxl.ur = 1;
mpaxl.sx = 1;
mpaxl.sw = 1;
mpaxl.sr = 1;
mpaxl.rAddr = rAddr;

// 设置XMPAXL寄存器.
CSL_XMC_setXMPAXL (index, &mpaxl);

// 读取XMPAXL寄存器.
CSL_XMC_getXMPAXL (index, &mpaxl);

/******************** 地址重映射 *********************/

*(unsigned int *)(MAR_BASE_ADDR+ 4*(bAddr>>24))= 0x0; //关闭重映射地址处cache
}

/* 在evm_init中调用 */

void EVM_init()
{

....

 Cache_MSMC_initial(3, 0x50000, 21, 0xc000);

}

/* cnf文件中指定段 */

Program.sectMap[".alg_data_core0"] = "MSMC_SRAM_NOCACHE";