LPC2000系列学习笔记10--Bootloader

发布者:ByteChaser最新更新时间:2021-12-02 来源: eefocus关键字:LPC2000系列  Bootloader  堆栈 手机看文章 扫描二维码
随时随地手机看文章

1.1 变(常)量声明

首先声明堆栈大小


SVC_STACK_LEGTH         EQU         0

    FIQ_STACK_LEGTH         EQU         0

    IRQ_STACK_LEGTH         EQU         256    ;IRQ中断堆栈

    ABT_STACK_LEGTH         EQU         0

    UND_STACK_LEGTH         EQU         0

  处理器模式声明

    NoInt       EQU 0x80


    USR32Mode   EQU 0x10

    SVC32Mode   EQU 0x13

    SYS32Mode   EQU 0x1f

    IRQ32Mode   EQU 0x12

    FIQ32Mode   EQU 0x11

  外部存储器配置声明

    PINSEL2     EQU 0xE002C014


    BCFG0       EQU 0xFFE00000

    BCFG1       EQU 0xFFE00004 

    BCFG2       EQU 0xFFE00008

    BCFG3       EQU 0xFFE0000C


    IMPORT __use_no_semihosting_swi

    IMPORT __use_two_region_memory


  ;引入的外部标号在这声明

    IMPORT  FIQ_Exception                   ;快速中断异常处理程序

    IMPORT  __main                          ; C语言主程序入口 

    IMPORT  TargetResetInit                 ;目标板基本初始化


;给外部使用的标号在这声明

    EXPORT  bottom_of_heap                  ;heap的底部

    EXPORT  bottom_of_Stacks                ;stack的底部

    EXPORT  top_of_heap                     ;heap的顶部

    EXPORT  StackUsr                        

    

    EXPORT  Reset                           ;复位

    EXPORT __user_initial_stackheap         ;用户初始化堆栈和堆


1.2 建立中断向量表(向量表所有数据32位累加和为0)

 Reset

        LDR     PC, ResetAddr               ;复位后开始的执行地址

        LDR     PC, UndefinedAddr           ;未定义指令异常           

        LDR     PC, SWI_Addr                ;软件中断

        LDR     PC, PrefetchAddr            ;预取中止

        LDR     PC, DataAbortAddr           ;预取数据中止

        DCD     0xb9205f80                  ;保留的异常

        LDR     PC, [PC, #-0xff0]           ;IRQ ( 该指令会读取VICVectAddr寄存器的值,然后放入PC指针 )

        LDR     PC, FIQ_Addr                ;FIQ


    ;给每一个向量分配连续的字存储单元

    ResetAddr           DCD     ResetInit

    UndefinedAddr       DCD     Undefined

    SWI_Addr            DCD     SoftwareInterrupt

    PrefetchAddr        DCD     PrefetchAbort

    DataAbortAddr       DCD     DataAbort

    Nouse               DCD     0

    IRQ_Addr            DCD     0

    FIQ_Addr            DCD     FIQ_Handler


    ;发生以下异常时程序暂停( 除了FIQ )

    ;未定义指令

    Undefined

            B       Undefined


    ;软中断

    SoftwareInterrupt   

            B       SoftwareInterrupt 


    ;取指令中止

    PrefetchAbort

            B       PrefetchAbort


    ;取数据中止

    DataAbort

            B       DataAbort


    ;快速中断

    FIQ_Handler

            STMFD   SP!, {R0-R3, LR}            ;把R0-R3,LR的值存入堆栈

            BL      FIQ_Exception               ;跳转到FIQ中断程序

            LDMFD   SP!, {R0-R3, LR}            ;恢复R0-R3,LR的值

            SUBS    PC,  LR,  #4                ;PC指针跳转到LR-4


1.3 复位程序

    根据外部存储器控制器的引脚接法,对GPIO进行设置(外部存储器所接引脚与P1,P2,P3口的GPIO功能复用),之后对用到的四组存储器组进行设置.

    ResetInit

    ;Initial extenal bus controller.

    ;初始化外部总线控制器,根据目标板决定配置


            LDR     R0, =PINSEL2

        IF :DEF: EN_CRP

            LDR     R1, =0x0f814910   ;芯片加密,禁止JTAG调试

        ELSE

            LDR     R1, =0x0f814914   ;设置总线的I/O引脚

        ENDIF

            STR     R1, [R0]

    ;设置四组存储器配置

            LDR     R0, =BCFG0

            LDR     R1, =0x1000ffef

            STR     R1, [R0]                 ;设置外部第0个存储区


            LDR     R0, =BCFG1

            LDR     R1, =0x1000ffef

            STR     R1, [R0]                 ;设置外部第1个存储区


    ;        LDR     R0, =BCFG2              ;该开发板没有用到后面两组存储器接口  

    ;        LDR     R1, =0x2000ffef

    ;        STR     R1, [R0]                ;设置外部第2个存储区


    ;        LDR     R0, =BCFG3

    ;        LDR     R1, =0x2000ffef

    ;        STR     R1, [R0]                ;设置外部第3个存储区


            BL      InitStack               ;初始化堆栈 Initialize the stack

            BL      TargetResetInit         ;目标板基本初始化 Initialize the target board

                                            ;跳转到c语言入口 Jump to the entry point of C program

        B       __main


1.4 堆栈初始化

    初始化各模式堆栈

InitStack    

        MOV     R0, LR;因芯片模式切换,故将程序返回地址保存到R0,同时在初始化堆栈完成后使用R0返回

;Build the SVC stack

;设置管理模式堆栈

        MSR     CPSR_c, #0xd3  

        LDR     SP, StackSvc

;Build the IRQ stack   

;设置中断模式堆栈

        MSR     CPSR_c, #0xd2

        LDR     SP, StackIrq

;Build the FIQ stack

;设置快速中断模式堆栈

        MSR     CPSR_c, #0xd1

        LDR     SP, StackFiq

;Build the DATAABORT stack

;设置中止模式堆栈

        MSR     CPSR_c, #0xd7

        LDR     SP, StackAbt

;Build the UDF stack

;设置未定义模式堆栈

        MSR     CPSR_c, #0xdb

        LDR     SP, StackUnd

;Build the SYS stack

;设置系统模式堆栈

        MSR     CPSR_c, #0xdf             ;修改为0x5d将打开IRQ中断

        LDR     SP, =StackUsr


        MOV     PC, R0                    ;子程序返回


1.5 目标板初始化

        void TargetResetInit(void)

{

// 设置存储器映射方式,这必须根据硬件来设置. 这里是ADS1.2中的设置.

#ifdef __DEBUG    

    MEMMAP = 0x3;                   //remap

#endif


#ifdef __OUT_CHIP    

    MEMMAP = 0x3;                   //remap

#endif


#ifdef __IN_CHIP    

    MEMMAP = 0x1;                   //remap,根据预定义的宏,设置存储器映射方式

#endif


/* 设置系统各部分时钟 */

    PLLCON = 1;                    ;使能PLL(锁相环),但不连接PLL

#if (Fpclk / (Fcclk / 4)) == 1

    VPBDIV = 0;

#endif

#if (Fpclk / (Fcclk / 4)) == 2

[1] [2]
关键字:LPC2000系列  Bootloader  堆栈 引用地址:LPC2000系列学习笔记10--Bootloader

上一篇:LPC2000系列学习笔记5--中断
下一篇:LPC2000系列学习笔记3--引脚连接模块

推荐阅读最新更新时间:2024-11-21 14:37

WinCE系统下BootLoader的开发
摘要:介绍WinCE.NET系统的旧方法;说明板级支持包(BSP)的基本构成;从开发实际出发,详细阐述如何开发BSP中的重要部件--BootLoader。 关键词:WinCE.NET BSP BootLoader DOC 引言 Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻松的满足。最新的.NET版本较之3.0版本,在实时性和稳定性上有大幅度提高,开始广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产品
[应用]
PIC18单片机的一种新颖的Bootloader设计
引言 Bootloader是操作系统在内核运行之前运行的一段小程序,其功能主要是完成软硬件设备初始化,建立内存空间映射,从而将系统的软硬件环境带到一个合适的状态,或者加载操作系统映像文件实现系统软件升级。针对PIC18系列单片机,目前市面上仅存在HI-TECH公司提供的Bootloader程序,并且需要借助串口调试助手。本文基于Microchip公司的MPLAB软件开发环境设计了一种新颖的Bootloader,并配套编写了PC机端上位机界面程序。其特点是控制灵活,使用便利,系统升级安全可靠。 1 Bootloader的实现 1.1 Bootloader的操作模式 Bootloader在单片机上电/复位后、用户程序之前先运行
[单片机]
PIC18单片机的一种新颖的<font color='red'>Bootloader</font>设计
一文看懂汽车电子ECU bootloader开发
  随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大。消费者对于汽车节能(经济和法规对排放的要求)型、舒适性、互联性、安全性(功能安全和信息安全)的要求越来越高,特别是近年来新能源电动车、车联网和自动驾驶技术的兴起,更大大加速了汽车电子技术的发展。汽车电子ECU(Electronic Control Unit--电控单元)集成的功能日益复杂,为了应对软件远程(在线)功能升级(增加新的功能)和bug修复的需求、对bootLoader(启动加载程序)的需求越来越多。本文详细介绍了汽车电子ECU bootloader的一般性工作原理和开发要点,其适用于所有的汽车电子ECU bootload
[嵌入式]
一文看懂汽车电子ECU <font color='red'>bootloader</font>开发
使用USBASP给Arduino烧写bootloader教程
arduino板由于操作不发导致固件损坏,或者想更新固件怎么办?今天给大家介绍一下如何使用UsbAsp烧写bootloader.个人认为,此种方法比使用TinyIsp要方便并且成本更低。 首先确保手上有一个USBASP下载器,某宝上一搜一大堆,下面以TSROBOT的兼容型UNO板,分别介绍mega16u2的固件和mega328p的固件烧写。______________________________________________________________________ 下载器的驱动安装: 将USBasp 插入电脑usb 接口后,系统提示找到硬件,按下列图示安装。 ignore_js_op 选择“从列表或指定位置安装
[单片机]
使用USBASP给Arduino烧写<font color='red'>bootloader</font>教程

推荐帖子

求购一个二手开发板,最好是arm9平台下,s3c24xx系列的。。。
RT:求购开发板。。二手。。主要是练练手。。开发板要包含触摸屏,各种外部接口。。有意者,请先发个图片让我瞅瞅。。。然后留下您的邮箱地址,具体的我会用邮箱和您联系。。谢谢合作啦!求购一个二手开发板,最好是arm9平台下,s3c24xx系列的。。。我也想知道,正在找這方面的資料~~~~~
qiu_yinong ARM技术
提问+关于MSP430快闪编程方法
请问这些种类的接口都起什么作用的?在编程的时候,有些什么不同?提问+关于MSP430快闪编程方法答:在大规模生产期间对MSP430闪存器件进行编程时,可以使用以下选项: 1-使用编程器(随时使用,无需开发): aMSP-PRGS430 bBSL工具(例如来自GesslerElektronikSoftbaughElprotronic的工具) c群组编程器MSP-GANG430 如欲了解第三方工具,敬请访
led2015 嵌入式系统
wince如何显示png透明图片
需要在wince6.0中做一个能贴png透明图片的按钮类,用到IImageCOM组件,代码如下:IImagingFactory*pImgFactory=NULL;IImage*pImage=NULL;HBITMAPhResult=0;//MessageBox(strFileName);if(SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,
pikky WindowsCE
简单设置让KEIL5支持代码自动补全功能
简单设置让KEIL5支持代码自动补全功能KEIL5都出来了,这么高端,还带有代码补全诶。哈哈,回头下一个体验下。非常感谢楼主的分享啦。凯哥,你都装keil5了,发个安装包给我咯为什么我的那个选项卡左边是空白的呢?感谢一下楼主。TigerSky发表于2014-1-1715:53为什么我的那个选项卡左边是空白的呢? 不会吧。。。。重装下?keil5感觉怪怪的,还是用4你好,我这个设置之后怎么还是不能实现代码自动对齐呀?有什么原因导致的呢?谢谢快速回复!!!
qinkaiabc 单片机
如何解析键盘手柄发过来的命令并控制云台动作(pelco-D/P协议)?
键盘(例如PelcoKBD-300,或者SamsungSPC-1010键盘)手柄通过RS485串口发送命令给主程序,主程序解析后作用于另外一台云台设备,云台设备用的是标准的Pelco-D和Pelco-P协议,网上找到的资料都是直接写云台设备的程序,我没接触过键盘手柄控制的模式,不知道键盘手柄发送过来的命令是什么格式的??读RS485出来的数据又怎么解析呢?麻烦各位多帮忙。。如何解析键盘手柄发过来的命令并控制云台动作(pelco-D/P协议)?帖子沉啦?
xiguajing 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved