新闻中心

EEPW首页>嵌入式系统>设计应用> LPC2000系列ARM启动代码(startup部分)

LPC2000系列ARM启动代码(startup部分)

作者: 时间:2016-11-20 来源:网络 收藏

本文引用地址: //m.amcfsurvey.com/article/201611/318926.htm
  1. ;定义堆栈的大小
  2. SVC_STACK_LEGTHEQU0
  3. FIQ_STACK_LEGTHEQU0
  4. IRQ_STACK_LEGTHEQU256
  5. ABT_STACK_LEGTHEQU0
  6. UND_STACK_LEGTHEQU0
  7. NoIntEQU0x80;禁止IRQ中断
  8. NoFIQEQU0x40;禁止FIQ中断
  9. USR32ModeEQU0x10;ARM的各种工作模式
  10. SVC32ModeEQU0x13
  11. SYS32ModeEQU0x1f
  12. IRQ32ModeEQU0x12
  13. FIQ32ModeEQU0x11
  14. IMPORT__use_no_semihosting_swi
  15. ;引入的外部标号在这声明
  16. IMPORTFIQ_Exception;Fastinterruptexceptionshandler快速中断异常处理程序
  17. IMPORT__main;TheentrypointtothemainfunctionC语言主程序入口
  18. IMPORTTargetResetInit;initializethetargetboard目标板基本初始化
  19. ;给外部使用的标号在这声明
  20. EXPORTbottom_of_heap
  21. EXPORTStackUsr
  22. EXPORTReset
  23. EXPORT__user_initial_stackheap
  24. CODE32
  25. AREAvectors,CODE,READONLY
  26. ENTRY
  27. ;中断向量表
  28. Reset
  29. LDRPC,ResetAddr;//注意,这里应该赋值给PC不是ResetAr这个地址,而是ResetAr这个地址里的值,是ResetInit
  30. LDRPC,UndefinedAddr;//另外,LDR寻找空间4K,用DCD实现全范围寻址
  31. LDRPC,SWI_Addr
  32. LDRPC,PrefetchAddr
  33. LDRPC,DataAbortAddr
  34. DCD0xb9205f80
  35. LDRPC,[PC,#-0xff0]
  36. LDRPC,FIQ_Addr
  37. ResetAddrDCDResetInit
  38. UndefinedAddrDCDUndefined
  39. SWI_AddrDCDSoftwareInterrupt
  40. PrefetchAddrDCDPrefetchAbort
  41. DataAbortAddrDCDDataAbort
  42. NouseDCD0
  43. IRQ_AddrDCD0
  44. FIQ_AddrDCDFIQ_Handler
  45. Undefined
  46. BUndefined
  47. ;软中断
  48. SoftwareInterrupt
  49. ;BSoftwareInterrupt
  50. ;//增加开/关中断处理Chenxibing-2004-02-09
  51. CMPR0,#4
  52. LDRLOPC,[PC,R0,LSL#2]
  53. MOVSPC,LR
  54. SwiFunction
  55. DCDIRQDisable;0
  56. DCDIRQEnable;1
  57. DCDFIQDisable;2
  58. DCDFIQEnable;3
  59. IRQDisable
  60. ;关IRQ中断
  61. MRSR0,SPSR
  62. ORRR0,R0,#NoInt
  63. MSRSPSR_c,R0
  64. MOVSPC,LR
  65. IRQEnable
  66. ;开IRQ中断
  67. MRSR0,SPSR
  68. BICR0,R0,#NoInt
  69. MSRSPSR_c,R0
  70. MOVSPC,LR
  71. FIQDisable
  72. ;关FIQ中断
  73. MRSR0,SPSR
  74. ORRR0,R0,#NoFIQ
  75. MSRSPSR_c,R0
  76. MOVSPC,LR
  77. FIQEnable
  78. ;开FIQ中断
  79. MRSR0,SPSR
  80. BICR0,R0,#NoFIQ
  81. MSRSPSR_c,R0
  82. MOVSPC,LR
  83. ;//Changed2004-12-09
  84. ;取指令中止
  85. PrefetchAbort
  86. BPrefetchAbort
  87. ;取数据中止
  88. DataAbort
  89. BDataAbort
  90. ;快速中断
  91. FIQ_Handler
  92. STMFDSP!,{R0-R3,LR}
  93. BLFIQ_Exception
  94. LDMFDSP!,{R0-R3,LR}
  95. SUBSPC,LR,#4
  96. ;/*********************************************************************************************************
  97. ;**unctionname函数名称:InitStack
  98. ;**Descriptions功能描述:Initializethestacks初始化堆栈
  99. ;**inputparameters输 入:None无
  100. ;**Returnedvalue输 出:None无
  101. ;******************************************************************************************************/
  102. InitStack
  103. MOVR0,LR
  104. ;BuildtheSVCstack
  105. ;设置管理模式堆栈
  106. MSRCPSR_c,#0xd3
  107. LDRSP,StackSvc
  108. ;BuildtheIRQstack
  109. ;设置中断模式堆栈
  110. MSRCPSR_c,#0xd2
  111. LDRSP,StackIrq
  112. ;BuildtheFIQstack
  113. ;设置快速中断模式堆栈
  114. MSRCPSR_c,#0xd1
  115. LDRSP,StackFiq
  116. ;BuildtheDATAABORTstack
  117. ;设置中止模式堆栈
  118. MSRCPSR_c,#0xd7
  119. LDRSP,StackAbt
  120. ;BuildtheUDFstack
  121. ;设置未定义模式堆栈
  122. MSRCPSR_c,#0xdb
  123. LDRSP,StackUnd
  124. ;BuildtheSYSstack
  125. ;设置系统模式堆栈
  126. MSRCPSR_c,#0xdf
  127. LDRSP,=StackUsr
  128. MOVPC,R0
  129. ;/*********************************************************************************************************
  130. ;**unctionname函数名称:ResetInit
  131. ;**Descriptions功能描述:RESET复位入口
  132. ;**inputparameters输 入:None无
  133. ;**Returnedvalue输 出:None无
  134. ;********************************************************************************************************/
  135. ResetInit
  136. BLInitStack;初始化堆栈Initializethestack
  137. BLTargetResetInit;目标板基本初始化Initializethetargetboard
  138. ;跳转到c语言入口JumptotheentrypointofCprogram
  139. B__main
  140. ;/*****************************************************************************************************************************************************
  141. ;**unctionname函数名称:__user_initial_stackheap
  142. ;**Descriptions功能描述:Initialthefunctionlibrarystacksandheaps,cannotdeleted!库函数初始化堆和栈,不能删除
  143. ;**inputparameters输 入:referencebyfunctionlibrary参考库函数手册
  144. ;**Returnedvalue输 出:referencebyfunctionlibrary参考库函数手册
  145. ;************************************************************************************************************************************************************/
  146. __user_initial_stackheap
  147. LDRr0,=bottom_of_heap
  148. ;LDRr1,=StackUsr
  149. MOVpc,lr
  150. StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
  151. StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
  152. StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
  153. StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
  154. StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4
  155. ;/*********************************************************************************************************
  156. ;**unctionname函数名称:CrpData
  157. ;**Descriptions功能描述:encryptthechip
  158. ;**inputparameters输 入:None无
  159. ;**Returnedvalue输 出:None无
  160. ;********************************************************************************************************/
  161. IF:DEF:EN_CRP
  162. IF.>=0x1fc
  163. INFO1,"/nThedataat0x000001fcmustbe0x87654321./nPleasedeletesomesourcebeforethisline."
  164. ENDIF
  165. CrpData
  166. WHILE.<0x1fc
  167. NOP
  168. WEND
  169. CrpData1
  170. DCD0x87654321;/*WhentheDatais为0x87654321,usercodebeprotected.当此数为0x87654321时,用户程序被保护*/
  171. ENDIF
  172. ;/*分配堆栈空间*/
  173. AREAMyStacks,DATA,NOINIT,ALIGN=2
  174. SvcStackSpaceSPACESVC_STACK_LEGTH*4;StackspacesforAdministrationMode管理模式堆栈空间
  175. IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;StackspacesforInterruptReQuestMode中断模式堆栈空间
  176. FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;StackspacesforFastInterruptreQuestMode快速中断模式堆栈空间
  177. AbtStackSpaceSPACEABT_STACK_LEGTH*4;StackspacesforSuspendMode中止义模式堆栈空间
  178. UndtStackSpaceSPACEUND_STACK_LEGTH*4;StackspacesforUndefinedMode未定义模式堆栈
  179. AREAHeap,DATA,NOINIT
  180. bottom_of_heapSPACE1
  181. AREAStacks,DATA,NOINIT
  182. StackUsr
  183. END
  184. ;/*********************************************************************************************************
  185. ;**EndOfFile
  186. ;********************************************************************************************************/



评论


技术专区

关闭