arm_startup_nrf51.s 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. ;/* Copyright (c) 2012 ARM LIMITED
  2. ;
  3. ; All rights reserved.
  4. ; Redistribution and use in source and binary forms, with or without
  5. ; modification, are permitted provided that the following conditions are met:
  6. ; - Redistributions of source code must retain the above copyright
  7. ; notice, this list of conditions and the following disclaimer.
  8. ; - Redistributions in binary form must reproduce the above copyright
  9. ; notice, this list of conditions and the following disclaimer in the
  10. ; documentation and/or other materials provided with the distribution.
  11. ; - Neither the name of ARM nor the names of its contributors may be used
  12. ; to endorse or promote products derived from this software without
  13. ; specific prior written permission.
  14. ; *
  15. ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  16. ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. ; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
  19. ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  20. ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  21. ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  22. ; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  23. ; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  24. ; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  25. ; POSSIBILITY OF SUCH DAMAGE.
  26. ; ---------------------------------------------------------------------------*/
  27. IF :DEF: __STACK_SIZE
  28. Stack_Size EQU __STACK_SIZE
  29. ELSE
  30. Stack_Size EQU 2048
  31. ENDIF
  32. AREA STACK, NOINIT, READWRITE, ALIGN=3
  33. Stack_Mem SPACE Stack_Size
  34. __initial_sp
  35. IF :DEF: __HEAP_SIZE
  36. Heap_Size EQU __HEAP_SIZE
  37. ELSE
  38. Heap_Size EQU 2048
  39. ENDIF
  40. AREA HEAP, NOINIT, READWRITE, ALIGN=3
  41. __heap_base
  42. Heap_Mem SPACE Heap_Size
  43. __heap_limit
  44. PRESERVE8
  45. THUMB
  46. ; Vector Table Mapped to Address 0 at Reset
  47. AREA RESET, DATA, READONLY
  48. EXPORT __Vectors
  49. EXPORT __Vectors_End
  50. EXPORT __Vectors_Size
  51. __Vectors DCD __initial_sp ; Top of Stack
  52. DCD Reset_Handler
  53. DCD NMI_Handler
  54. DCD HardFault_Handler
  55. DCD 0 ; Reserved
  56. DCD 0 ; Reserved
  57. DCD 0 ; Reserved
  58. DCD 0 ; Reserved
  59. DCD 0 ; Reserved
  60. DCD 0 ; Reserved
  61. DCD 0 ; Reserved
  62. DCD SVC_Handler
  63. DCD 0 ; Reserved
  64. DCD 0 ; Reserved
  65. DCD PendSV_Handler
  66. DCD SysTick_Handler
  67. ; External Interrupts
  68. DCD POWER_CLOCK_IRQHandler
  69. DCD RADIO_IRQHandler
  70. DCD UART0_IRQHandler
  71. DCD SPI0_TWI0_IRQHandler
  72. DCD SPI1_TWI1_IRQHandler
  73. DCD 0 ; Reserved
  74. DCD GPIOTE_IRQHandler
  75. DCD ADC_IRQHandler
  76. DCD TIMER0_IRQHandler
  77. DCD TIMER1_IRQHandler
  78. DCD TIMER2_IRQHandler
  79. DCD RTC0_IRQHandler
  80. DCD TEMP_IRQHandler
  81. DCD RNG_IRQHandler
  82. DCD ECB_IRQHandler
  83. DCD CCM_AAR_IRQHandler
  84. DCD WDT_IRQHandler
  85. DCD RTC1_IRQHandler
  86. DCD QDEC_IRQHandler
  87. DCD LPCOMP_IRQHandler
  88. DCD SWI0_IRQHandler
  89. DCD SWI1_IRQHandler
  90. DCD SWI2_IRQHandler
  91. DCD SWI3_IRQHandler
  92. DCD SWI4_IRQHandler
  93. DCD SWI5_IRQHandler
  94. DCD 0 ; Reserved
  95. DCD 0 ; Reserved
  96. DCD 0 ; Reserved
  97. DCD 0 ; Reserved
  98. DCD 0 ; Reserved
  99. DCD 0 ; Reserved
  100. __Vectors_End
  101. __Vectors_Size EQU __Vectors_End - __Vectors
  102. AREA |.text|, CODE, READONLY
  103. ; Reset Handler
  104. NRF_POWER_RAMON_ADDRESS EQU 0x40000524 ; NRF_POWER->RAMON address
  105. NRF_POWER_RAMONB_ADDRESS EQU 0x40000554 ; NRF_POWER->RAMONB address
  106. NRF_POWER_RAMONx_RAMxON_ONMODE_Msk EQU 0x3 ; All RAM blocks on in onmode bit mask
  107. Reset_Handler PROC
  108. EXPORT Reset_Handler [WEAK]
  109. IMPORT SystemInit
  110. IMPORT __main
  111. MOVS R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk
  112. LDR R0, =NRF_POWER_RAMON_ADDRESS
  113. LDR R2, [R0]
  114. ORRS R2, R2, R1
  115. STR R2, [R0]
  116. LDR R0, =NRF_POWER_RAMONB_ADDRESS
  117. LDR R2, [R0]
  118. ORRS R2, R2, R1
  119. STR R2, [R0]
  120. LDR R0, =SystemInit
  121. BLX R0
  122. LDR R0, =__main
  123. BX R0
  124. ENDP
  125. ; Dummy Exception Handlers (infinite loops which can be modified)
  126. NMI_Handler PROC
  127. EXPORT NMI_Handler [WEAK]
  128. B .
  129. ENDP
  130. HardFault_Handler\
  131. PROC
  132. EXPORT HardFault_Handler [WEAK]
  133. B .
  134. ENDP
  135. SVC_Handler PROC
  136. EXPORT SVC_Handler [WEAK]
  137. B .
  138. ENDP
  139. PendSV_Handler PROC
  140. EXPORT PendSV_Handler [WEAK]
  141. B .
  142. ENDP
  143. SysTick_Handler PROC
  144. EXPORT SysTick_Handler [WEAK]
  145. B .
  146. ENDP
  147. Default_Handler PROC
  148. EXPORT POWER_CLOCK_IRQHandler [WEAK]
  149. EXPORT RADIO_IRQHandler [WEAK]
  150. EXPORT UART0_IRQHandler [WEAK]
  151. EXPORT SPI0_TWI0_IRQHandler [WEAK]
  152. EXPORT SPI1_TWI1_IRQHandler [WEAK]
  153. EXPORT GPIOTE_IRQHandler [WEAK]
  154. EXPORT ADC_IRQHandler [WEAK]
  155. EXPORT TIMER0_IRQHandler [WEAK]
  156. EXPORT TIMER1_IRQHandler [WEAK]
  157. EXPORT TIMER2_IRQHandler [WEAK]
  158. EXPORT RTC0_IRQHandler [WEAK]
  159. EXPORT TEMP_IRQHandler [WEAK]
  160. EXPORT RNG_IRQHandler [WEAK]
  161. EXPORT ECB_IRQHandler [WEAK]
  162. EXPORT CCM_AAR_IRQHandler [WEAK]
  163. EXPORT WDT_IRQHandler [WEAK]
  164. EXPORT RTC1_IRQHandler [WEAK]
  165. EXPORT QDEC_IRQHandler [WEAK]
  166. EXPORT LPCOMP_IRQHandler [WEAK]
  167. EXPORT SWI0_IRQHandler [WEAK]
  168. EXPORT SWI1_IRQHandler [WEAK]
  169. EXPORT SWI2_IRQHandler [WEAK]
  170. EXPORT SWI3_IRQHandler [WEAK]
  171. EXPORT SWI4_IRQHandler [WEAK]
  172. EXPORT SWI5_IRQHandler [WEAK]
  173. POWER_CLOCK_IRQHandler
  174. RADIO_IRQHandler
  175. UART0_IRQHandler
  176. SPI0_TWI0_IRQHandler
  177. SPI1_TWI1_IRQHandler
  178. GPIOTE_IRQHandler
  179. ADC_IRQHandler
  180. TIMER0_IRQHandler
  181. TIMER1_IRQHandler
  182. TIMER2_IRQHandler
  183. RTC0_IRQHandler
  184. TEMP_IRQHandler
  185. RNG_IRQHandler
  186. ECB_IRQHandler
  187. CCM_AAR_IRQHandler
  188. WDT_IRQHandler
  189. RTC1_IRQHandler
  190. QDEC_IRQHandler
  191. LPCOMP_IRQHandler
  192. SWI0_IRQHandler
  193. SWI1_IRQHandler
  194. SWI2_IRQHandler
  195. SWI3_IRQHandler
  196. SWI4_IRQHandler
  197. SWI5_IRQHandler
  198. B .
  199. ENDP
  200. ALIGN
  201. ; User Initial Stack & Heap
  202. IF :DEF:__MICROLIB
  203. EXPORT __initial_sp
  204. EXPORT __heap_base
  205. EXPORT __heap_limit
  206. ELSE
  207. IMPORT __use_two_region_memory
  208. EXPORT __user_initial_stackheap
  209. __user_initial_stackheap PROC
  210. LDR R0, = Heap_Mem
  211. LDR R1, = (Stack_Mem + Stack_Size)
  212. LDR R2, = (Heap_Mem + Heap_Size)
  213. LDR R3, = Stack_Mem
  214. BX LR
  215. ENDP
  216. ALIGN
  217. ENDIF
  218. END