Startup.s
上传用户:sdaoma
上传日期:2013-08-07
资源大小:3838k
文件大小:11k
源码类别:

GPS编程

开发平台:

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 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.         
  179. ; 定义总线速度控制字
  180. BCFG_DEF EQU 0x10000400
  181. IDCY EQU (0x00<<0)
  182. WST1 EQU (0x01<<5)
  183. WST2 EQU (0x01<<11)
  184. BCFG3_SET EQU (BCFG_DEF | IDCY | WST1 | WST2)
  185. IDCYF EQU (0x01<<0)
  186. WST1F EQU (0x03<<5)
  187. WST2F EQU (0x03<<11)
  188. BCFG_PSRAM  EQU (BCFG_DEF | IDCYF | WST1F | WST2F)         
  189.         LDR     R0, =BCFG0
  190.         LDR     R1, =0x1000ffef
  191.         STR     R1, [R0]
  192.         LDR     R0, =BCFG1
  193.         LDR     R1, =BCFG_PSRAM
  194.         STR     R1, [R0]
  195.         LDR     R0, =BCFG2
  196.         LDR     R1, =0x1000ffef
  197.         STR     R1, [R0]
  198.         LDR     R0, =BCFG3
  199.         LDR     R1, =BCFG3_SET
  200.         STR     R1, [R0]
  201.         
  202.         BL      InitStack               ; Initialize the stack 初始化堆栈
  203.         BL      TargetResetInit         ; Initialize the target board 目标板基本初始化
  204.                                         ; Jump to the entry point of C program 跳转到c语言入口
  205.         B       __main
  206. ;/*********************************************************************************************************
  207. ;** unction name  函数名称:  __user_initial_stackheap
  208. ;** Descriptions  功能描述:  Initial the function library stacks and heaps, can not deleted!   库函数初始化堆和栈,不能删除
  209. ;** input parameters  输 入:    reference by function library 参考库函数手册
  210. ;** Returned value    输 出 :   reference by function library 参考库函数手册
  211. ;** Used global variables 全局变量:  None 无
  212. ;** Calling modules  调用模块:  None 无
  213. ;** 
  214. ;** Created by  作 者:  Chenmingji 陈明计
  215. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  216. ;**-------------------------------------------------------------------------------------------------------
  217. ;** Modified by 
  218. ;** Modified date 
  219. ;**-------------------------------------------------------------------------------------------------------
  220. ;********************************************************************************************************/
  221. __user_initial_stackheap    
  222.     LDR   r0,=bottom_of_heap
  223. ;    LDR   r1,=StackUsr
  224.     LDR   r2,=top_of_heap
  225.     LDR   r3,=bottom_of_Stacks
  226.     MOV   pc,lr
  227.         
  228. StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
  229. StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
  230. StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
  231. StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
  232. ;/*********************************************************************************************************
  233. ;** unction name  函数名称:  CrpData
  234. ;** Descriptions  功能描述:  encrypt the chip
  235. ;** input parameters  输 入:    None 无
  236. ;** Returned value    输 出 :   None 无
  237. ;** Used global variables 全局变量:  None 无
  238. ;** Calling modules  调用模块:  None 无
  239. ;** 
  240. ;** Created by  作 者:  Chenmingji 陈明计
  241. ;** Created Date  日 期:  2004/03/27 2004年3月27日
  242. ;**-------------------------------------------------------------------------------------------------------
  243. ;** Modified by  修 改: 
  244. ;** Modified date  日 期: 
  245. ;**-------------------------------------------------------------------------------------------------------
  246. ;********************************************************************************************************/
  247.     IF :DEF: EN_CRP
  248.         IF  . >= 0x1fc
  249.         INFO    1,"nThe data at 0x000001fc must be 0x87654321.nPlease delete some source before this line."
  250.         ENDIF
  251. CrpData
  252.     WHILE . < 0x1fc
  253.     NOP
  254.     WEND
  255. CrpData1
  256.     DCD     0x87654321          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */
  257.     ENDIF
  258. ;/* 分配堆栈空间 */
  259.         AREA    MyStacks, DATA, NOINIT, ALIGN=2
  260. IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
  261. FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
  262. AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
  263. UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈
  264.         AREA    Heap, DATA, NOINIT
  265. bottom_of_heap    SPACE   1
  266.         AREA    StackBottom, DATA, NOINIT
  267. bottom_of_Stacks    SPACE   1
  268.         AREA    HeapTop, DATA, NOINIT
  269. top_of_heap
  270.         AREA    Stacks, DATA, NOINIT
  271. StackUsr
  272.     END
  273. ;/*********************************************************************************************************
  274. ;**                            End Of File
  275. ;********************************************************************************************************/