Startup.s
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:8k
开发平台:

C/C++

  1. ;/****************************************Copyright (c)**************************************************
  2. ;**                               广州周立功单片机发展有限公司
  3. ;**                                     研    究    所
  4. ;**                                        产品一部 
  5. ;**
  6. ;**                                 http://www.zlgmcu.com
  7. ;**
  8. ;**--------------文件信息--------------------------------------------------------------------------------
  9. ;**文   件   名: Startup.s
  10. ;**创   建   人: 陈明计
  11. ;**最后修改日期: 2004年3月3日
  12. ;**描        述: lpc21xx的启动代码,包含异常向量入口、初始化堆栈的代码等
  13. ;**              每个工程应当有独立的这个文件的拷贝,并进行相应的修改   
  14. ;**--------------历史版本信息----------------------------------------------------------------------------
  15. ;** 创建人: 陈明计
  16. ;** 版  本: v1.0
  17. ;** 日 期: 2004年2月2日
  18. ;** 描 述: 原始版本
  19. ;**
  20. ;**------------------------------------------------------------------------------------------------------
  21. ;** 修改人: 
  22. ;** 版  本: 
  23. ;** 日 期: 
  24. ;** 描 述: 
  25. ;**
  26. ;**--------------当前版本修订------------------------------------------------------------------------------
  27. ;** 修改人: 
  28. ;** 日 期:
  29. ;** 描 述:
  30. ;**
  31. ;**------------------------------------------------------------------------------------------------------
  32. ;********************************************************************************************************/
  33. ;定义堆栈的大小
  34. ;//new added by skier
  35. ;//USR_STACK_LEGTH     EQU         64
  36. ;//end
  37. SVC_STACK_LEGTH         EQU         0
  38. FIQ_STACK_LEGTH         EQU         16
  39. IRQ_STACK_LEGTH         EQU         256
  40. ABT_STACK_LEGTH         EQU         0
  41. UND_STACK_LEGTH         EQU         0
  42. NoInt       EQU 0x80
  43. USR32Mode   EQU 0x10
  44. SVC32Mode   EQU 0x13
  45. SYS32Mode   EQU 0x1f
  46. IRQ32Mode   EQU 0x12
  47. FIQ32Mode   EQU 0x11
  48. PINSEL2     EQU 0xE002C014
  49. ;引入的外部标号在这声明
  50.     IMPORT  FIQ_Exception                   ;快速中断异常处理程序
  51.     IMPORT  __main                          ;C语言主程序入口 
  52.     IMPORT  TargetResetInit                 ;目标板基本初始化
  53.     IMPORT  StackUsr
  54.     IMPORT  bottom_of_heap
  55. ;给外部使用的标号在这声明
  56.     EXPORT  Reset
  57.     EXPORT __rt_div0
  58.     EXPORT __user_initial_stackheap
  59.     CODE32
  60.     AREA    vectors,CODE,READONLY
  61.         ENTRY
  62. ;中断向量表
  63. Reset
  64.         LDR     PC, ResetAddr
  65.         LDR     PC, UndefinedAddr
  66.         LDR     PC, SWI_Addr
  67.         LDR     PC, PrefetchAddr
  68.         LDR     PC, DataAbortAddr
  69.         DCD     0xb9205f80
  70.         LDR     PC, [PC, #-0xff0]
  71.         LDR     PC, FIQ_Addr
  72. ResetAddr           DCD     ResetInit
  73. UndefinedAddr       DCD     Undefined
  74. SWI_Addr            DCD     SoftwareInterrupt
  75. PrefetchAddr        DCD     PrefetchAbort
  76. DataAbortAddr       DCD     DataAbort
  77. Nouse               DCD     0
  78. IRQ_Addr            DCD     0
  79. FIQ_Addr            DCD     FIQ_Handler
  80. ;未定义指令
  81. Undefined
  82.         B       Undefined
  83. ;软中断
  84. SoftwareInterrupt
  85.         B       SoftwareInterrupt
  86. ;取指令中止
  87. PrefetchAbort
  88.         B       PrefetchAbort
  89. ;取数据中止
  90. DataAbort
  91.         B       DataAbort
  92. ;快速中断
  93. FIQ_Handler
  94.         STMFD   SP!, {R0-R3, LR}
  95.         BL      FIQ_Exception
  96.         LDMFD   SP!, {R0-R3, LR}
  97.         SUBS    PC,  LR,  #4
  98. ;/*********************************************************************************************************
  99. ;** 函数名称: InitStack
  100. ;** 功能描述: 初始化堆栈
  101. ;** 输 入:   无
  102. ;** 输 出 :  无
  103. ;** 全局变量: 无
  104. ;** 调用模块: 无
  105. ;** 
  106. ;** 作 者: 陈明计
  107. ;** 日 期: 2004年2月2日
  108. ;**-------------------------------------------------------------------------------------------------------
  109. ;** 修 改: 
  110. ;** 日 期: 
  111. ;**-------------------------------------------------------------------------------------------------------
  112. ;********************************************************************************************************/
  113. InitStack    
  114.         MOV     R0, LR
  115. ;设置管理模式堆栈
  116.         MSR     CPSR_c, #0xd3
  117.         LDR     SP, StackSvc
  118. ;设置中断模式堆栈
  119.         MSR     CPSR_c, #0xd2
  120.         LDR     SP, StackIrq
  121. ;设置快速中断模式堆栈
  122.         MSR     CPSR_c, #0xd1
  123.         LDR     SP, StackFiq
  124. ;设置中止模式堆栈
  125.         MSR     CPSR_c, #0xd7
  126.         LDR     SP, StackAbt
  127. ;设置未定义模式堆栈
  128.         MSR     CPSR_c, #0xdb
  129.         LDR     SP, StackUnd
  130. ;设置系统模式堆栈,0xdf
  131.         MSR     CPSR_c, #0x5f
  132.         LDR     SP, =StackUsr
  133.         MOV     PC, R0
  134. ;/*********************************************************************************************************
  135. ;** 函数名称: ResetInit
  136. ;** 功能描述: 复位入口
  137. ;** 
  138. ;** 输 入: 无
  139. ;**
  140. ;** 输 出: 无
  141. ;**         
  142. ;** 全局变量: 无
  143. ;** 调用模块: 无
  144. ;**
  145. ;** 作 者: 陈明计
  146. ;** 日 期: 2004年2月2日
  147. ;**-------------------------------------------------------------------------------------------------------
  148. ;** 修改人: 陈明计
  149. ;** 日 期: 2004年3月3日
  150. ;**------------------------------------------------------------------------------------------------------
  151. ;********************************************************************************************************/
  152. ResetInit     
  153.         BL      InitStack               ;初始化堆栈
  154.         BL      TargetResetInit         ;目标板基本初始化
  155.                                         
  156.         B       __main ;跳转到c语言入口
  157. ;/*********************************************************************************************************
  158. ;** 函数名称: __user_initial_stackheap 
  159. ;** 功能描述: 库函数初始化堆和栈,不能删除
  160. ;** 
  161. ;** 输 入: 参考库函数手册
  162. ;**
  163. ;** 输 出: 参考库函数手册
  164. ;**         
  165. ;** 全局变量: 无
  166. ;** 调用模块: 无
  167. ;**
  168. ;** 作 者: 陈明计
  169. ;** 日 期: 2004年2月2日
  170. ;**-------------------------------------------------------------------------------------------------------
  171. ;** 修改人:
  172. ;** 日 期:
  173. ;**------------------------------------------------------------------------------------------------------
  174. ;********************************************************************************************************/
  175. __user_initial_stackheap    
  176.     LDR   r0,=bottom_of_heap
  177.     MOV   pc,lr
  178. ;/*********************************************************************************************************
  179. ;** 函数名称: __rt_div0
  180. ;** 功能描述: 整数除法除数为0错误处理函数,替代原始的__rt_div0减少目标代码大小
  181. ;** 
  182. ;** 输 入: 参考库函数手册
  183. ;**
  184. ;** 输 出: 无
  185. ;**         
  186. ;** 全局变量: 无
  187. ;** 调用模块: 无
  188. ;**
  189. ;** 作 者: 陈明计
  190. ;** 日 期: 2004年2月2日
  191. ;**-------------------------------------------------------------------------------------------------------
  192. ;** 修改人:
  193. ;** 日 期:
  194. ;**------------------------------------------------------------------------------------------------------
  195. ;********************************************************************************************************/
  196. __rt_div0
  197.         B       __rt_div0
  198. StackSvc           DCD     SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4
  199. StackIrq           DCD     IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4
  200. StackFiq           DCD     FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4
  201. StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4
  202. StackUnd           DCD     UndtStackSpace + (UND_STACK_LEGTH - 1)* 4
  203. ;//StackUsr           DCD     UsrStackSpace + (USR_STACK_LEGTH - 1) * 4
  204. ;//new added by skier
  205. ;/* 分配堆栈空间 */
  206.         AREA    MyStacks, DATA, NOINIT, ALIGN=2
  207. SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  ;管理模式堆栈空间
  208. IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;中断模式堆栈空间
  209. FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;快速中断模式堆栈空间
  210. AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;中止义模式堆栈空间
  211. UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;未定义模式堆栈
  212. ;//new added by skier
  213. ;//UsrStackSpace      SPACE   USR_STACK_LEGTH * 4  ;用户(系统)模式堆栈空间
  214.     END
  215. ;/*********************************************************************************************************
  216. ;**                            End Of File
  217. ;********************************************************************************************************/