zoukankan      html  css  js  c++  java
  • 【.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闪烁节奏将大大提速。

  • 相关阅读:
    Netty源码解析与实战
    什么是序列化id?
    关于idea下tomcat输出日志的问题
    利用jstack 找到异常代码
    mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept
    Spark-Hadoop、Hive、Spark 之间是什么关系?(转)
    转(数据分析的意义)
    按位取反~100=-101
    知识总汇
    前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1638489.html
Copyright © 2011-2022 走看看