Startup.s
上传用户:zfj3589
上传日期:2022-07-13
资源大小:635k
文件大小:10k
源码类别:

微处理器开发

开发平台:

C/C++

  1. ;/****************************************Copyright (c)**************************************************
  2. ;**                               Guangzou ZLG-MCU Development Co.,LTD.
  3. ;**                                      graduate school
  4. ;**                                 http://www.zlgmcu.com
  5. ;**
  6. ;**--------------File Info-------------------------------------------------------------------------------
  7. ;** File name:  Startup.s
  8. ;** Last modified Date:  2004-09-17
  9. ;** Last Version:  1.0
  10. ;** Descriptions:  The start up codes for LPC2100, including the initializing codes for the entry point of exceptions and the stacks of user tasks.
  11. ;** Every project should have a independent copy of this file for related modifications
  12. ;**------------------------------------------------------------------------------------------------------
  13. ;** Created by:  Chenmingji
  14. ;** Created date:    2004-02-02
  15. ;** Version: 1.0
  16. ;** Descriptions:  The original version
  17. ;**
  18. ;**------------------------------------------------------------------------------------------------------
  19. ;** Modified by:  Chenmingji
  20. ;** Modified date: 2004-09-17
  21. ;** Version: 1.01
  22. ;** Descriptions:  Modified the bus setting to adapt for many common situations 
  23. ;**
  24. ;**------------------------------------------------------------------------------------------------------
  25. ;** Modified by:  Chenmingji
  26. ;** Modified date: 2004-09-17
  27. ;** Version: 1.02
  28. ;** Descriptions:  Added codes to support the enciphering of the chip
  29. ;**
  30. ;**------------------------------------------------------------------------------------------------------
  31. ;** Modified by:  Chenmingji
  32. ;** Modified date: 2004-09-17
  33. ;** Version: 1.04
  34. ;** Descriptions:  Renewed the template, added codes to support more compilers 
  35. ;**
  36. ;**------------------------------------------------------------------------------------------------------
  37. ;** Modified by: 
  38. ;** Modified date:
  39. ;** Version:
  40. ;** Descriptions: 
  41. ;**
  42. ;********************************************************************************************************/
  43. ;define the stack size
  44. ;定义堆栈的大小
  45. FIQ_STACK_LEGTH         EQU         0
  46. IRQ_STACK_LEGTH         EQU         9*8             ;every layer need 9 bytes stack , permit 8 layer .每层嵌套需要9个字堆栈,允许8层嵌套
  47. ABT_STACK_LEGTH         EQU         0
  48. UND_STACK_LEGTH         EQU         0
  49. NoInt       EQU 0x80
  50. USR32Mode   EQU 0x10
  51. SVC32Mode   EQU 0x13
  52. SYS32Mode   EQU 0x1f
  53. IRQ32Mode   EQU 0x12
  54. FIQ32Mode   EQU 0x11
  55.     IMPORT __use_no_semihosting_swi
  56.     
  57. ;The imported labels    
  58. ;引入的外部标号在这声明
  59.     IMPORT  FIQ_Exception                   ;Fast interrupt exceptions handler 快速中断异常处理程序
  60.     IMPORT  __main                          ;The entry point to the main function C语言主程序入口 
  61.     IMPORT  TargetResetInit                 ;initialize the target board 目标板基本初始化
  62.     IMPORT  SoftwareInterrupt
  63. ;The emported labels    
  64. ;给外部使用的标号在这声明
  65. EXPORT  bottom_of_heap
  66.     EXPORT  StackUsr
  67.     
  68.     EXPORT  Reset
  69.     EXPORT  __user_initial_stackheap
  70.     CODE32
  71.     AREA    vectors,CODE,READONLY
  72.         ENTRY
  73. ;interrupt vectors
  74. ;中断向量表
  75. Reset
  76.         LDR     PC, ResetAddr
  77.         LDR     PC, UndefinedAddr
  78.         LDR     PC, SWI_Addr
  79.         LDR     PC, PrefetchAddr
  80.         LDR     PC, DataAbortAddr
  81.         DCD     0xb9205f80
  82.         LDR     PC, [PC, #-0xff0]
  83.         LDR     PC, FIQ_Addr
  84. ResetAddr           DCD     ResetInit
  85. UndefinedAddr       DCD     Undefined
  86. SWI_Addr            DCD     SoftwareInterrupt
  87. PrefetchAddr        DCD     PrefetchAbort
  88. DataAbortAddr       DCD     DataAbort
  89. Nouse               DCD     0
  90. IRQ_Addr            DCD     0
  91. FIQ_Addr            DCD     FIQ_Handler
  92. ;未定义指令
  93. Undefined
  94.         B       Undefined
  95.         
  96. ;取指令中止
  97. PrefetchAbort
  98.         B       PrefetchAbort
  99. ;取数据中止
  100. DataAbort
  101.         B       DataAbort
  102. ;快速中断
  103. FIQ_Handler
  104.         STMFD   SP!, {R0-R3, LR}
  105.         BL      FIQ_Exception
  106.         LDMFD   SP!, {R0-R3, LR}
  107.         SUBS    PC,  LR,  #4
  108. ;/*********************************************************************************************************
  109. ;** unction name  函数名称:  InitStack
  110. ;** Descriptions  功能描述:  Initialize the stacks  初始化堆栈
  111. ;** input parameters  输 入:    None 无
  112. ;** Returned value    输 出 :   None 无
  113. ;** Used global variables 全局变量:  None 无
  114. ;** Calling modules  调用模块:  None 无
  115. ;** 
  116. ;** Created by  作 者:  Chenmingji 陈明计
  117. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  118. ;**-------------------------------------------------------------------------------------------------------
  119. ;** Modified by  修 改: 
  120. ;** Modified date  日 期: 
  121. ;**-------------------------------------------------------------------------------------------------------
  122. ;********************************************************************************************************/
  123. InitStack    
  124.         MOV     R0, LR
  125. ;Build the SVC stack
  126. ;设置中断模式堆栈
  127.         MSR     CPSR_c, #0xd2
  128.         LDR     SP, StackIrq
  129. ;Build the FIQ stack
  130. ;设置快速中断模式堆栈
  131.         MSR     CPSR_c, #0xd1
  132.         LDR     SP, StackFiq
  133. ;Build the DATAABORT stack
  134. ;设置中止模式堆栈
  135.         MSR     CPSR_c, #0xd7
  136.         LDR     SP, StackAbt
  137. ;Build the UDF stack
  138. ;设置未定义模式堆栈
  139.         MSR     CPSR_c, #0xdb
  140.         LDR     SP, StackUnd
  141. ;Build the SYS stack
  142. ;设置系统模式堆栈
  143.         MSR     CPSR_c, #0xdf
  144.         LDR     SP, =StackUsr
  145.         MOV     PC, R0
  146. ;/*********************************************************************************************************
  147. ;** unction name  函数名称:  ResetInit
  148. ;** Descriptions  功能描述:  RESET  复位入口
  149. ;** input parameters  输 入:    None 无
  150. ;** Returned value    输 出 :   None 无
  151. ;** Used global variables 全局变量:  None 无
  152. ;** Calling modules  调用模块:  None 无
  153. ;** 
  154. ;** Created by  作 者:  Chenmingji 陈明计
  155. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  156. ;**-------------------------------------------------------------------------------------------------------
  157. ;** Modified by  修 改: Chenmingji 陈明计
  158. ;** Modified date  日 期: 2004/02/02 2004年3月3日
  159. ;**-------------------------------------------------------------------------------------------------------
  160. ;********************************************************************************************************/
  161. ResetInit
  162.         BL      InitStack               ; Initialize the stack 初始化堆栈
  163.         BL      TargetResetInit         ; Initialize the target board 目标板基本初始化
  164.                                         ; Jump to the entry point of C program 跳转到c语言入口
  165.         B       __main
  166. ;/*********************************************************************************************************
  167. ;** unction name  函数名称:  __user_initial_stackheap
  168. ;** Descriptions  功能描述:  Initial the function library stacks and heaps, can not deleted!   库函数初始化堆和栈,不能删除
  169. ;** input parameters  输 入:    reference by function library 参考库函数手册
  170. ;** Returned value    输 出 :   reference by function library 参考库函数手册
  171. ;** Used global variables 全局变量:  None 无
  172. ;** Calling modules  调用模块:  None 无
  173. ;** 
  174. ;** Created by  作 者:  Chenmingji 陈明计
  175. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  176. ;**-------------------------------------------------------------------------------------------------------
  177. ;** Modified by 
  178. ;** Modified date 
  179. ;**-------------------------------------------------------------------------------------------------------
  180. ;********************************************************************************************************/
  181. __user_initial_stackheap    
  182.     LDR   r0,=bottom_of_heap
  183. ;    LDR   r1,=StackUsr
  184.     MOV   pc,lr
  185.         
  186. StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
  187. StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
  188. StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
  189. StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
  190. ;/*********************************************************************************************************
  191. ;** unction name  函数名称:  CrpData
  192. ;** Descriptions  功能描述:  encrypt the chip
  193. ;** input parameters  输 入:    None 无
  194. ;** Returned value    输 出 :   None 无
  195. ;** Used global variables 全局变量:  None 无
  196. ;** Calling modules  调用模块:  None 无
  197. ;** 
  198. ;** Created by  作 者:  Chenmingji 陈明计
  199. ;** Created Date  日 期:  2004/03/27 2004年3月27日
  200. ;**-------------------------------------------------------------------------------------------------------
  201. ;** Modified by  修 改: 
  202. ;** Modified date  日 期: 
  203. ;**-------------------------------------------------------------------------------------------------------
  204. ;********************************************************************************************************/
  205.     IF :DEF: EN_CRP
  206.         IF  . >= 0x1fc
  207.         INFO    1,"nThe data at 0x000001fc must be 0x87654321.nPlease delete some source before this line."
  208.         ENDIF
  209. CrpData
  210.     WHILE . < 0x1fc
  211.     NOP
  212.     WEND
  213. CrpData1
  214.     DCD     0x87654321          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */
  215.     ENDIF
  216. ;/* 分配堆栈空间 */
  217.         AREA    MyStacks, DATA, NOINIT, ALIGN=2
  218. IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
  219. FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
  220. AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
  221. UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈
  222.         AREA    Heap, DATA, NOINIT
  223. bottom_of_heap    SPACE   1
  224.         AREA    Stacks, DATA, NOINIT
  225. StackUsr
  226.     END
  227. ;/*********************************************************************************************************
  228. ;**                            End Of File
  229. ;********************************************************************************************************/