Startup.s
上传用户:pudewen666
上传日期:2007-06-08
资源大小:75k
文件大小:11k
源码类别:

微处理器开发

开发平台:

Windows_Unix

  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:  Chenxibing
  38. ;** Modified date: 2004-12-09
  39. ;** Version: 1.05
  40. ;** Descriptions: 
  41. ;**
  42. ;********************************************************************************************************/
  43. ;define the stack size
  44. ;定义堆栈的大小
  45. SVC_STACK_LEGTH         EQU         0
  46. FIQ_STACK_LEGTH         EQU         0
  47. IRQ_STACK_LEGTH         EQU         256
  48. ABT_STACK_LEGTH         EQU         0
  49. UND_STACK_LEGTH         EQU         0
  50. NoInt       EQU 0x80
  51. NoFIQ EQU 0x40
  52. USR32Mode   EQU 0x10
  53. SVC32Mode   EQU 0x13
  54. SYS32Mode   EQU 0x1f
  55. IRQ32Mode   EQU 0x12
  56. FIQ32Mode   EQU 0x11
  57.     IMPORT __use_no_semihosting_swi
  58. ;The imported labels
  59. ;引入的外部标号在这声明
  60.     IMPORT  FIQ_Exception                   ;Fast interrupt exceptions handler 快速中断异常处理程序
  61.     IMPORT  __main                          ;The entry point to the main function C语言主程序入口 
  62.     IMPORT  TargetResetInit                 ;initialize the target board 目标板基本初始化
  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. SoftwareInterrupt
  97. ;        B       SoftwareInterrupt
  98. ;//增加开/关中断处理 Chenxibing-2004-02-09                                 
  99.         CMP     R0, #4
  100.         LDRLO   PC, [PC, R0, LSL #2]
  101.         MOVS    PC, LR
  102. SwiFunction
  103.         DCD     IRQDisable       ;0
  104.         DCD     IRQEnable        ;1
  105.         DCD FIQDisable  ;2
  106.         DCD FIQEnable  ;3
  107. IRQDisable
  108.         ;关IRQ中断
  109.         MRS     R0, SPSR
  110.         ORR     R0, R0, #NoInt
  111.         MSR     SPSR_c, R0
  112.         MOVS    PC, LR
  113. IRQEnable
  114.         ;开IRQ中断
  115.         MRS   R0, SPSR
  116.         BIC   R0, R0, #NoInt
  117.         MSR   SPSR_c, R0
  118.         MOVS    PC, LR
  119.         
  120. FIQDisable
  121.         ;关FIQ中断
  122.         MRS     R0, SPSR
  123.         ORR     R0, R0, #NoFIQ
  124.         MSR     SPSR_c, R0
  125.         MOVS    PC, LR
  126. FIQEnable
  127.         ;开FIQ中断
  128.         MRS   R0, SPSR
  129.         BIC   R0, R0, #NoFIQ
  130.         MSR   SPSR_c, R0
  131.         MOVS    PC, LR
  132. ;// Changed 2004-12-09
  133.       
  134. ;取指令中止
  135. PrefetchAbort
  136.         B       PrefetchAbort
  137. ;取数据中止
  138. DataAbort
  139.         B       DataAbort
  140. ;快速中断
  141. FIQ_Handler
  142.         STMFD   SP!, {R0-R3, LR}
  143.         BL      FIQ_Exception
  144.         LDMFD   SP!, {R0-R3, LR}
  145.         SUBS    PC,  LR,  #4
  146.             
  147. ;/*********************************************************************************************************
  148. ;** unction name  函数名称:  InitStack
  149. ;** Descriptions  功能描述:  Initialize the stacks  初始化堆栈
  150. ;** input parameters  输 入:    None 无
  151. ;** Returned value    输 出 :   None 无
  152. ;** Used global variables 全局变量:  None 无
  153. ;** Calling modules  调用模块:  None 无
  154. ;** 
  155. ;** Created by  作 者:  Chenmingji 陈明计
  156. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  157. ;**-------------------------------------------------------------------------------------------------------
  158. ;** Modified by  修 改: 
  159. ;** Modified date  日 期: 
  160. ;**-------------------------------------------------------------------------------------------------------
  161. ;********************************************************************************************************/
  162. InitStack    
  163.         MOV     R0, LR
  164. ;Build the SVC stack
  165. ;设置管理模式堆栈
  166.         MSR     CPSR_c, #0xd3
  167.         LDR     SP, StackSvc
  168. ;Build the IRQ stack
  169. ;设置中断模式堆栈
  170.         MSR     CPSR_c, #0xd2
  171.         LDR     SP, StackIrq
  172. ;Build the FIQ stack
  173. ;设置快速中断模式堆栈
  174.         MSR     CPSR_c, #0xd1
  175.         LDR     SP, StackFiq
  176. ;Build the DATAABORT stack
  177. ;设置中止模式堆栈
  178.         MSR     CPSR_c, #0xd7
  179.         LDR     SP, StackAbt
  180. ;Build the UDF stack
  181. ;设置未定义模式堆栈
  182.         MSR     CPSR_c, #0xdb
  183.         LDR     SP, StackUnd
  184. ;Build the SYS stack
  185. ;设置系统模式堆栈
  186.         MSR     CPSR_c, #0xdf
  187.         LDR     SP, =StackUsr
  188.         MOV     PC, R0
  189. ;/*********************************************************************************************************
  190. ;** unction name  函数名称:  ResetInit
  191. ;** Descriptions  功能描述:  RESET  复位入口
  192. ;** input parameters  输 入:    None 无
  193. ;** Returned value    输 出 :   None 无
  194. ;** Used global variables 全局变量:  None 无
  195. ;** Calling modules  调用模块:  None 无
  196. ;** 
  197. ;** Created by  作 者:  Chenmingji 陈明计
  198. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  199. ;**-------------------------------------------------------------------------------------------------------
  200. ;** Modified by  修 改: Chenmingji 陈明计
  201. ;** Modified date  日 期: 2004/02/02 2004年3月3日
  202. ;**-------------------------------------------------------------------------------------------------------
  203. ;********************************************************************************************************/
  204. ResetInit
  205.         
  206.         BL      InitStack               ;初始化堆栈 Initialize the stack
  207.         BL      TargetResetInit         ;目标板基本初始化 Initialize the target board
  208.                                         ;跳转到c语言入口 Jump to the entry point of C program
  209.         B       __main
  210. ;/*********************************************************************************************************
  211. ;** unction name  函数名称:  __user_initial_stackheap
  212. ;** Descriptions  功能描述:  Initial the function library stacks and heaps, can not deleted!   库函数初始化堆和栈,不能删除
  213. ;** input parameters  输 入:    reference by function library 参考库函数手册
  214. ;** Returned value    输 出 :   reference by function library 参考库函数手册
  215. ;** Used global variables 全局变量:  None 无
  216. ;** Calling modules  调用模块:  None 无
  217. ;** 
  218. ;** Created by  作 者:  Chenmingji 陈明计
  219. ;** Created Date  日 期:  2004/02/02 2004年2月2日
  220. ;**-------------------------------------------------------------------------------------------------------
  221. ;** Modified by 
  222. ;** Modified date 
  223. ;**-------------------------------------------------------------------------------------------------------
  224. ;********************************************************************************************************/
  225. __user_initial_stackheap    
  226.     LDR   r0,=bottom_of_heap
  227. ;    LDR   r1,=StackUsr
  228.     MOV   pc,lr
  229. StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
  230. StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
  231. StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
  232. StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
  233. StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
  234. ;/*********************************************************************************************************
  235. ;** unction name  函数名称:  CrpData
  236. ;** Descriptions  功能描述:  encrypt the chip
  237. ;** input parameters  输 入:    None 无
  238. ;** Returned value    输 出 :   None 无
  239. ;** Used global variables 全局变量:  None 无
  240. ;** Calling modules  调用模块:  None 无
  241. ;** 
  242. ;** Created by  作 者:  Chenmingji 陈明计
  243. ;** Created Date  日 期:  2004/03/27 2004年3月27日
  244. ;**-------------------------------------------------------------------------------------------------------
  245. ;** Modified by  修 改: 
  246. ;** Modified date  日 期: 
  247. ;**-------------------------------------------------------------------------------------------------------
  248. ;********************************************************************************************************/
  249.     IF :DEF: EN_CRP
  250.         IF  . >= 0x1fc
  251.         INFO    1,"nThe data at 0x000001fc must be 0x87654321.nPlease delete some source before this line."
  252.         ENDIF
  253. CrpData
  254.     WHILE . < 0x1fc
  255.     NOP
  256.     WEND
  257. CrpData1
  258.     DCD     0x87654321          ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */
  259.     ENDIF
  260.     
  261. ;/* 分配堆栈空间 */
  262.         AREA    MyStacks, DATA, NOINIT, ALIGN=2
  263. SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  ;Stack spaces for Administration Mode 管理模式堆栈空间
  264. IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
  265. FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
  266. AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
  267. UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈
  268.         AREA    Heap, DATA, NOINIT
  269. bottom_of_heap    SPACE   1
  270.         AREA    Stacks, DATA, NOINIT
  271. StackUsr
  272.     END
  273. ;/*********************************************************************************************************
  274. ;**                            End Of File
  275. ;********************************************************************************************************/