📄 startup.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 + -