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

📄 startup.s

📁 这是一个本人编写修改的一个汇编ARM启动代码其中有一部分是用C写的
💻 S
📖 第 1 页 / 共 2 页
字号:
        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 + -