⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 ucos内核源代码
💻 S
字号:
;* COPYRIGHT (c) Notifier 1993-2004, All Rights Reserved
;*
;* 描述:        LPC2xxx的启动模块,汇编代码
;*
;* 版本历史:
;*
;* 版本     作者        日期        修改内容
;* 1.0      王璀        2005-11-04  创建
;* 1.1      王璀        2006-01-17  标准化
;*                                  将UndefinedInst,PrefetchAbort
;*                                  DataAbort,Fiq的处理函数移到启动模块的C代码中,
;*                                  这样可以在输出中察觉这些异常。
;* 1.2      王璀        2006-01-19  将外部总线寄存器的初始化移到启动模块的C代码中
;* 1.21     王璀        2006-03-15  简化了初始化的步骤以及堆和栈的配置方式

;==============================================================================
; 包含的头文件
;==============================================================================
        INCLUDE startup_cfg.inc
    
;==============================================================================
; 本地宏及类型定义
;==============================================================================
; --- Standard definitions of mode bits and interrupt (I & F) flags in PSRs

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 ; available on ARM Arch 4 and later

I_Bit           EQU     0x80 ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40 ; when F bit is set, FIQ is disabled

;==============================================================================
; 外部符号声名
;==============================================================================
        ;IMPORT __use_two_region_memory
        IMPORT __use_no_semihosting_swi

        IMPORT ResetInitC
        IMPORT __main
    
        IMPORT Swi
        IMPORT UndefinedInstHandler
        IMPORT PrefetchAbortHandler
        IMPORT DataAbortHandler
        IMPORT FiqHandler
    
;==============================================================================
; 本地符号声名
;==============================================================================
        EXPORT Reset

        EXPORT bottom_of_heap
        EXPORT top_of_stacks

;==============================================================================
; 代码
;==============================================================================
        CODE32

        AREA    vectors,CODE,READONLY
        ENTRY
; --- Exception vectors
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedInstAddr
        LDR     PC, SwiAddr
        LDR     PC, PrefetchAbortAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80          ; must be the checksum of other 7 vector instructions
        LDR     PC, [PC, #-0xff0]
        LDR     PC, FiqAddr

ResetAddr           DCD     ResetInitA
UndefinedInstAddr   DCD     UndefinedInstHandler
SwiAddr             DCD     Swi
PrefetchAbortAddr   DCD     PrefetchAbortHandler
DataAbortAddr       DCD     DataAbortHandler
Reserved            DCD     0
IrqAddr             DCD     0
FiqAddr             DCD     FiqHandler

;------------------------------------------------------------------------------
; 函数描述:RESET  复位入口
ResetInitA
        ; --- Initialize stack pointer registers
        ; Enter each mode in turn and set up the stack pointer
        LDR     r0, =top_of_stacks

        MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; (0x11|0x80|0x40 = 0xD1)
        LDR     r1,     =Offset_FIQ_Stack
        SUB     sp, r0, r1

        MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; (0x12|0x80|0x40 = 0xD2)
        LDR     r1,     =Offset_IRQ_Stack
        SUB     sp, r0, r1

        MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit ; (0x17|0x80|0x40 = 0xD7)
        LDR     r1,     =Offset_ABT_Stack
        SUB     sp, r0, r1

        MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit ; (0x1B|0x80|0x40 = 0xDB)
        LDR     r1,     =Offset_UND_Stack
        SUB     sp, r0, r1

        MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit ; (0x13|0x80|0x40 = 0xD3)
        LDR     r1,     =Offset_SVC_Stack
        SUB     sp, r0, r1

        MSR     CPSR_c, #Mode_SYS:OR:I_Bit:OR:F_Bit ; (0x1F|0x80|0x40 = 0xDF)
        LDR     r1,     =Offset_SYS_Stack
        SUB     sp, r0, r1

        ; --- Initialize other things wrote in C language
        BL      ResetInitC

        ; --- Jump to the entry point of C program
        B       __main
    

;------------------------------------------------------------------------------
        AREA    Heap, DATA, NOINIT

; Create dummy variable used to locate bottom of heap
bottom_of_heap  SPACE   1

;------------------------------------------------------------------------------
        AREA    Stacks, DATA, NOINIT

; Create dummy variable used to locate stacks in memory
top_of_stacks   SPACE   1

;------------------------------------------------------------------------------
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -