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

📄 entry.s

📁 该工程是一个基于嵌入式s3c2410的一个led测试代码
💻 S
字号:
	;;****************************************************************************
;;本文件为系统引导模块
;;	功能:
;;		初始化系统环境,将执行代码拷贝到RAM中,然后将程序指针跳转到RAM的程序运行首地址执行
;;		在相应中断时,将直接跳转到PC+RAMBASE中执行。
;;		系统存储设置为如下格式:
;;				
;;
;;功能:
;;		初始化系统频率
;;		设置网络堆栈
;;		
;;
;;
;;****************************************************************************

	
R1_M    EQU     (1)

USERMODE    EQU 	0x10
FIQMODE     EQU 	0x11
IRQMODE     EQU 	0x12
SVCMODE     EQU 	0x13
ABORTMODE   EQU 	0x17
UNDEFMODE   EQU 	0x1b
MODEMASK    EQU 	0x1f
NOINT       EQU 	0xc0

_STACK_BASEADDRESS EQU 0x31ff8000 
UserStack		EQU	(_STACK_BASEADDRESS-0x3800)		;0x31ff4800 ~ 
SVCStack        EQU	(_STACK_BASEADDRESS-0x2800) 	;0x31ff5800 ~
UndefStack		EQU	(_STACK_BASEADDRESS-0x2400) 	;0x31ff5c00 ~
AbortStack		EQU	(_STACK_BASEADDRESS-0x2000) 	;0x31ff6000 ~
IRQStack        EQU	(_STACK_BASEADDRESS-0x1000)		;0x31ff7000 ~
FIQStack		EQU	(_STACK_BASEADDRESS-0x0)		;0x31ff8000 ~ 




;**************************************************
;
;向量设置宏定义
;**************************************************
	MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
	sub	sp,sp,#4        ;decrement sp(to store jump address)
	stmfd	sp!,{r0}        ;PUSH the work register to stack(lr does't push because it return to original address)
	ldr     r0,=$HandleLabel;load the address of HandleXXX to r0
	ldr     r0,[r0]         ;load the contents(service routine start address) of HandleXXX
	str     r0,[sp,#4]      ;store the contents(ISR) of HandleXXX to stack
	ldmfd   sp!,{r0,pc}     ;POP the work register and pc(jump to ISR)
	MEND
	
	MACRO
	SetRegister $Addr,$Value
	ldr	r0,=$Addr
	ldr	r1,=$Value
	str	r1,[r0]
	MEND
;*****************************
;程序入口
;
;*****************************
	AREA    Init,CODE,READONLY
	IMPORT	Main
	ENTRY	
	;Don't use DRAM,such as stmfd,ldmfd......
	;SVCstack is initialized before
	;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
	
	mrs	r0,cpsr
	bic	r0,r0,#MODEMASK
	orr	r1,r0,#UNDEFMODE|NOINT
	msr	cpsr_cxsf,r1		;UndefMode
	ldr	sp,=UndefStack
	
	orr	r1,r0,#ABORTMODE|NOINT
	msr	cpsr_cxsf,r1		;AbortMode
	ldr	sp,=AbortStack

	orr	r1,r0,#IRQMODE|NOINT
	msr	cpsr_cxsf,r1		;IRQMode
	ldr	sp,=IRQStack
    
	orr	r1,r0,#FIQMODE|NOINT
	msr	cpsr_cxsf,r1		;FIQMode
	ldr	sp,=FIQStack

	orr	r1,r0,#SVCMODE|NOINT
	msr	cpsr_cxsf,r1		;FIQMode
	ldr	sp,=SVCStack
	
	;USER mode has not be initialized.
	
	;mov	pc,lr 
	
	;The LR register won't be valid if the current mode is not SVC mode.
	
	;;##################
	;;go to main
    	b Main        ;Don't use main() because ......
	;;##################

    	b	.                       	
	LTORG
 END
 

⌨️ 快捷键说明

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