NXP

rt1020 flexram动态调整 DTC-RAM ITC-RAM OC-RAM大小

2019-07-12 11:47发布

RT1020 内置ram 有256 kb , nxp 将这256 kb 的空间分成了三片
在这里插入图片描述 FlexRAM意为高度可配置RAM门列阵。这个东西把内部集成的512KBRAM平均分成了16个bank,每个32KB。FlexRAM可以把他们配置成三张模式之一:ITGM,DTIM,OCRAM ITCM:指令紧耦合RAM。与内核同频运行,通过64-bit的I-TCM总线访问,用来存放指令
DTCM:数据紧耦合RAM。与内核同频运行,通过2*32-bit的D0/D1-TCM总线访问,用来存放只有内核访问的数据
OCRAM:片上RAM。以1/4内核频率运行,连接到总线矩阵SIM_M7的NIC接口,由于这个特性,OCRAM可以被连接到SIM_M7的其他master访问。比如DMA。当打开L1 Cache时,OCRAM会通过L1 Cache访问以加快访问速度。 修改方式:
一、基于MCUXpresso修改 1、修改编译配置,将DTCM放到最前面,并将size改为0x20000,其他size改小
在这里插入图片描述
2、修改startup_mimxrt1021.c -->
attribute ((section(".after_vectors.reset"))) void ResetISR(void) -->
SystemInit();函数开始的位置添加 //reset dtcm to 6 blank,itcm to 1 blank,otcm to 1 blank IOMUXC_GPR->GPR17 = 0xfaa5; //分配相关的blank //dtcm config 调整dtcm分配后的大小 IOMUXC_GPR->GPR14 &= ~IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ_MASK; IOMUXC_GPR->GPR14 |= IOMUXC_GPR_GPR14_CM7_CFGDTCMSZ(8); IOMUXC_GPR->GPR16 |= IOMUXC_GPR_GPR16_INIT_DTCM_EN_MASK; //itcm config 调整itcm分配后的大小 IOMUXC_GPR->GPR14 &= ~IOMUXC_GPR_GPR14_CM7_CFGITCMSZ_MASK; IOMUXC_GPR->GPR14 |= IOMUXC_GPR_GPR14_CM7_CFGITCMSZ(7); IOMUXC_GPR->GPR16 |= IOMUXC_GPR_GPR16_INIT_ITCM_EN_MASK; //select ram allocate source from FLEXRAM_BANK_CFG IOMUXC_GPR->GPR16 &= ~IOMUXC_GPR_GPR16_FLEXRAM_BANK_CFG_SEL_MASK; IOMUXC_GPR->GPR16 |= IOMUXC_GPR_GPR16_FLEXRAM_BANK_CFG_SEL(1U); 3、修改设置,将栈地址Stack改为ram头部(默认Stack分配在ram的尾部,不确定为什么改
大小后栈位置导致开不了机): 二 、 基于MDK修改 1、修改scf文件,去掉外部ram的空间,屏蔽外部ncache,将data_size改为
0x00010000-》0x00020000,将data2_size 改为0x00020000-》0x00010000: ;#define m_data_start 0x80000000
;#define m_data_size 0x01E00000
;#define m_ncache_start 0x81E00000
;#define m_ncache_size 0x00200000
#define m_data_start 0x20000000
#define m_data_size 0x00020000
#define m_data2_start 0x20200000
#define m_data2_size 0x00010000
; RW_m_ncache m_ncache_start m_ncache_size { ; ncache RW data
; * (NonCacheable.init)
; * (NonCacheable)
; } 2、修改startup.s在CPSID I ; Mask interrupts下面添加调整flexram的汇编代码
LDR R0, =0x400ac044 ;GPR17LDR R1, =0xfaa5 ;FlexRAM configuration
STR R1,[R0]
LDR R0, =0x400ac038 ;GPR14
LDR R1, =0xFF0FFFFF ;DTCM resize
LDR R3,[R0]
AND R2,R1,R3
LDR R1, =0x800000
ORR R3,R1,R2
STR R3,[R0]
LDR R0, =0x400ac040 ;GPR16
LDR R1, =0x02 ;DTCM init enable
LDR R3,[R0]
ORR R2,R1,R3
STR R2,[R0]
LDR R0, =0x400ac038 ;GPR14
LDR R1, =0xFFF0FFFF ;ITCM resize
LDR R3,[R0]
AND R2,R1,R3
LDR R1, =0x70000
ORR R3,R1,R2
STR R3,[R0]
LDR R0, =0x400ac040 ;GPR16
LDR R1, =0x01 ;ITCM init enable
LDR R3,[R0]
ORR R2,R1,R3
STR R2,[R0]
LDR R0, =0x400ac040 ;GPR16
LDR R1, =0x04 ;use FLEXRAM_BANK_CFG to config
LDR R3,[R0]
ORR R2,R1,R3STR R2,[R0]