问题:
想把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";