Guest User

Untitled

a guest
Mar 23rd, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1. /******************************************************************************
  2. * author: Freddie Chopin, http://www.freddiechopin.info/
  3. * file: startup.S
  4. * last change: 2012-01-07
  5. *
  6. * chip: ARMv7-M (Cortex-M3)
  7. * compiler: arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1
  8. *
  9. * description:
  10. * ARMv7-M (Cortex-M3) assembly startup code
  11. ******************************************************************************/
  12.  
  13. /*
  14. +=============================================================================+
  15. | includes
  16. +=============================================================================+
  17. */
  18.  
  19. #include "hdr_special_registers.h"
  20.  
  21. /*
  22. +=============================================================================+
  23. | ARMv7-M (Cortex-M3) startup code
  24. +=============================================================================+
  25. */
  26.  
  27. .text
  28. .balign 2
  29. .syntax unified
  30. .thumb
  31. .thumb_func
  32. .global Reset_Handler
  33.  
  34. Reset_Handler:
  35.  
  36. /*
  37. +-----------------------------------------------------------------------------+
  38. | Initialize the process stack pointer
  39. +-----------------------------------------------------------------------------+
  40. */
  41.  
  42. ldr r0, =__process_stack_end
  43. msr PSP, r0
  44.  
  45. /*
  46. +-----------------------------------------------------------------------------+
  47. | Thread mode uses process stack (PSP) and is privileged
  48. +-----------------------------------------------------------------------------+
  49. */
  50.  
  51. movs r0, #CONTROL_ALTERNATE_STACK
  52. msr CONTROL, r0
  53. isb
  54.  
  55. /*
  56. +-----------------------------------------------------------------------------+
  57. | Branch to low_level_init_0() function (.data and .bss are not initialized!)
  58. +-----------------------------------------------------------------------------+
  59. */
  60.  
  61. ldr r0, =low_level_init_0
  62. blx r0
  63.  
  64. /*
  65. +-----------------------------------------------------------------------------+
  66. | Initialize .data section
  67. +-----------------------------------------------------------------------------+
  68. */
  69.  
  70. ldr r1, =__data_init_start
  71. ldr r2, =__data_start
  72. ldr r3, =__data_end
  73.  
  74. 1: cmp r2, r3
  75. ittt lo
  76. ldrlo r0, [r1], #4
  77. strlo r0, [r2], #4
  78. blo 1b
  79.  
  80. /*
  81. +-----------------------------------------------------------------------------+
  82. | Zero-init .bss section
  83. +-----------------------------------------------------------------------------+
  84. */
  85.  
  86. movs r0, #0
  87. ldr r1, =__bss_start
  88. ldr r2, =__bss_end
  89.  
  90. 1: cmp r1, r2
  91. itt lo
  92. strlo r0, [r1], #4
  93. blo 1b
  94.  
  95. /*
  96. +-----------------------------------------------------------------------------+
  97. | Call C++ constructors for global and static objects
  98. +-----------------------------------------------------------------------------+
  99. */
  100. #ifdef __USES_CXX
  101. ldr r0, =__libc_init_array
  102. blx r0
  103. #endif
  104.  
  105. /*
  106. +-----------------------------------------------------------------------------+
  107. | Branch to low_level_init_1() function
  108. +-----------------------------------------------------------------------------+
  109. */
  110.  
  111. ldr r0, =low_level_init_1
  112. blx r0
  113.  
  114. /*
  115. +-----------------------------------------------------------------------------+
  116. | Branch to main() with link
  117. +-----------------------------------------------------------------------------+
  118. */
  119.  
  120. ldr r0, =main
  121. blx r0
  122.  
  123. /*
  124. +-----------------------------------------------------------------------------+
  125. | Call C++ destructors for global and static objects
  126. +-----------------------------------------------------------------------------+
  127. */
  128. #ifdef __USES_CXX
  129. ldr r0, =__libc_fini_array
  130. blx r0
  131. #endif
  132.  
  133. /*
  134. +-----------------------------------------------------------------------------+
  135. | On return - loop till the end of the world
  136. +-----------------------------------------------------------------------------+
  137. */
  138.  
  139. b .
  140.  
  141. /*
  142. +=============================================================================+
  143. | __default_low_level_init() - replacement for undefined low_level_init_0()
  144. | and/or low_level_init_1(). This function just returns.
  145. +=============================================================================+
  146. */
  147.  
  148. .text
  149. .balign 2
  150. .syntax unified
  151. .thumb
  152. .thumb_func
  153. .global __default_low_level_init
  154.  
  155. __default_low_level_init:
  156. bx lr
  157.  
  158. /*
  159. +=============================================================================+
  160. | assign undefined low_level_init_0() and/or low_level_init_1() to
  161. | __default_low_level_init()
  162. +=============================================================================+
  163. */
  164.  
  165. .weak low_level_init_0
  166. .global low_level_init_0
  167. .set low_level_init_0, __default_low_level_init
  168.  
  169. .weak low_level_init_1
  170. .global low_level_init_1
  171. .set low_level_init_1, __default_low_level_init
  172.  
  173. /******************************************************************************
  174. * END OF FILE
  175. ******************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment