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

📄 startup.s

📁 飞利浦LPC2000系列CAN控制器驱动程序
💻 S
字号:
;**************************************************************************************************
;**File Name: Startup.s
;**Function: lpc21xx Start-up code

;**************************************************************************************************

;Assign space For stack
SVC_STACK_LEGTH         EQU         0
FIQ_STACK_LEGTH         EQU         0
IRQ_STACK_LEGTH         EQU         256
ABT_STACK_LEGTH         EQU         0
UND_STACK_LEGTH         EQU         0

PINSEL2                 EQU         0xE002C014 ; the address of PINSEL2


;Declare Extern function And varible
    IMPORT  FIQ_Exception                   
    IMPORT  __main                          
    IMPORT  TargetResetInit                 
    IMPORT  StackUsr
    IMPORT  bottom_of_heap

;Declare inside function And varible
    EXPORT  Reset
    EXPORT __rt_div0
    EXPORT __user_initial_stackheap

    CODE32

    AREA    vectors,CODE,READONLY
        ENTRY
;Interrupt Vectors
Reset
        LDR     PC, ResetAddr		
        LDR     PC, UndefinedAddr
        LDR     PC, SWI_Addr
        LDR     PC, PrefetchAddr
        LDR     PC, DataAbortAddr
        DCD     0xb9205f80
        LDR     PC, [PC, #-0xff0]
        LDR     PC, FIQ_Addr

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


Undefined
        B       Undefined


SoftwareInterrupt
        B       SoftwareInterrupt


PrefetchAbort
        B       PrefetchAbort


DataAbort
        B       DataAbort


FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4



;Encrypt Function

    IF :DEF: EN_CRP
        IF  . >= 0x1fc
        INFO    1,"\nThe data at 0x000001fc must be 0x87654321.\nPlease delete some source before this line."
        ENDIF

    WHILE . < 0x1fc
    NOP
    WEND

    DCD     0x87654321          
    ENDIF




;*************************************************************************************************
;** File Name: ResetInit
;** Function:  Entry For Reset
;************************************************************************************************
ResetInit     

        LDR     R0, =PINSEL2
    IF :DEF: EN_CRP
        LDR     R1, =0x00000030			;want encrypt flash, disable JTAG, P1.26-31 used as GPIO
    ELSE
        LDR     R1, =0x00000034			;Not encrypt flash, enable JTAG, P1.26-31 used as JTAG
    ENDIF
        STR     R1, [R0]



        BL      InitStack               	
        BL      TargetResetInit         	                                     
        B       __main					;to user code entry


;*************************************************************************************************
;** File Name: __user_initial_stackheap 
;** Function:  Initial heap
;***********************************************************************************************
__user_initial_stackheap    
    LDR   r0,=bottom_of_heap
    MOV   pc,lr


;************************************************************************************************
;** File Name: __rt_div0
;** Function: replace original  __rt_div0, reduce code size
;************************************************************************************************
__rt_div0

        B       __rt_div0


;*************************************************************************************************
;** File Name: InitStack
;** Function:  Initial Stack
;**************************************************************************************************
InitStack    
        MOV     R0, LR

;Svc stack
        MSR     CPSR_c, #0xd3
        LDR     SP, StackSvc
;Irq stack
        MSR     CPSR_c, #0xd2
        LDR     SP, StackIrq
;Fiq stack
        MSR     CPSR_c, #0xd1
        LDR     SP, StackFiq
;Abt stack
        MSR     CPSR_c, #0xd7
        LDR     SP, StackAbt
;Undefine stack
        MSR     CPSR_c, #0xdb
        LDR     SP, StackUnd
;System stack
        MSR     CPSR_c, #0x5f   ;enable interrupt by CLR CPSR_I. Dis int, use #0xdf
        LDR     SP, =StackUsr

        MOV     PC, R0


StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4

;/* Assign space For stack */
        AREA    MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  
IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  
FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  
AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  
UndtStackSpace     SPACE   UND_STACK_LEGTH * 4 



    END

⌨️ 快捷键说明

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