新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC2000系列ARM啟動(dòng)代碼(startup部分)

LPC2000系列ARM啟動(dòng)代碼(startup部分)

作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/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. ;引入的外部標(biāo)號(hào)在這聲明
  16. IMPORTFIQ_Exception;Fastinterruptexceptionshandler快速中斷異常處理程序
  17. IMPORT__main;TheentrypointtothemainfunctionC語言主程序入口
  18. IMPORTTargetResetInit;initializethetargetboard目標(biāo)板基本初始化
  19. ;給外部使用的標(biāo)號(hào)在這聲明
  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;//注意,這里應(yīng)該賦值給PC不是ResetAr這個(gè)地址,而是ResetAr這個(gè)地址里的值,是ResetInit
  30. LDRPC,UndefinedAddr;//另外,LDR尋找空間4K,用DCD實(shí)現(xiàn)全范圍尋址
  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. ;//增加開/關(guān)中斷處理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. ;關(guān)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. ;關(guān)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. ;取數(shù)據(jù)中止
  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函數(shù)名稱:InitStack
  98. ;**Descriptions功能描述:Initializethestacks初始化堆棧
  99. ;**inputparameters輸 入:None無
  100. ;**Returnedvalue輸 出:None無
  101. ;******************************************************************************************************/
  102. InitStack
  103. MOVR0,LR
  104. ;BuildtheSVCstack
  105. ;設(shè)置管理模式堆棧
  106. MSRCPSR_c,#0xd3
  107. LDRSP,StackSvc
  108. ;BuildtheIRQstack
  109. ;設(shè)置中斷模式堆棧
  110. MSRCPSR_c,#0xd2
  111. LDRSP,StackIrq
  112. ;BuildtheFIQstack
  113. ;設(shè)置快速中斷模式堆棧
  114. MSRCPSR_c,#0xd1
  115. LDRSP,StackFiq
  116. ;BuildtheDATAABORTstack
  117. ;設(shè)置中止模式堆棧
  118. MSRCPSR_c,#0xd7
  119. LDRSP,StackAbt
  120. ;BuildtheUDFstack
  121. ;設(shè)置未定義模式堆棧
  122. MSRCPSR_c,#0xdb
  123. LDRSP,StackUnd
  124. ;BuildtheSYSstack
  125. ;設(shè)置系統(tǒng)模式堆棧
  126. MSRCPSR_c,#0xdf
  127. LDRSP,=StackUsr
  128. MOVPC,R0
  129. ;/*********************************************************************************************************
  130. ;**unctionname函數(shù)名稱:ResetInit
  131. ;**Descriptions功能描述:RESET復(fù)位入口
  132. ;**inputparameters輸 入:None無
  133. ;**Returnedvalue輸 出:None無
  134. ;********************************************************************************************************/
  135. ResetInit
  136. BLInitStack;初始化堆棧Initializethestack
  137. BLTargetResetInit;目標(biāo)板基本初始化Initializethetargetboard
  138. ;跳轉(zhuǎn)到c語言入口JumptotheentrypointofCprogram
  139. B__main
  140. ;/*****************************************************************************************************************************************************
  141. ;**unctionname函數(shù)名稱:__user_initial_stackheap
  142. ;**Descriptions功能描述:Initialthefunctionlibrarystacksandheaps,cannotdeleted!庫(kù)函數(shù)初始化堆和棧,不能刪除
  143. ;**inputparameters輸 入:referencebyfunctionlibrary參考庫(kù)函數(shù)手冊(cè)
  144. ;**Returnedvalue輸 出:referencebyfunctionlibrary參考庫(kù)函數(shù)手冊(cè)
  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函數(shù)名稱: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.當(dāng)此數(shù)為0x87654321時(shí),用戶程序被保護(hù)*/
  171. ENDIF
  172. ;/*分配堆??臻g*/
  173. AREAMyStacks,DATA,NOINIT,ALIGN=2
  174. SvcStackSpaceSPACESVC_STACK_LEGTH*4;StackspacesforAdministrationMode管理模式堆??臻g
  175. IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;StackspacesforInterruptReQuestMode中斷模式堆??臻g
  176. FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;StackspacesforFastInterruptreQuestMode快速中斷模式堆棧空間
  177. AbtStackSpaceSPACEABT_STACK_LEGTH*4;StackspacesforSuspendMode中止義模式堆??臻g
  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. ;********************************************************************************************************/



評(píng)論


技術(shù)專區(qū)

關(guān)閉