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

📄 startup.s

📁 ucos2.83在LPC2148上的例子
💻 S
字号:

;定义堆栈的大小

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


; --- Amount of memory (in bytes) allocated for stacks

Len_FIQ_Stack    EQU     256
Len_IRQ_Stack    EQU     256
Len_ABT_Stack    EQU     0
Len_UND_Stack    EQU     0
Len_SVC_Stack    EQU     1024
Len_USR_Stack    EQU     1024

; Add lengths >0 for FIQ_Stack, ABT_Stack, UND_Stack if you need them.
; Offsets will be loaded as immediate values.
; Offsets must be 8 byte aligned.

Offset_FIQ_Stack         EQU     0
Offset_IRQ_Stack         EQU     Offset_FIQ_Stack + Len_FIQ_Stack
Offset_ABT_Stack         EQU     Offset_IRQ_Stack + Len_IRQ_Stack
Offset_UND_Stack         EQU     Offset_ABT_Stack + Len_ABT_Stack
Offset_SVC_Stack         EQU     Offset_UND_Stack + Len_UND_Stack
Offset_USR_Stack         EQU     Offset_SVC_Stack + Len_SVC_Stack


;引入的外部标号在这声明
    IMPORT  __main                          ;C语言主程序入口 
    IMPORT  TargetResetInit                 ;目标板基本初始化

    IMPORT  bottom_of_heap
    
    IMPORT __rt_entry
    IMPORT  OS_CPU_ARM_ExceptUndefInstrHndlr
    IMPORT  OS_CPU_ARM_ExceptSwiHndlr
    IMPORT  OS_CPU_ARM_ExceptPrefetchAbortHndlr
    IMPORT  OS_CPU_ARM_ExceptDataAbortHndlr
    IMPORT  OS_CPU_ARM_ExceptIrqHndlr
    IMPORT  OS_CPU_ARM_ExceptFiqHndlr
    IMPORT  OS_CPU_ExceptHndlr
	IMPORT  Tmr_TickISR_Handler


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

    CODE32

    AREA    vectors,CODE,READONLY
        ENTRY
;中断向量表
Reset
        LDR     PC, ResetAddr
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr

ResetAddr           DCD     ResetInit
UndefinedAddr       DCD     OS_CPU_ARM_ExceptUndefInstrHndlr
SWI_Addr            DCD     OS_CPU_ARM_ExceptSwiHndlr
PrefetchAddr        DCD     OS_CPU_ARM_ExceptPrefetchAbortHndlr
DataAbortAddr       DCD     OS_CPU_ARM_ExceptDataAbortHndlr
Nouse               DCD     0
 
IRQ_Addr            DCD     OS_CPU_ARM_ExceptIrqHndlr
;IRQ_Addr   DCD  IRQ_Handler


FIQ_Addr            DCD     OS_CPU_ARM_ExceptFiqHndlr


;********************************************************************************************************/

InitStack  
        IMPORT  top_of_stacks  
        MOV     R0, LR

; --- Initialize stack pointer registers

; Enter each mode in turn and set up the stack pointer

 ; defined in stack.s and located by scatter file
       LDR     r1, =top_of_stacks

       MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
       SUB     sp, r1, #Offset_FIQ_Stack

       MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; No interrupts
       SUB     sp, r1, #Offset_IRQ_Stack

       MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit ; No interrupts
       SUB     sp, r1, #Offset_ABT_Stack

       MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit ; No interrupts
       SUB     sp, r1, #Offset_UND_Stack

       MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
       SUB     sp, r1, #Offset_SVC_Stack


       MSR     CPSR_c, #Mode_SYS:OR:F_Bit           ; IRQs now enabled
       SUB     sp, r1, #Offset_USR_Stack
       
       
       MOV     PC, R0  
          
          
IRQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      OS_CPU_ExceptHndlr
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4       
;********************************************************************************************************/
ResetInit     
        BL      InitStack               ;初始化堆栈
        BL      TargetResetInit         ;目标板基本初始化


        B       __main			;跳转到c语言入口


;/*********************************************************************************************************
;** 函数名称: __user_initial_stackheap 
;** 功能描述: 库函数初始化堆和栈,不能删除
;** 
;** 输 入: 参考库函数手册
;**
;** 输 出: 参考库函数手册
;**         
;** 全局变量: 无
;** 调用模块: 无
;********************************************************************************************************/

__user_initial_stackheap    
    LDR   r0,=bottom_of_heap
    MOV   pc,lr

    END
;/*********************************************************************************************************
;**                            End Of File
;********************************************************************************************************/

⌨️ 快捷键说明

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