Startup.s
上传用户:zddz2006
上传日期:2020-12-03
资源大小:261k
文件大小:11k
源码类别:

中间件编程

开发平台:

Visual 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 LPC2200, 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. PINSEL2     EQU 0xE002C014
  56. BCFG0       EQU 0xFFE00000
  57. BCFG1       EQU 0xFFE00004
  58. BCFG2       EQU 0xFFE00008
  59. BCFG3       EQU 0xFFE0000C
  60.     IMPORT __use_no_semihosting_swi
  61.     IMPORT __use_two_region_memory
  62. ;The imported labels        
  63. ;引入的外部标号在这声明
  64.     IMPORT  FIQ_Exception                   ;Fast interrupt exceptions handler 快速中断异常处理程序
  65.     IMPORT  __main                          ;The entry point to the main function C语言主程序入口 
  66.     IMPORT  TargetResetInit                 ;initialize the target board 目标板基本初始化
  67.     IMPORT  SoftwareInterrupt
  68. ;The emported labels        
  69. ;给外部使用的标号在这声明
  70. EXPORT  bottom_of_heap
  71.     EXPORT  bottom_of_Stacks
  72.     EXPORT  top_of_heap
  73.     EXPORT  StackUsr
  74.     
  75.     EXPORT  Reset
  76.     EXPORT  __user_initial_stackheap
  77.     CODE32
  78.     AREA    vectors,CODE,READONLY
  79.         ENTRY
  80. ;interrupt vectors
  81. ;中断向量表
  82. Reset
  83.         LDR     PC, ResetAddr
  84.         LDR     PC, UndefinedAddr
  85.         LDR     PC, SWI_Addr
  86.         LDR     PC, PrefetchAddr
  87.         LDR     PC, DataAbortAddr
  88.         DCD     0xb9205f80
  89.         LDR     PC, [PC, #-0xff0]
  90.         LDR     PC, FIQ_Addr
  91. ResetAddr           DCD     ResetInit
  92. UndefinedAddr       DCD     Undefined
  93. SWI_Addr            DCD     SoftwareInterrupt
  94. PrefetchAddr        DCD     PrefetchAbort
  95. DataAbortAddr       DCD     DataAbort
  96. Nouse               DCD     0
  97. IRQ_Addr            DCD     0
  98. FIQ_Addr            DCD     FIQ_Handler
  99. ;未定义指令
  100. Undefined
  101.         B       Undefined
  102.         
  103. ;取指令中止
  104. PrefetchAbort
  105.         B       PrefetchAbort
  106. ;取数据中止
  107. DataAbort
  108.         B       DataAbort
  109. ;快速中断
  110. FIQ_Handler
  111.         STMFD   SP!, {R0-R3, LR}
  112.         BL      FIQ_Exception
  113.         LDMFD   SP!, {R0-R3, LR}
  114.         SUBS    PC,  LR,  #4
  115. ;/*********************************************************************************************************
  116. ;** unction name  函数名称:  InitStack
  117. ;** Descriptions  功能描述:  Initialize the stacks  初始化堆栈
  118. ;** input parameters  输 入:    None 无
  119. ;** Returned value    输 出 :   None 无
  120. ;** Used global variables 全局变量:  None 无
  121. ;** Calling modules  调用模块:  None 无
  122. ;** 
  123. ;** Created by  作 者:  Chenmingji 陈明计
  124. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  125. ;**-------------------------------------------------------------------------------------------------------
  126. ;** Modified by  修 改: 
  127. ;** Modified date  日 期: 
  128. ;**-------------------------------------------------------------------------------------------------------
  129. ;********************************************************************************************************/
  130. InitStack    
  131.         MOV     R0, LR
  132. ;Build the SVC stack
  133. ;设置中断模式堆栈
  134.         MSR     CPSR_c, #0xd2
  135.         LDR     SP, StackIrq
  136. ;Build the FIQ stack
  137. ;设置快速中断模式堆栈
  138.         MSR     CPSR_c, #0xd1
  139.         LDR     SP, StackFiq
  140. ;Build the DATAABORT stack
  141. ;设置中止模式堆栈
  142.         MSR     CPSR_c, #0xd7
  143.         LDR     SP, StackAbt
  144. ;Build the UDF stack
  145. ;设置未定义模式堆栈
  146.         MSR     CPSR_c, #0xdb
  147.         LDR     SP, StackUnd
  148. ;Build the SYS stack
  149. ;设置系统模式堆栈
  150.         MSR     CPSR_c, #0xdf
  151.         LDR     SP, =StackUsr
  152.         MOV     PC, R0
  153. ;/*********************************************************************************************************
  154. ;** unction name  函数名称:  ResetInit
  155. ;** Descriptions  功能描述:  RESET  复位入口
  156. ;** input parameters  输 入:    None 无
  157. ;** Returned value    输 出 :   None 无
  158. ;** Used global variables 全局变量:  None 无
  159. ;** Calling modules  调用模块:  None 无
  160. ;** 
  161. ;** Created by  作 者:  Chenmingji 陈明计
  162. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  163. ;**-------------------------------------------------------------------------------------------------------
  164. ;** Modified by  修 改: Chenmingji 陈明计
  165. ;** Modified date  日 期: 2004/02/02 2004年3月3日
  166. ;**-------------------------------------------------------------------------------------------------------
  167. ;********************************************************************************************************/
  168. ResetInit
  169. ;Initial the extenal bus controller
  170. ;初始化外部总线控制器,根据目标板决定配置
  171.         LDR     R0, =PINSEL2
  172.     IF :DEF: EN_CRP
  173.         LDR     R1, =0x0f814910
  174.     ELSE
  175.         LDR     R1, =0x0f814914
  176.     ENDIF
  177.         STR     R1, [R0]
  178.         LDR     R0, =BCFG0
  179.         LDR     R1, =0x1000ffef
  180.         STR     R1, [R0]
  181.         LDR     R0, =BCFG1
  182.         LDR     R1, =0x1000ffef
  183.         STR     R1, [R0]
  184. ;        LDR     R0, =BCFG2
  185. ;        LDR     R1, =0x2000ffef
  186. ;        STR     R1, [R0]
  187. ;        LDR     R0, =BCFG3
  188. ;        LDR     R1, =0x2000ffef
  189. ;        STR     R1, [R0]
  190.         
  191.         BL      InitStack               ; Initialize the stack 初始化堆栈
  192.         BL      TargetResetInit         ; Initialize the target board 目标板基本初始化
  193.                                         ; Jump to the entry point of C program 跳转到c语言入口
  194.         B       __main
  195. ;/*********************************************************************************************************
  196. ;** unction name  函数名称:  __user_initial_stackheap
  197. ;** Descriptions  功能描述:  Initial the function library stacks and heaps, can not deleted!   库函数初始化堆和栈,不能删除
  198. ;** input parameters  输 入:    reference by function library 参考库函数手册
  199. ;** Returned value    输 出 :   reference by function library 参考库函数手册
  200. ;** Used global variables 全局变量:  None 无
  201. ;** Calling modules  调用模块:  None 无
  202. ;** 
  203. ;** Created by  作 者:  Chenmingji 陈明计
  204. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  205. ;**-------------------------------------------------------------------------------------------------------
  206. ;** Modified by 
  207. ;** Modified date 
  208. ;**-------------------------------------------------------------------------------------------------------
  209. ;********************************************************************************************************/
  210. __user_initial_stackheap    
  211.     LDR   r0,=bottom_of_heap
  212. ;    LDR   r1,=StackUsr
  213.     LDR   r2,=top_of_heap
  214.     LDR   r3,=bottom_of_Stacks
  215.     MOV   pc,lr
  216.         
  217. StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
  218. StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
  219. StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
  220. StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
  221. ;/*********************************************************************************************************
  222. ;** unction name  函数名称:  CrpData
  223. ;** Descriptions  功能描述:  encrypt the chip
  224. ;** input parameters  输 入:    None 无
  225. ;** Returned value    输 出 :   None 无
  226. ;** Used global variables 全局变量:  None 无
  227. ;** Calling modules  调用模块:  None 无
  228. ;** 
  229. ;** Created by  作 者:  Chenmingji 陈明计
  230. ;** Created Date  日 期:  2004/03/27 2004年3月27日
  231. ;**-------------------------------------------------------------------------------------------------------
  232. ;** Modified by  修 改: 
  233. ;** Modified date  日 期: 
  234. ;**-------------------------------------------------------------------------------------------------------
  235. ;********************************************************************************************************/
  236.     IF :DEF: EN_CRP
  237.         IF  . >= 0x1fc
  238.         INFO    1,"nThe data at 0x000001fc must be 0x87654321.nPlease delete some source before this line."
  239.         ENDIF
  240. CrpData
  241.     WHILE . < 0x1fc
  242.     NOP
  243.     WEND
  244. CrpData1
  245.     DCD     0x87654321          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */
  246.     ENDIF
  247. ;/* 分配堆栈空间 */
  248.         AREA    MyStacks, DATA, NOINIT, ALIGN=2
  249. IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
  250. FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
  251. AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
  252. UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈
  253.         AREA    Heap, DATA, NOINIT
  254. bottom_of_heap    SPACE   1
  255.         AREA    StackBottom, DATA, NOINIT
  256. bottom_of_Stacks    SPACE   1
  257.         AREA    HeapTop, DATA, NOINIT
  258. top_of_heap
  259.         AREA    Stacks, DATA, NOINIT
  260. StackUsr
  261.     END
  262. ;/*********************************************************************************************************
  263. ;**                            End Of File
  264. ;********************************************************************************************************/