LPC2138 startup.s

发布者:meilidaowl最新更新时间:2020-03-04 来源: eefocus关键字:LPC2138  startup 手机看文章 扫描二维码
随时随地手机看文章

Mode_USR        EQU     0x10
Mode_FIQ        EQU     0x11
Mode_IRQ        EQU     0x12
Mode_SVC        EQU     0x13
Mode_ABT        EQU     0x17
Mode_UND        EQU     0x1B
Mode_SYS        EQU     0x1F

;这里here@@@!!!是不是只要把I_Bit写成00就行了哦?还是上面的模式??。。。其实我都改了。。可是一个一个式都木有效果哦。,会不会是改错了呢?
I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled


;//  Stack Configuration (Stack Sizes in Bytes)
;//    Undefined Mode      <0x0-0xFFFFFFFF:8>
;//    Supervisor Mode     <0x0-0xFFFFFFFF:8>
;//    Abort Mode          <0x0-0xFFFFFFFF:8>
;//    Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
;//    Interrupt Mode      <0x0-0xFFFFFFFF:8>
;//    User/System Mode    <0x0-0xFFFFFFFF:8>
;// 


UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000008
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000080
USR_Stack_Size  EQU     0x00000400

ISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + 
                         FIQ_Stack_Size + IRQ_Stack_Size)

                AREA    STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem       SPACE   USR_Stack_Size
__initial_sp    SPACE   ISR_Stack_Size

Stack_Top


;//  Heap Configuration
;//     Heap Size (in Bytes) <0x0-0xFFFFFFFF>
;// 


Heap_Size       EQU     0x00000000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit



Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address 
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler


; Reset Handler

                EXPORT  Reset_Handler
Reset_Handler   


; Setup External Memory Pins
                IF      :DEF:EXTERNAL_MODE
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
                ENDIF


; Setup External Memory Controller
                IF      EMC_SETUP <> 0
                LDR     R0, =EMC_BASE

                IF      BCFG0_SETUP <> 0
                LDR     R1, =BCFG0_Val
                STR     R1, [R0, #BCFG0_OFS]
                ENDIF

                IF      BCFG1_SETUP <> 0
                LDR     R1, =BCFG1_Val
                STR     R1, [R0, #BCFG1_OFS]
                ENDIF

                IF      BCFG2_SETUP <> 0
                LDR     R1, =BCFG2_Val
                STR     R1, [R0, #BCFG2_OFS]
                ENDIF

                IF      BCFG3_SETUP <> 0
                LDR     R1, =BCFG3_Val
                STR     R1, [R0, #BCFG3_OFS]
                ENDIF

                ENDIF   ; EMC_SETUP


; Setup VPBDIV
                IF      VPBDIV_SETUP <> 0
                LDR     R0, =VPBDIV
                LDR     R1, =VPBDIV_Val
                STR     R1, [R0]
                ENDIF


; Setup PLL
                IF      PLL_SETUP <> 0
                LDR     R0, =PLL_BASE
                MOV     R1, #0xAA
                MOV     R2, #0x55

;  Configure and Enable PLL
                MOV     R3, #PLLCFG_Val
                STR     R3, [R0, #PLLCFG_OFS] 
                MOV     R3, #PLLCON_PLLE
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]

;  Wait until PLL Locked
PLL_Loop        LDR     R3, [R0, #PLLSTAT_OFS]
                ANDS    R3, R3, #PLLSTAT_PLOCK
                BEQ     PLL_Loop

;  Switch to PLL Clock
                MOV     R3, #(PLLCON_PLLE:OR:PLLCON_PLLC)
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]
                ENDIF   ; PLL_SETUP


; Setup MAM
                IF      MAM_SETUP <> 0
                LDR     R0, =MAM_BASE
                MOV     R1, #MAMTIM_Val
                STR     R1, [R0, #MAMTIM_OFS] 
                MOV     R1, #MAMCR_Val
                STR     R1, [R0, #MAMCR_OFS] 
                ENDIF   ; MAM_SETUP


; Memory Mapping (when Interrupt Vectors are in RAM)
MEMMAP          EQU     0xE01FC040      ; Memory Mapping Control
                IF      :DEF:REMAP
                LDR     R0, =MEMMAP
                IF      :DEF:EXTMEM_MODE
                MOV     R1, #3
                ELIF    :DEF:RAM_MODE
                MOV     R1, #2
                ELSE
                MOV     R1, #1
                ENDIF
                STR     R1, [R0]
                ENDIF


; Initialise Interrupt System
;  ...


; Setup Stack for each mode

                LDR     R0, =Stack_Top

;  Enter Undefined Instruction Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #UND_Stack_Size

;  Enter Abort Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #ABT_Stack_Size

;  Enter FIQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #FIQ_Stack_Size

;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #IRQ_Stack_Size

;  Enter Supervisor Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #SVC_Stack_Size

;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR
                IF      :DEF:__MICROLIB

                EXPORT __initial_sp

                ELSE

                MOV     SP, R0
                SUB     SL, SP, #USR_Stack_Size

                ENDIF


; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0


                IF      :DEF:__MICROLIB

                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE
; User Initial Stack & Heap
                AREA    |.text|, CODE, READONLY

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem +      Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
                ENDIF


                END

[1] [1]
关键字:LPC2138  startup 引用地址:LPC2138 startup.s

上一篇:lpc2114系统时钟的设置
下一篇:LPC2148的IAP烧写程序

推荐阅读最新更新时间:2024-11-12 20:18

S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)
我个人觉得nandflash上用yaffs2文件系统是很好的方案,但是最新的Linux并不支持yaffs2文件系统,需要你自己给内核打补丁,不过话说在前面,由于内核间差异及兼容问题,在编译时肯定会出现各种编译问题,需要你一一的去解决。 一、准备工作 1. 下载源码 使用git工具下载:$ git clone git://www.aleph1.co.uk/yaffs2 2. 给内核打补丁 下载完成后,在该执行目录下会有yaffs2文件夹,进入该文件夹。 $ ./patch-ker.sh c m ../../kernel/test/linux-3.14.4 Updating ../../kernel/te
[单片机]
<font color='red'>S</font>3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)
uboot在s3c2440上的移植(5)
一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 9)实现u-boot对yaffs/yaffs2文件系统下载的支持。 注意:此篇对Nand的操作是基于MTD架构方式,在“u-boot-2009.08在2440上的移植详解(三)”中讲到过。 通常一个Nnad Flash存储设备由若干块组成,1个块由若干页组成。一般128MB以下容量的Nand Flash芯片,一页大小为528B,被依次分为2个256B的主数据区
[单片机]
后置两项首创 OPPO R11s暗光表现可期待
OPPO全面屏旗舰R11s呼之欲出,在早先公布的宣传语中,OPPO将R11s定义为“前后2000万,全面屏拍照手机”,可见该机依然将主打拍照。OPPO官微今天上午公布R11s将采用双f/1.7大光圈智选双摄,令粉丝赞叹不已。没想到这只是一个开始,OPPO官微刚刚宣布,除了双f/1.7大光圈之外,R11s还采用了2.0μm大像素。 据悉,2.0μm大像素是从软硬两方面来实现。首先,OPPO将那颗2000万后置摄像头的滤光片面积增大到4倍,这样原本1个基础像素感应的光学信号将由4个基础像素来完成,这就意味着4个基础像素聚合为1个单像素面积为2.0μm的大像素,感光面积提升了4倍,实现更大的进光量。同时通过软件计算,把信号再
[手机便携]
JLINK烧写程序 at91sam7s64下载程序
1.下载SAM-BA-Install.exe软件安装 2. 1 将at91sam7s64的ERASE 接至高电平(必须保持大于50ms的时间),擦除flash中所有内容的同时会解锁内部所有flash防写锁, 允许对flash编程 2 将at91sam7s64的TST 接至高电平20秒或以上(在此期间at91sam7s64内部TST逻辑控制单元会检测内部flash是否被锁定,拔出usb。 3.插入USB, 点击connect 点击sendfile右侧的 选择Jlink FirmWare.bin 然后点击Sendfile 发送成功 拔出usb,在重新插上就OK了
[单片机]
JLINK烧写程序 at91sam7<font color='red'>s</font>64下载程序
误操作bug解决 三星为S7/S7 edge更新升级
    三星S7上市已经有段时间,而多多少少的bug也是存在,近日欧洲地区的三星S7和S7 edge用户则收到了一个156MB的系统更新,此次更新主要解决了上述手机存在的两个问题,一是修复了照片变形问题,其二是修复三星S7 edge边缘误触问题。 三星为S7/S7 edge推送最新升级包   在 对屏幕触控操作进行改善后,三星Galaxy S7 edge用户会发现在一只手使用电话时,会明显减少针对侧变屏幕误操作的问题。除了矫正误操作之外, 在更新后,在相机应用中会出现“形状矫正”功能,可以通过专用的应用程序切换菜单查看时修正图片发生扭曲的问题。另外,本次升级还包括了其它方面的bug 修复及性能改善。 三星Galaxy S7 
[手机便携]
采用AT89S51单片机的冲床控制器设计
本文介绍了一种用Atmel89S51单片机仿真PLC控制的方法,设计适合刚性离合器冲床的控制器,介绍了用光电隔离的输入输出电路的基本构成和工作原理,重点介绍了内部键盘显示电路的设计思想,同时给出了冲床控制的电器原理图。 系统硬件配置以AT89S51单片机为核心。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4Kb ISP(In-system programmable)可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,内置看门狗(WDT)电路。 功能强大的AT89S51可为许多嵌入式控制应用系统提供高
[单片机]
R&S广播电视测试系统成功集成D-Book
2014年9月16日,慕尼黑/伦敦 — 通过与罗德与施瓦茨公司的合作,数字电视集团广播一致性测试实验室(DTG Testing)成功地测试了R&S BTC和R&S AVBrun D-Book测试套件。业界现在已具有由DTG Testing认证的极其紧凑的测试解决方案。D-Book介绍了英国地面数字广播接收机的互操作性要求,其各章节包含了用于测试这些接收机功能、习性和性能的详细测试方案。通过这些测试的接收机可以提供无干扰的电视接收。D-Book的重要性在于,许多国家都采用了它的测试要求,且几乎未作任何改动。 测试机构和地面广播接收机生产商现在可以使用罗德与施瓦茨公司的R&S BTC进行DTG D-Book预认证测试。
[测试测量]
S3C2440的七种模式之——未定义模式(去掉bl print1 bug解决)
现在做第一个实验,模拟未定义模式。 未定义模式,是cpu遇到自己不能识别的指令时候做出的异常处理。 arm指令的机器码一定是按照某种规范要求的,不然你随意写一条指令,cpu不是都可以执行吗?在cpu没有定义该条指令含义的情况下,我们执行了这样未定义的指令,就会进入未定义异常。 现在我们要模拟一个未定义异常,所以我们只要写出一个cpu无法识别的指令即可。 在这之前,要明白一个道理,在内存中执行的机器码,只有0,1两个值,不同的指令被分解为不同的0,1信号的机器码。 所以,我们在运行内存中存放一个32bit的值,这个值又恰恰是上图所不能表示的指令,那么这样,就可以测试未定义异常了。我们采用.word 关键字,.word ex
[单片机]
<font color='red'>S</font>3C2440的七种模式之——未定义模式(去掉bl print1 bug解决)
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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