📄 startup.s
字号:
;** Created by: 黄绍斌
;** Created Date: 2005-12-31
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;**********************************禁止mmu**********************************************************************/
DisableMMU
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<0)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** Function name: EnableICache
;** Descriptions: 使能指令CACHE
;** Input: 无
;** Output: 无
;** Created by: 黄绍斌
;** Created Date: 2005-12-31
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
EnableICache
MRC p15,0,R0,c1,c0,0
ORR r0,R0,#(1<<12)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** Function name: DisableICache
;** Descriptions: 禁止指令CACHE
;** Input: 无
;** Output: 无
;** Created by: 黄绍斌
;** Created Date: 2005-12-31
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
DisableICache
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<12)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** Function name: EnableDCache
;** Descriptions: 使能数据CACHE
;** Input: 无
;** Output: 无
;** Created by: 黄绍斌
;** Created Date: 2005-12-31
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
EnableDCache
MRC p15,0,R0,c1,c0,0
ORR R0,R0,#(1<<2)
MCR p15,0,R0,c1,c0,0
MOV PC, LR
;/*********************************************************************************************************
;** Function name: DisableDCache
;** Descriptions: 禁止数据CACHE
;** Input: 无
;** Output: 无
;** Created by: 黄绍斌
;** Created Date: 2005-12-31
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
DisableDCache
MRC p15,0,R0,c1,c0,0
BIC R0,R0,#(1<<2)
MCR p15,0,R0,c1,c0,0
MOV PC,LR
;/*********************************************************************************************************
;** Function name: InitStack
;** Descriptions: 初始化堆栈
;** Input: 无
;** Output: 无
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by: 黄绍斌
;** Modified Date: 2005-12-31
;** Note: 给CPSR_c赋值采用宏的方式
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
;/*****************************注意进入的时候是svc,出来的时候是系统模式***********************************************/
InitStack
MOV R0, LR
; /* 设置管理模式堆栈 */
MSR CPSR_c, #(Mode_SVC | I_BIT | F_BIT) ; 0xd3
LDR SP, StackSvc
; /* 设置中断模式堆栈 */
MSR CPSR_c, #(Mode_IRQ | I_BIT | F_BIT) ; 0xd2
LDR SP, StackIrq
; /* 设置快速中断模式堆栈 */
MSR CPSR_c, #(Mode_FIQ | I_BIT | F_BIT) ; 0xd1
LDR SP, StackFiq
; /* 设置中止模式堆栈 */
MSR CPSR_c, #(Mode_ABT | I_BIT | F_BIT) ; 0xd7
LDR SP, StackAbt
; /* 设置未定义模式堆栈 */
MSR CPSR_c, #(Mode_UND | I_BIT | F_BIT) ; 0xdb
LDR SP, StackUnd
; /* 设置系统模式堆栈 */
MSR CPSR_c, #(Mode_SYS | I_BIT | F_BIT) ; 0xdf
LDR SP, StackUsr
MOV PC, R0
StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4
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
;/*********************************************************************************************************
;** Function name: __user_initial_stackheap
;** Descriptions: 库函数初始化堆和栈,不能删除
;** Input: 参考库函数手册
;** Output: 参考库函数手册
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__user_initial_stackheap
LDR r0,=bottom_of_heap
MOV pc,lr
;/*********************************************************************************************************
;** Function name: __rt_div0
;** Descriptions: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小
;** Input: 参考库函数手册
;** Output: 无
;** Created by: 陈明计
;** Created Date: 2004-02-02
;**-------------------------------------------------------------------------------------------------------
;** Modified by:
;** Modified Date:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
__rt_div0
B __rt_div0
; /* 分配堆空间 */
AREA Myheap, DATA, NOINIT, ALIGN=2
bottom_of_heap SPACE 256 ;库函数的堆空间
; /* 分配堆栈空间 */
AREA MyStacks, DATA, NOINIT, ALIGN=2
UsrStackSpace SPACE USR_STACK_LEGTH * 4 ;用户(系统)模式堆栈空间
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
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -