📄 startup.s
字号:
LDR SP, StackIrq
;// Build the FIQ stack 设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;//Build the DATAABORT stack 设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;//Build the UDF stack 设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;//Build the SYS stack 设置系统模式堆栈
MSR CPSR_c, #0xdf ;//如需要中断把OXDF改为OX5F就是打开IRQ中断
LDR SP, =StackUsr
MOV PC, R0
;/*********************************************************************************************************
;** unction name 函数名称: ResetInit
;** Descriptions 功能描述: RESET 复位入口
;** input parameters 输 入: None 无
;** Returned value 输 出 : None 无
;** Used global variables 全局变量: None 无
;** Calling modules 调用模块: None 无
;**
;********************************************************************************************************/
ResetInit
;//Initial the extenal bus controller 初始化外部总线控制器,根据目标板决定配置
;// DebugInExram :片外RAM调试模式, 程序在片外RAM中 调试入口地址:0X8000000
;// DebugInChipFlash:片内FLASH调试模式,程序在片内FLASH中 调试入口地址:0X0000000
;// RelInChip :片内FLASH工作模式,程序在片内FLASH中。程序写入芯片即被加密,地址同上
;// RelOutChip :片外FLASH工作模式,程序在片外FLASH中。程序入口地址:0X8000000
LDR R0, = PINSEL2
IF :DEF: EN_CRP ;// 只要选择RelInChip目标,编译器会预定义 EN_CRP宏
LDR R1, = 0x0f814910 ;// 管脚功能选择。片内(外)FLASH工作模式,禁止JTAG调试
ELSE
LDR R1, = 0x0f814914 ;// 管脚功能选择。片内(外)调试工作模式,允许JTAG调试
ENDIF
;/********************************************************************************************************
;** 16位配置存储器0读写访问速度的时钟配置(最快配置): 0X10000400
;** 存储器与存储器之间间隔的空闲时钟周期:IDCY=0000,一个时钟,IDCY的取值范围:0000-1111之间1-16 cclk周期
;** 读访问(等待周期+操作周期)WST1=00000,WST1+3;三个时钟,WST1的取值范围:00000-11111之间3-34 cclk周期
;** 写访问(等待周期+操作周期)WST2=00000,WST2+1;一个时钟,WST2的取值范围:00000-11111之间1-32 cclk周期
;********************************************************************************************************/
STR R1, [R0]
LDR R0, = BCFG0
LDR R1, = 0x1000ffef ;// 存储器组配置,访问速度最快,允许含有字节选择输入
; LDR R1, = 0X10000400 ;// 存储器组配置,访问速度最慢,允许含有字节选择输入
STR R1, [R0]
LDR R0, = BCFG1
LDR R1, = 0x1000ffef ;// 存储器组配置,访问速度最快,允许含有字节选择输入
; LDR R1, = 0X10000400 ;// 存储器组配置,访问速度最慢,允许含有字节选择输入
STR R1, [R0]
; LDR R0, = BCFG2
; LDR R1, = 0x2000ffef ;// 存储器组配置,访问速度最快,允许含有字节选择输入
; LDR R1, = 0X10000400 ;// 存储器组配置,访问速度最慢,允许含有字节选择输入
; STR R1, [R0]
; LDR R0, = BCFG3
; LDR R1, = 0x2000ffef ;// 存储器组配置,访问速度最快,允许含有字节选择输入
; LDR R1, = 0X10000400 ;// 存储器组配置,访问速度最慢,允许含有字节选择输入
; STR R1, [R0]
BL InitStack ;// Initialize the stack 初始化堆栈
BL TargetResetInit ;// Initialize the target board 目标板基本初始化
B __main ;// Jump to the entry point of C program 跳转到c语言入口
;/*********************************************************************************************************
;** unction name 函数名称: __user_initial_stackheap
;** Descriptions 功能描述: Initial the function library stacks and heaps, can not deleted!
; 库函数初始化堆和栈,不能删除
;** input parameters 输 入: reference by function library 参考库函数手册
;** Returned value 输 出 : reference by function library 参考库函数手册
;** Used global variables 全局变量: None 无
;** Calling modules 调用模块: None 无
;**
;********************************************************************************************************/
__user_initial_stackheap
LDR R0, = bottom_of_heap
; LDR R1, = StackUsr
LDR R2, = top_of_heap
LDR R3, = bottom_of_Stacks
MOV PC, LR
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
;/******************************************************************************************************
;** encrypt the chip 芯片加密
;*******************************************************************************************************
;** unction name 函数名称: CrpData
;** Descriptions 功能描述: encrypt the chip //芯片加密
;** input parameters 输 入: None 无
;** Returned value 输 出 : None 无
;** Used global variables 全局变量: None 无
;** Calling modules 调用模块: None 无
;**
;******************************************************************************************************/
IF :DEF: EN_CRP
IF . >= 0x1fc
INFO 1,"\nThe data at 0x000001fc must be 0x87654321.\nPlease delete some source before this line."
ENDIF
CrpData
WHILE . < 0x1fc
NOP
WEND
CrpData1
DCD 0x87654321 ;/* When the Data is 为0x87654321,user code be protected.
当此数为0x87654321时,用户程序被保护 */
ENDIF
;/*******************************************************************************************************
;** 分配堆栈空间
;*******************************************************************************************************/
AREA MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;//Stack spaces for Administration Mode 管理模式堆栈空间
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;//Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;//Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;//Stack spaces for Suspend Mode 中止义模式堆栈空间
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;//Stack spaces for Undefined Mode 未定义模式堆栈
AREA Heap, DATA, NOINIT ;// “ NOINIT ”是仅保留内存
bottom_of_heap SPACE 1
AREA StackBottom, DATA, NOINIT
bottom_of_Stacks SPACE 1
AREA HeapTop, DATA, NOINIT
top_of_heap SPACE 1
AREA Stacks, DATA, NOINIT
StackUsr SPACE 1
END
;/*********************************************************************************************************
;** End Of File
;********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -