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

简介: 上篇《修改启动代码&重写向量表》文章中我们介绍了中断向量表的编写,这次我们编写SRAM初始化代码,在《调试初步:点亮LED灯》文章中,我们提到了MDK脚本代码,其实这部分代码和MDK脚本代码实现类似的功能。

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

相关文章
|
2月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
540 2
|
2月前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
582 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
3月前
|
C++
提示缺少.NET Framework 3.5 安装错误:0x80070002、0x800F0950\0x80004002
.NET Framework常见问题及解决方法汇总,
475 0
|
12月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
338 5
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
439 0
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
231 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
268 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
200 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
350 0

热门文章

最新文章