本帖最后由 nicholasldf 于 2012-11-5 22:14 编辑
4# xinzha
谢谢回复
我觉得只打开ICACHE,关闭DCACHE,虽然速度比同时打开ICACHE和DCACHE慢了点,但是不用担心程序运行有什么问题,程序是只读区域,根据程序执行的暂时局部性原理,速度会有较大的提升。
但是AM335X这样试了,还是一样的问题:(,不知何解?
片上外设寄存器地址空间是非CACHE,而且不可Execute的。
芯片外设寄存器MMU设置
/*
** Define Device Memory Region. The region between OCMC and DDR is
** configured as device memory, with R/W access in user/privileged modes.
** Also, the region is marked 'Execute Never'.
*/
REGION regionDev = {
MMU_PGTYPE_SECTION, START_ADDR_DEV, NUM_SECTIONS_DEV,
MMU_MEMTYPE_DEVICE_SHAREABLE,
MMU_REGION_NON_SECURE,
MMU_AP_PRV_RW_USR_RW | MMU_SECTION_EXEC_NEVER,
(unsigned int*)pageTable
};
DDR3区域才是打开CACHE的,可执行的
/*
** Define DDR memory region of AM335x. DDR can be configured as Normal
** memory with R/W access in user/privileged modes. The cache attributes
** specified here are,
** Inner - Write through, No Write Allocate
** Outer - Write Back, Write Allocate
*/
REGION regionDdr = {
MMU_PGTYPE_SECTION, START_ADDR_DDR, NUM_SECTIONS_DDR,
MMU_MEMTYPE_NORMAL_NON_SHAREABLE(MMU_CACHE_WT_NOWA,
MMU_CACHE_WB_WA),
MMU_REGION_NON_SECURE, MMU_AP_PRV_RW_USR_RW,
(unsigned int*)pageTable
};
|