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

📄 startup.s

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 S
字号:
;/************************************************************************************************
;定义系统中断向量表以及相应代码.
;07-09-17,huangsl,所有堆栈的大小都只使用 size 来定位.
;/************************************************************************************************
		
			INCLUDE CONDEFINE.s
		
;/*******************************************************************************************************
;** IMPORT LABELS 引用外部标号的声明
;********************************************************************************************************/
     
			IMPORT		OSIrqIsr
			IMPORT		DebugSystem
			
;/*******************************************************************************************************
;** EXPORT LABELS 输出内部标号供外部使用的声明
;********************************************************************************************************/      
		
    	EXPORT  SystemReset
    	
	CODE32
	
	AREA   |RESET|, CODE, READONLY

;中断向量表入口.
;/************************************************************************************************
SystemReset
        LDR     PC, ResetAddr		;跳到入口函数.
UndefinedAddr        
        ;MOVS 	PC , LR						;直接返回
        LDR			PC , DBG_Addr
SwiAddr
				LDR     PC, SWI_Addr		; SWI 中断处理函数
PrefetchAddr        
        ;SUBS		PC , LR , #4		;直接返回
        LDR			PC , DBG_Addr
DataAbortAddr        
        ;SUBS		PC , LR , #4 ; #8		;直接返回
        LDR			PC , DBG_Addr
ReservdAddr        
       ;MOVS 	PC , LR 					;直接返回
       LDR			PC , DBG_Addr
IRQAddr
	   	LDR		PC, IRQ_Addr       ;跳到 IRQ 处理函数。
FIQAddr        
      ;SUBS		PC , LR , #4 			;直接返回
			LDR			PC , DBG_Addr
        
ResetAddr           DCD     ResetHandler
IRQ_Addr            DCD     OSIrqIsr ;HandleIRQ
DBG_Addr						DCD			DebugSystem

	IF	:DEF: ARMULATE   ;only use at amulate
SWI_Addr            DCD     HandleSWI     
	IMPORT	 swiChandler  
	   
;软件中断
HandleSWI

		STMFD   SP!, {R0-R1}
		LDR		R1,[LR,#-4]
		BIC 	R1, R1, #0xFF000000
		CMP		R1 ,#0
		BNE		SWIExit
		CMP		R0, #31
		BHI		SWIExit
		
		STMFD	SP! , {R0-R4 , R12, LR }
		BL		swiChandler
		LDMFD	SP! , {R0-R4 , R12, LR }
		
		ADD		R1,LR , #4
		MRS		R0 , SPSR	;当前状态
		;切换到 IRQ 方式,通过 R0 传递返回地址
		MSR 		CPSR_c, #IRQMODE|NOINT
		STMFD	SP!,{R0-R1}
		MSR		CPSR_c,#SVCMODE|NOINT
		LDMFD	SP!,{R0-R1}
		
		;et IRQ INT
		MSR 		CPSR_c, #IRQMODE|NOINT
		LDR		PC,IRQ_Addr
	
SWIExit
		LDMFD	SP!,{R0-R1}
		MOVS	PC , LR			
	ELSE	;NO ARMULATE
SWI_Addr            DCD     DebugSystem     
  ENDIF

;/********************************************************************************************************
;** RESET  复位入口
;071015,huangsl,直接跳到 C 入口即可.
;********************************************************************************************************/

		IMPORT ISystemReboot
;		IMPORT TASK_DUMP
;		IMPORT OSCurrTaskDump
		IMPORT ||Image$$REALTABLE_SDRAM$$ZI$$Limit||
;		IMPORT gRockTaskStkArray	//080319,huangsl,目前无用
		
ResetHandler

    ;设置堆栈指针 .设置为 SDRAM 的最末端.
    ;070922,huangsl,不能设置为 HEAP空间,否则在初始化时,STACK和HEAP 会重叠.
    ; gSysHeapStart 此空间与 PROC HEAP 重叠,会产生问题.
    ;||Image$$STACK_SDRAM$$ZI$$Limit||	和 系统任务堆栈重叠,在建立 TASK初始化堆栈的时候会把 SP内容修改.
    ;比较可行的办法是利用 SRAM . 如此,不需要重新设置堆栈,但是初始化函数需要注意不能占用 > 0x300 的堆栈.
    LDR		SP, = ||Image$$REALTABLE_SDRAM$$ZI$$Limit||
;    LDR  	SL, = gRockTaskStkArray		;Setup a default Stack Limit (when compiled with "-mapcs-stack-check")
	
;/********************************************************************************************************	

		IMPORT  main    
    ldr	pc, __main     				; Jump to the entry point of C program 跳转到c语言入口	
    
__main  	DCD  main
    END
;/*********************************************************************************************************
;**                            End Of File
;********************************************************************************************************/

⌨️ 快捷键说明

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