上篇《修改启动代码&重写向量表》文章中我们介绍了中断向量表的编写,这次我们编写SRAM初始化代码,在《调试初步:点亮LED灯》文章中,我们提到了MDK脚本代码,其实这部分代码和MDK脚本代码实现类似的功能。
1、编写PreStackInit代码
我们从.\DeviceCode\Drivers\Stubs\Processor\stubs_PreStackInit目录到.\DeviceCode\Targets\Native\CortexM3\DeviceCode,并修改目录的名字为PreStackInit,下一步我们在子目录RVD_S下的PreStackInit.s中添加如下汇编代码:
EXPORT PreStackInit
IMPORT PreStackInit_Exit_Pointer
PRESERVE8
AREA SectionForBootstrapOperations, CODE, READONLY
ENTRY
PreStackInit
; 初始化SRAM
; 使能FSMC时钟
; Enable FSMC clock
LDR R0,= 0x00000114
LDR R1,= 0x40021014
STR R0,[R1]
; 使能FSMC相关的GPIO的时钟
; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
LDR R0,= 0x000001E0
LDR R1,= 0x40021018
STR R0,[R1]
; SRAM Data lines, NOE and NWE configuration
; SRAM Address lines configuration
; NOE and NWE configuration
; NE3 configuration
; NBL0, NBL1 configuration
LDR R0,= 0x44BB44BB
LDR R1,= 0x40011400
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011404
STR R0,[R1]
LDR R0,= 0xB44444BB
LDR R1,= 0x40011800
STR R0,[R1]
LDR R0,= 0xBBBBBBBB
LDR R1,= 0x40011804
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40011C00
STR R0,[R1]
LDR R0,= 0xBBBB4444
LDR R1,= 0x40011C04
STR R0,[R1]
LDR R0,= 0x44BBBBBB
LDR R1,= 0x40012000
STR R0,[R1]
LDR R0,= 0x44444B44
LDR R1,= 0x40012004
STR R0,[R1]
; FSMC Configuration
; Enable FSMC Bank1_SRAM Bank
LDR R0,= 0x00001000
LDR R1,= 0xA0000010
STR R0,[R1]
LDR R0,= 0x00000200
LDR R1,= 0xA0000014
STR R0,[R1]
LDR R0,= 0x0FFFFFFF
LDR R1,= 0xA0000114
STR R0,[R1]
LDR R0,= 0x00001001
LDR R1,= 0xA0000010
STR R0,[R1]
; 重设向量表的地址 (定位到SRAM起始地址 0x20000000)
IF TargetLocation="RAM"
LDR R0,= 0x20000000
LDR R1,= 0xE000ED08
STR R0,[R1]
ENDIF
PreStackEnd
B PreStackInit_Exit_Pointer
END
其中下面的代码很重要,如果你通过RAM进行调试,并且该中断表位于RAM其实位置,则需要执行该命令。
IF TargetLocation="RAM"
LDR R0,= 0x20000000
LDR R1,= 0xE000ED08
STR R0,[R1]
ENDIF
2、修改.\Solutions\STM3210E\NativeSample\NativeSample.proj文件
在NativeSample.proj文件中作如下修改:
<ItemGroup>
<RequiredProjects Include="$(SPOCLIENT)\DeviceCode\Drivers\Stubs\Processor\stubs_PreStackInit\dotNetMF.proj" />
<DriverLibs Include="cpu_prestackinit_stubs.$(LIB_EXT)" />
</ItemGroup>
修改为:
<ItemGroup>
<RequiredProjects Include="$(SPOCLIENT)\DeviceCode\Targets\Native\CortexM3\DeviceCode\PreStackInit\dotNetMF.proj" />
<DriverLibs Include="PreStackInit.$(LIB_EXT)" />
</ItemGroup>
3、修改.\Solutions\STM3210E\NativeSample\Scatterfile_tools_mdk.xml文件
<ExecRegion Name="ER_RAM_RO" Base="0x00000000" Options="ABSOLUTE" Size="0x0005ffe0">
修改为:
<ExecRegion Name="ER_RAM_RO" Base="0x20000000" Options="ABSOLUTE" Size="">
4、编译测试
上一篇文章和本篇文章所完成的操作其实只是铺垫,外在并没有什么效果表现。不过我们下一步将要做的设置芯片时钟将是重要一步,经过初始化时钟后,我们的开发板将会运行在72M的最高频率上,这时我们原先做LED闪烁节奏将大大提速。
分享到:
相关推荐
3. 初始化脚本:可能是一个单独的初始化函数或者一个配置文件,用于设置FSMC和SSD1963。 4. 示例代码:演示如何使用驱动函数在屏幕上显示图像。 总的来说,这个压缩包提供的资源可以帮助你理解和实践如何利用STM32...
在Keil为S3C2440A自动生成的代码上简单修改而来 功能:在片内SRAM中初始化片外SDRAM。bin文件目前只能在NandFlash模式下运行。若要在NorFlash模式下,需修改scatter文件。在keil下不知道怎么编译位置无关的代码。
DE2-35 SRAM简单读写VHDL源码主要涉及的是数字逻辑设计领域,具体是使用硬件描述语言VHDL对静态随机访问存储器(SRAM)进行读写操作的设计。在嵌入式系统和FPGA(Field Programmable Gate Array)应用中,SRAM是一种...
《512-Bit-SRAM-master:深入理解6T SRAM设计与内存技术》 在电子工程领域,静态随机存取存储器(Static Random-Access Memory,简称SRAM)是广泛应用的一种内存类型,尤其在高性能计算和嵌入式系统中扮演着重要...
TSOP-48引脚封装,LPWizard封装定制软件。本文件内有LPWizard10.4的安装包和相关的库,破解程序等一套文件...使用LPWizard可以生成自己想要的大部分pcb元器件封装,如电阻、电容、电感、LED、LDO、FPGA、SRAM、SDRAM等
在研究这个压缩包时,应重点关注代码中的初始化函数、内存分配策略、数据存取模式以及中断处理中的SRAM操作。同时,结合MDK的编译和调试工具,能更深入地理解代码运行过程,提升嵌入式系统的开发能力。
### 从Flash和SRAM中触发中断的过程示例 #### 概述 ...从初始化硬件资源、配置定时器到编写中断服务程序,每一步都至关重要。理解这些原理有助于开发者更好地利用嵌入式系统的资源,优化应用程序的性能。
在IT行业中,SRAM(Static Random-Access Memory)是一种常见的半导体存储器类型,以其高速读取和写入能力而著称。"行业分类-设备装置-改善SRAM单元可写性.zip"这个压缩包文件主要关注的是如何提高SRAM单元的可写性...
标题中的“16x4-6T-SRAM-Memory-Block-master”暗示了这是一个关于设计16位宽、4字深度的6晶体管(6T)静态随机存取存储器(SRAM)内存块的项目。SRAM是集成电路中常用的高速缓存存储技术,它在不需要刷新的情况下能...
2. **SRAM配置**:在STM32的寄存器配置中,设置外部SRAM的起始地址、大小以及访问模式,以便处理器能正确地读写外部SRAM。 3. **驱动适配**:针对ATK4.3寸屏幕,可能需要编写或修改LCD驱动程序,使其能够通过STM32...
存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。...
总结,通过STM32的FSMC总线访问SRAM是一种常见的扩展存储方式,它涉及到硬件连接、FSMC控制器的初始化、地址映射以及优化策略等多个环节。正确理解和运用这些知识点,能够帮助开发者充分利用STM32的资源,构建高效、...
### ARM嵌入式系统初始化过程详解 #### 一、引言 ARM嵌入式系统作为现代电子设备的核心组件之一,在物联网、智能硬件等领域扮演着重要角色。为了确保系统的正常运行和高效性能,ARM嵌入式系统的初始化过程至关重要...
此外,还需编写相应的驱动程序,用以处理与SRAM的交互,包括初始化、数据读写等操作。 #### 7. 程序烧录 完成设计和编程后,下一步是将编译好的程序烧录至EPCS4配置存储芯片中。这一过程通常涉及生成配置文件、...
### IP项目实践:AHB-SRAM设计与验证 #### 背景介绍 在系统级芯片(SoC)设计领域,内存子系统的设计是至关重要的一个环节。内存接口的性能直接影响到整个系统的运行效率和可靠性。其中,高级微控制器总线架构...
4. **系统内存和外设初始化**:包括SRAM的初始化、Flash存储区的设置,以及如ADC、SPI、I2C、UART等外设的初始化。例如,对于一个使用串口通信的应用,需要设置USART的波特率、数据位、停止位、奇偶校验等参数。 5....
在初始化异常向量表时,需要将中断向量表的每个入口点设置为对应的中断处理程序,同时也需要设置中断优先级和中断屏蔽位等。在 ARM 微处理器中,一共有 7 种中断类型,每种中断类型都有其对应的中断向量表入口点。 ...