查看: 2482|回复: 0

[原创] 【经验分享】基于IAR RT1064 FlexRAM重新配置

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20028
最后登录
2024-4-26
发表于 2020-6-30 20:35:08 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2020-6-30 20:40 编辑

【经验分享】基于IAR RT1064 FlexRAM重新配置

一,文档说明

    之前有分享过基于MCUXPresso RT flexRAM重新配置的情况:


由于有些网友在使用IAR的时候,也遇到了写FlexRAM配置的问题,这里给出IAR版本的配置。

测试基于MIMXRT1064,SDK helloword, FlexRAM配置如下:

DTCM 256KB, OCRM128KB, ITCM 128KB

这里需要注意的是,RT106X和RT1050有些区别:

RT1050

1.jpg    

RT106X:

2.jpg

注意,RT106X的OCRAM是分两块,一块OCRAM2 512KB,另外一块是OCRAM flexRAM,是用来和ITCM, DTCM一起共享的。所以本文涉及到的RT1064其实flexRAM用到的OCRAM区域是0X2028_0000 到202F_FFFF,共512KB,ITCM,DTCM共享512KB。


二,IARflexRAM分配操作步骤

IAR工程可以直接用SDK结合MCUXPresso config tool CFG工具生成一个单独的工程。

3.jpg
2.1 修改startup_MIMXRT1064.s


  1. __iomux_gpr14_adr EQU 0x400AC038
  2. __iomux_gpr16_adr EQU 0x400AC040
  3. __iomux_gpr17_adr EQU 0x400AC044
  4. __flexram_bank_cfg EQU 0x5AAFFAA5
  5. __flexram_itcm_size EQU 0x00000008
  6. __flexram_dtcm_size EQU 0x00000009


  7. Reset_Handler
  8.         CPSID   I               ; Mask interrupts

  9. ;#ifdef FLEXRAM_CFG_ENABLE
  10.     LDR R0,=__iomux_gpr17_adr ;load IOMUXC_GPR17 register address to R0
  11.     MOV32 R1,__flexram_bank_cfg ;move FlexRAM configuration value to R1
  12.     STR R1,[R0]
  13.    
  14.     LDR R0,=__iomux_gpr16_adr ;load IOMUXC_GPR16 register address to R0
  15.     LDR R1,[R0] ;load IOMUXC_GPR16 register value to R1
  16.     ORR R1,R1,#4 ;set corresponding FLEXRAM_BANK_CFG_SEL bit
  17.     STR R1,[R0] ;store the value to IOMUXC_GPR16 (user defined FlexRAM cfg enabled)

  18.     LDR R0,=__iomux_gpr14_adr ;load IOMUXC_GPR14 register address to R0
  19.     LDR R1,[R0] ;load IOMUXC_GPR14 register value to R1
  20.     MOVT R1,#0X0000 ;clear upper halfword of IOMUXC_GPR14 register
  21.     MOV R2,#__flexram_itcm_size
  22.     MOV R3,#__flexram_dtcm_size
  23.     LSL R2,R2,#16
  24.     LSL R3,R3,#20
  25.     ORR R1,R2,R3
  26.     STR R1,[R0] ;store the vale to IOMUXC_GPR14(disable DTCM)
  27. ;#endif ;end flexram_cfg_enable


  28. void SystemInit (void) {
  29.   
  30.   FLEXRAM->TCM_CTRL = 4;
  31. ...
  32. }
复制代码




2.2 修改BOARD_ConfigMPU()在board.c文件
  1. /* Region 4 setting: Memory with Normal type, not shareable, outer/inner write back */
  2.     MPU->RBAR = ARM_MPU_RBAR(4, 0x00000000U);
  3.     MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);
  4.     /* Region 5 setting: Memory with Normal type, not shareable, outer/inner write back */
  5.     MPU->RBAR = ARM_MPU_RBAR(5, 0x20000000U);
  6.     MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
  7.     /* Region 7 setting: Memory with Normal type, not shareable, outer/inner write back */
  8.     MPU->RBAR = ARM_MPU_RBAR(7, 0x20280000U);
  9.     MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);
复制代码





2.3 ld文件修改

因为DTCM变大,修改对应结束地址:

define symbol m_data_end               = 0x2003FFFF;



三,测试结果

DTCM 256KB, OCRM128KB, ITCM 128KB

DTCM 地址范围:0X2000_0000-0X2003_FFFF

ITCM 地址范围:0X0000_0000-0X0001_FFFF

OCRAM地址范围:0X2028_0000-0X2029_FFFF
ITCM:

4.jpg

5.jpg

DTCM:

6.jpg
7.jpg
OCRAM FlexRAM
8.jpg

虽然IAR memory不能读出来,但是代码还是能够读写对应OCRAM区域。

以上结果,说明已经分区成功。



回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-26 14:21 , Processed in 0.106792 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表