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

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显示结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值