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

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