AT32如何在程序中开启片上RAM扩展功能

您所在的位置:网站首页 怎么开启运行内存拓展 AT32如何在程序中开启片上RAM扩展功能

AT32如何在程序中开启片上RAM扩展功能

2024-07-11 08:44| 来源: 网络整理| 查看: 265

AN0026—如何在程序中开启片上RAM扩展功能

概述 AT32 MCU某些型号片上SRAM,有提供一个特别的SRAM扩展模式,可让用户通过设定用户系统数据区的EOPB0来调整SRAM的大小。一般此扩展模式的设置都建议使用雅特力的ICP或ISP工具,在产品批量生成时跟程序的烧录一起完成,但在使用者无法使用ICP/ISP工具的情境下,也可以通过执行程序来完成。本篇指南将说明如何在程序中正确的设置EOPB0来完成SRAM的扩展。

支持型号 AT32F403xx AT32F403Axx AT32F407xx AT32F413xx AT32F435xx AT32F437xx

目录 概述 … 5 设置例程 … 6 例程分析 … 7 函数说明 … 7 例程展示… 9 历史版本… 11 在这里插入图片描述 extend_sram()函数操作修改EOPB0,通过EXTEND_SRAM宏定义可将SRAM从默认的96K字节扩展到224K字节,或从224K字节改回96K字节。其中EXTEND_SRAM的定义值在工程项目配置选项中完成。须注意函数内,不可使用全局变量。修改EOPB0之后,必须执行系统复位,新的EOPB0数值才会生效并真正的设定到所选的SRAM大小,函数如下图 在这里插入图片描述

通过修改 startup_at32f403a_407.s 的启动汇编代码,使extend_sram函数在程序初始化之前执行,范例中的 startup_at32f403a_407_ext_ram.s就是修改后的启动文件。下面的图分别是在KEIL和IAR工程中如何修改启动代码。 在这里插入图片描述 在这里插入图片描述

需注意的两个重点:1) 必须在Reset_Handler的一开头就去做EOPB0的修改,不要在SystemInit()函数里头设置,因为用户一开始在Keil/IAR等开发环境设定的SRAM范围,就可能是以扩充后的224K字节作设定,且实际用到的SRAM可能超过了默认的96K,此时堆栈(STACK)的指针初始值会被设定到96K之后的地址,执行SystemInit( )时就会出错,甚至发生HardFault而造成死机。2) 在调用extend_sram()函数前,要将堆栈(STACK)的指针先改到 96K字节内(例程中是修改到(0x20001000),避免因STACK的指针初始值被设定到96K之后的地址,而造成extend_SRAM函数执行时发生错误。 在这里插入图片描述

当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ →Preprocessor Symbols 的定义框里面,编译时extend_sram()函数就会选择对应的配置。

当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ Compiler→Preprocessor的定义框里面,编译时extend_sram()函数就会选择对应的配置。

当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ Compiler→Preprocessor的定义框里面,编译时extend_sram()函数就会选择对应的配置。 在这里插入图片描述

程序运行完SRAM扩展并进入main( )函数时,会检查EOPB0 的数值以确认是否有正确的去配置成所选择的SRAM大小,并且通过点亮LED4显示结果。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3