TI中文支持网
TI专业的中文技术问题搜集分享网站

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";

Shine:

可以在cfg文件中指定变量到这个段中。请跟踪一下代码具体怎么跑不起来?

Nancy Wang:

0x50000000是reserved memory地址,您是尝试remap这段地址了吗?

kun kun:

我现在的做法是直接将变量的地址幅值为0x50000000+offset,可以访问。但是我用EDMACC1把SRC地址DST都设置为MSMC内部地址时,搬运失败;我把SRC选择为MSMC内部地址,DST为DDR3地址,搬运失败;把SRC、DST都设置为DDR3地址,搬运成功,不知道是什么问题导致的,麻烦帮忙看看,谢谢

kun kun:

回复 Nancy Wang:

是的,我是remap了这段地址,不map的话会被强制cache,但我由不需要cache,所以remap了一下,然后配置map设置cache属性。

kun kun:

回复 kun kun:

但是如果我不映射,直接使用0xc000000,这个msmc地址的话,EDMA的SRC、DST都设置在MSMC内部,是可以搬运成功的。现在就是不知道映射到了新的地址使用EDMA会有问题吗?

kun kun:

回复 Shine:

我是在EVM_init中映射MSMC地址,这样会不会比较晚了?

Nancy Wang:

回复 kun kun:

You can't access or run the program on the "Reserved memory location" and you would get unexpected behavior CPU hung,Emulator hung etc.,
您访问这段地址有提示错误吗?
这个帖子参考一下。
e2e.ti.com/…/669400

Shine:

回复 kun kun:

EVM_init代码不放在MSMC里吧?

kun kun:

回复 Shine:

谢谢您的回答:
EVM_init的代码没有放在MSMC里,我的意思是MSMC重映射的代码是放在EVM_init里面的。我的错误类似您上面说的那个问题,帖子的内容是说不能映射到保留区域?0x50000000也不行?谢谢

Shine:

回复 kun kun:

通过MPAX映射的0x50000000这个地址是逻辑地址,可以映射。您跟一下代码,看运行到哪里出错了?

赞(0)
未经允许不得转载:TI中文支持网 » 6678 MSMC 重映射问题
分享到: 更多 (0)