【.Net Micro Framework PortingKit - 05】SRAM初始化&设置NVIC中断表偏移

上篇《修改启动代码&重写向量表》文章中我们介绍了中断向量表的编写,这次我们编写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闪烁节奏将大大提速。

你可能感兴趣的:(.net,xml,ext,脚本)