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

📄 start.s

📁 ARM9_s3c2410的启动代码
💻 S
字号:
	INCLUDE ..\inc\option.inc
	INCLUDE ..\inc\memcfg.inc
	INCLUDE ..\inc\2410addr.inc


;//处理器工作模式预定义
USERMODE    EQU 	0x10
FIQMODE     EQU 	0x11
IRQMODE     EQU 	0x12
SVCMODE     EQU 	0x13
ABORTMODE   EQU 	0x17
UNDEFMODE   EQU 	0x1b
MODEMASK    EQU 	0x1f
NOINT       EQU 	0xc0

;//堆栈位置(使用2410的片内的4KByte存储器)
_STACK_ADDRESS	EQU	0x040000f00

;//处理器各种工作模式下的堆栈位置定义
UserStack	EQU	(_STACK_ADDRESS-0x0b00)	;//1.25Kbytes
SVCStack	EQU	(_STACK_ADDRESS-0x700)	;//1Kbytes
UndefStack	EQU	(_STACK_ADDRESS-0x600)	;//256bytes
AbortStack	EQU	(_STACK_ADDRESS-0x500)	;//256bytes
IRQStack	EQU	(_STACK_ADDRESS-0x100)	;//1Kbytes
FIQStack	EQU	(_STACK_ADDRESS-0x0)	;//256bytes

	MACRO
$HandlerLabel HANDLER $HandleLabel
;//定义中断句柄
$HandlerLabel
	sub	sp,sp,#4        	;//
	stmfd	sp!,{r0}        ;//
	ldr     r0,=$HandleLabel;//
	ldr     r0,[r0]         ;//
	str     r0,[sp,#4]      ;//
	ldmfd   sp!,{r0,pc}     ;//
	MEND

	AREA    SelfBoot, CODE, READONLY

    IMPORT  |Image$$RO$$Limit|
    IMPORT  |Image$$RW$$Base|
    IMPORT  |Image$$ZI$$Base|
    IMPORT  |Image$$ZI$$Limit|
	IMPORT MAIN

	ENTRY
	EXPORT	__ENTRY
__ENTRY	

;//程序入口地址
ResetEntry
	b	ResetHandler	;//复位
	b	HandlerUndef	;//未定义指令中断
	b	HandlerSWI		;//软件中断
	b	HandlerPabort	;//非法指令中断
	b	HandlerDabort	;//非法数据中断
	b	.				;//保留
	b	HandlerIRQ		;//IRQ中断 
	b	HandlerFIQ		;//FIQ中断

	LTORG   
HandlerFIQ      HANDLER HandleFIQ
HandlerIRQ      HANDLER HandleIRQ
HandlerUndef    HANDLER HandleUndef
HandlerSWI      HANDLER HandleSWI
HandlerDabort   HANDLER HandleDabort
HandlerPabort   HANDLER HandlePabort

;//===================================
; ENTRY  
;//===================================


ResetHandler
	;//关看门狗
	ldr	r0,=WTCON
	ldr	r1,=0x0         
	str	r1,[r0]
	;//禁止所有中断
	ldr	r0,=INTMSK
	ldr	r1,=0xffffffff
	str	r1,[r0]
	;//禁止所有子中断
	ldr	r0,=INTSUBMSK
	ldr	r1,=0x3ff
	str	r1,[r0]
	;//点亮核心板上的两个LED
	ldr	r0,=GPFCON
	ldr	r1,=0x5500		
	str	r1,[r0]
	ldr	r0,=GPFDAT
	ldr	r1,=0x10
	str	r1,[r0]
	;//设置时钟锁存寄存器 
	ldr	r0,=LOCKTIME
	ldr	r1,=0xffffff
	str	r1,[r0]
	;//设置处理器工作主频为100MHz
	;//Fin=10MHz,Fout=100MHz
	ldr	r0,=MPLLCON
	ldr	r1,=((92<<12)+(3<<4)+1)
	str	r1,[r0]
	;//检查是否从掉电模式中恢复
	;//ldr	r1,=GSTATUS2
	;//ldr	r0,[r1]
	;//tst	r0,#0x2
	;//如果是从掉电模式中恢复就跳转到WAKEUP_POWER_OFF处执行
	;//bne	WAKEUP_POWER_OFF
	;//设置内存控制寄存器
	adr	r0, SMRDATA
	ldr	r1, =BWSCON
	add	r2, r0, #52
0       
	ldr	r3, [r0], #4    
	str	r3, [r1], #4    
	cmp	r2, r0		
	bne	%B0
	;//初始化堆栈
	bl	InitStacks
	;//设置IRQ中断句柄
  	; Setup IRQ handler
	ldr	r0,=HandleIRQ
	ldr	r1,=IsrIRQ
	str	r1,[r0]
	;///////////////////////////////
	;//Copy and paste RW data/zero initialized data
    LDR r0,=|Image$$RO$$Limit|
    LDR r1,=|Image$$RW$$Base|
    LDR r3,=|Image$$ZI$$Base|
    CMP r0,r1
    BEQ %F1
0
    CMP r1,r3
    LDRCC r2,[r0],#4
    STRCC r2,[r1],#4
    BCC %B0
1
    LDR r1,=|Image$$ZI$$Limit|
    MOV r2,#0
2
    CMP r3,r1
    STRCC r2,[r3],#4
    BCC %B2
	;//检查启动芯片
	;//ldr	r0, =BWSCON
	;//ldr	r0, [r0]
	;//ands	r0, r0, #6
	;//检查OM[1:0],看是否从NOR FLash启动
	;//否则从NAND FLash启动
	;//bne	copy_proc_beg
	;//adr	r0, ResetEntry
	;//cmp	r0, #0				;if use Multi-ice, 
	;//bne	copy_proc_beg		;dont read nand flash for boot
	;//bl	nand_boot_beg
	bl MAIN

;//非向量中断
IsrIRQ  
	sub	sp, sp, #4       ;//保留来存放PC地址
	stmfd	sp!, {r8-r9}
	ldr	r9, =INTOFFSET
	ldr	r9, [r9]
	ldr	r8, =HandleEINT0
	add	r8, r8,r9,lsl #2
	ldr	r8, [r8]
	str	r8, [sp,#8]
	ldmfd	sp!,{r8-r9,pc}

;//堆栈初始化程序
InitStacks
	;//初始化UndefMode模式堆栈
	mrs	r0,cpsr
	bic	r0,r0,#MODEMASK
	orr	r1,r0,#UNDEFMODE|NOINT
	msr	cpsr_cxsf,r1
	ldr	sp,=UndefStack
	;//初始化AbortMode模式堆栈
	orr	r1,r0,#ABORTMODE|NOINT
	msr	cpsr_cxsf,r1
	ldr	sp,=AbortStack
	;//初始化IRQMode模式堆栈
	orr	r1,r0,#IRQMODE|NOINT
	msr	cpsr_cxsf,r1
	ldr	sp,=IRQStack
    ;//初始化FIQMode模式堆栈
	orr	r1,r0,#FIQMODE|NOINT
	msr	cpsr_cxsf,r1
	ldr	sp,=FIQStack
	;//初始化SVCMode模式堆栈
	orr	r1,r0,#SVCMODE|NOINT
	msr	cpsr_cxsf,r1
	ldr	sp,=SVCStack
	;//此处没有初始化User模式堆栈,如果初始化就无法返回
	mov	pc,lr 
	;//此处必须是SVC模式,否则LR寄存器的值无效

	LTORG
;//内存初始化参数
SMRDATA DATA
        DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    	DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;//GCS0
    	DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;//GCS1 
    	DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;//GCS2
    	DCD 0x1f7c;((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;//GCS3
    	DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;//GCS4
    	DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;//GCS5
    	DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;//GCS6
    	DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;//GCS7
    	DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    
		DCD 0x32            ;//SCLK power saving mode, BANKSIZE 128M/128M
    	DCD 0x30            ;//MRSR6 CL=3clk
    	DCD 0x30            ;//MRSR7

;//内存中的中断向量表首地址共占用160个字节
_ISR_ADDRESS	EQU	0x040000f00

    	AREA RamData, DATA, READWRITE

        ^   _ISR_ADDRESS
HandleReset 	#   4
HandleUndef 	#   4
HandleSWI   	#   4
HandlePabort    #   4
HandleDabort    #   4
HandleReserved  #   4
HandleIRQ   	#   4
HandleFIQ   	#   4
;//IntVectorTable
HandleEINT0   	#   4
HandleEINT1   	#   4
HandleEINT2   	#   4
HandleEINT3   	#   4
HandleEINT4_7	#   4
HandleEINT8_23	#   4
HandleRSV6		#   4
HandleBATFLT   	#   4
HandleTICK   	#   4
HandleWDT		#   4
HandleTIMER0 	#   4
HandleTIMER1 	#   4
HandleTIMER2 	#   4
HandleTIMER3 	#   4
HandleTIMER4 	#   4
HandleUART2  	#   4
HandleLCD 		#   4
HandleDMA0		#   4
HandleDMA1		#   4
HandleDMA2		#   4
HandleDMA3		#   4
HandleMMC		#   4
HandleSPI0		#   4
HandleUART1		#   4
HandleRSV24		#   4
HandleUSBD		#   4
HandleUSBH		#   4
HandleIIC   	#   4
HandleUART0 	#   4
HandleSPI1 		#   4
HandleRTC 		#   4
HandleADC 		#   4

        END

⌨️ 快捷键说明

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