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

📄 startup.s

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻 S
字号:
;/*****************************************************************************/
;/* STARTUP.S: Philips LPC214x家族微控制器的初始化文件                        */
;/* 作者:焦进星                                                              */
;/* 时间:2008年月1月22日                                                     */
;/* ARM初学                                                                   */
;/*****************************************************************************/

;/*****************************************************************************/
;/*          标准模式定义                                                     */
;/*****************************************************************************/
Mode_USR        EQU     0x10   ;//正常用户模式,程序正常执行模式
Mode_FIQ        EQU     0x11   ;//快速中断模式,支持高速数据传送或通道处理
Mode_IRQ        EQU     0x12   ;//普通中断模式,处理普通中断 
Mode_SVC        EQU     0x13   ;//系统保护模式,处理软件中断SWI
Mode_ABT        EQU     0x17   ;//中止模式,处理存储器故障,实现虚拟存储器和存储器保护
Mode_UND        EQU     0x1B   ;//未定义模式,支持硬件协处理器和软件仿真
Mode_SYS        EQU     0x1F   ;//系统模式,运行特权操作系统任务

;/*****************************************************************************/
;/*          标志位定义                                                       */
;/*****************************************************************************/
I_Bit           EQU     0x80   ;//当 I bit 置位, IRQ是关闭的
F_Bit           EQU     0x40   ;//当 F bit 置位, FIQ是关闭的

;/*****************************************************************************/
;/*          堆栈定义                                                         */
;/*****************************************************************************/ 
;//各模式堆栈大小定义
USR_Stack_Size  EQU     0x00000400	  ;这部分的堆栈内存空间也用于系统模式
SVC_Stack_Size  EQU     0x000000ff
FIQ_Stack_Size  EQU     0x0000000f
IRQ_Stack_Size  EQU     0x000000ff
UND_Stack_Size  EQU     0x00000000
ABT_Stack_Size  EQU     0x00000000

;//总堆栈大小定义
Stack_Size      EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
                         FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size)

;//各模式堆栈使用的内存空间定义
                      ;//段名 初始化为0	 可读写	   8字对齐
                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
USR_Stack_Mem	 SPACE  USR_Stack_Size 
SVC_Stack_Mem	 SPACE  SVC_Stack_Size 
FIQ_Stack_Mem	 SPACE  FIQ_Stack_Size 
IRQ_Stack_Mem	 SPACE  IRQ_Stack_Size 
UND_Stack_Mem    SPACE  UND_Stack_Size  
ABT_Stack_Mem	 SPACE  ABT_Stack_Size
Stack_Mem		 EQU    USR_Stack_Mem


;//各模式堆栈栈顶定义
USR_Stack_Top	   EQU	 USR_Stack_Mem+USR_Stack_Size
SVC_Stack_Top	   EQU	 SVC_Stack_Mem+SVC_Stack_Size 
FIQ_Stack_Top	   EQU	 FIQ_Stack_Mem+FIQ_Stack_Size
IRQ_Stack_Top	   EQU	 IRQ_Stack_Mem+IRQ_Stack_Size
UND_Stack_Top	   EQU	 UND_Stack_Mem+UND_Stack_Size
ABT_Stack_Top	   EQU	 ABT_Stack_Mem+ABT_Stack_Size
Stack_Top	       EQU	 ABT_Stack_Top

;/*****************************************************************************/
;/*          堆定义                                                           */
;/*****************************************************************************/ 
;//堆大小定义
Heap_Size       EQU     0x00000000

;//堆使用的内存空间定义
					  ;//段名 初始化为0	可读写	  8字对齐
                AREA     HEAP, NOINIT, READWRITE, ALIGN=3
Heap_Mem        SPACE   Heap_Size
                                     
;/*****************************************************************************/
;/*          入口                                                             */
;/*****************************************************************************/ 
                PRESERVE8
				CODE32
				      ;//段名   代码  只读
                AREA    RESET, CODE, READONLY
				;ENTRY	;入口
				
Vectors         LDR     PC, Reset_Addr         ;// 跳转     
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ;// 缺省中断 
                LDR     PC, [PC, #-0x0FF0]     ;// 普通中断入口
                LDR     PC, FIQ_Addr

Reset_Addr      DCD     Reset_Handler	     
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ;// 缺省地址
FIQ_Addr        DCD     FIQ_Handler

                       ;//由用户定义
					    IMPORT  FIQHandler
Undef_Handler   B       Undef_Handler	       ;// 跳转 
SWI_Handler     B       SWI_Handler      
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
FIQ_Handler     B       FIQHandler

                EXPORT  Reset_Handler	       ;// 输出 Reset_Handler
Reset_Handler            
;/*****************************************************************************/
;/*        初始化各模式堆栈                                                   */
;/*****************************************************************************/ 
;  Enter Abort Mode and set its Stack Pointer
                LDR     R0, =ABT_Stack_Top	 
                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
                MOV     SP, R0

;  Enter Undefined Instruction Mode and set its Stack Pointer
				LDR     R0, =UND_Stack_Top
                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV     SP, R0

;  Enter IRQ Mode and set its Stack Pointer
				LDR     R0, =IRQ_Stack_Top
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0                

;  Enter FIQ Mode and set its Stack Pointer
			    LDR     R0, =FIQ_Stack_Top
                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0

;  Enter Supervisor Mode and set its Stack Pointer
				LDR     R0, =SVC_Stack_Top
                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
                MOV     SP, R0

;/*****************************************************************************/
;/*          进入C代码                                                        */
;/*****************************************************************************/ 
                IMPORT  __main
                LDR     R0, =__main
                BX      R0

;/*****************************************************************************/
;/*          初始化堆和栈                                                     */
;/*****************************************************************************/ 
                AREA    |.text|, CODE, READONLY

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap

__user_initial_stackheap
				LDR     R0, = Heap_Mem
                LDR     R1, = (Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem  + Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR
				
                END
;/*****************************************************************************/
;/*          END OF FILE                                                      */
;/*****************************************************************************/ 

⌨️ 快捷键说明

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