新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LPC2000系列ARM啟動代碼(startup部分)

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

        作者: 時間:2016-11-20 來源:網絡 收藏

        本文引用地址:http://www.104case.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. ;********************************************************************************************************/



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 离岛区| 海阳市| 昌宁县| 花莲县| 万山特区| 胶州市| 疏勒县| 虹口区| 巫溪县| 彝良县| 灵丘县| 石首市| 长顺县| 云安县| 县级市| 南部县| 信宜市| 绥宁县| 铜陵市| 泰来县| 崇礼县| 积石山| 子洲县| 田东县| 新乡市| 孝义市| 黔江区| 望都县| 巴南区| 井冈山市| 甘孜| 邵东县| 台南县| 兰西县| 荔浦县| 得荣县| 芒康县| 本溪| 山东| 岳普湖县| 友谊县|