summaryrefslogtreecommitdiff
path: root/bsp/yichip/yc3121-pos/libraries/startup/flash_start_gcc.s
blob: 02302d303fed3c75b1036f21424c90d8a539a79a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
		.org 0x200
		.global Reset_Handler,hard_fault_handler,svc_handler,pendsv_handler,systick,irq0,irq1,irq2,irq3,irq4,irq5,irq6,irq7,irq8,irq9,irq10,irq11,irq12,irq13,irq14,irq15,irq16,irq17,irq18,irq19,irq20,irq21,irq22,irq23,irq24,irq25,irq26,irq27,irq28,irq29,irq30,irq31
		
		.long


Reset_Handler:
		ldr r0,=hardware_init
		bx r0	
		.thumb_func
		
hard_fault_handler:
		ldr r0,=HARD_FAULT_IRQHandler       
		bx r0
		nop
		.thumb_func
		
svc_handler:
		ldr r0,=SVC_IRQHandler
		bx r0
		nop
		.thumb_func

pendsv_handler:
		ldr r0,=PENDSV_IRQHandler
		bx r0
		nop
		.thumb_func
systick:
		ldr r0,=SYSTICK_IRQHandler
		bx r0
		nop
		.thumb_func
irq0: 		
		mov r0,#4*0
		b isr
		.thumb_func
irq1: 		
		mov r0,#4*1
		b isr
		.thumb_func
irq2: 		
		mov r0,#4*2
		b isr
		.thumb_func
irq3: 		
		mov r0,#4*3
		b isr
		.thumb_func
irq4: 		
		mov r0,#4*4
		b isr
		.thumb_func
irq5: 		
		mov r0,#4*5
		b isr
		.thumb_func
irq6: 		
		mov r0,#4*6
		b isr
		.thumb_func
irq7: 		
		mov r0,#4*7
		b isr
		.thumb_func
irq8: 		
		mov r0,#4*8
		b isr
		.thumb_func
irq9: 		
		mov r0,#4*9
		b isr
		.thumb_func
irq10:	
		mov r0,#4*10
		b isr
		.thumb_func
irq11:	
		mov r0,#4*11
		b isr
		.thumb_func
irq12:	
		mov r0,#4*12
		b isr
		.thumb_func
irq13:	
		mov r0,#4*13
		b isr
		.thumb_func
irq14:	
		mov r0,#4*14
		b isr
		.thumb_func
irq15:	
		mov r0,#4*15
		b isr
		.thumb_func
irq16:	
		mov r0,#4*16
		b isr
		.thumb_func
irq17:	
		mov r0,#4*17
		b isr
		.thumb_func
irq18:	
		mov r0,#4*18
		b isr
		.thumb_func
irq19:	
		mov r0,#4*19
		b isr
		.thumb_func
irq20:	
		mov r0,#4*20
		b isr
		.thumb_func
irq21:	
		mov r0,#4*21
		b isr
		.thumb_func
irq22:	mov r0,#4*22
		b isr
		.thumb_func
irq23:	
		mov r0,#4*23
		b isr
		.thumb_func
irq24:	
		mov r0,#4*24
		b isr
		.thumb_func
irq25:	mov r0,#4*25
		b isr
		.thumb_func
irq26:	
		mov r0,#4*26
		b isr
		.thumb_func
irq27:	
		mov r0,#4*27
		b isr
		.thumb_func
irq28:	
		mov r0,#4*28
		b isr
		.thumb_func
irq29:	
		mov r0,#4*29
		b isr
		.thumb_func
irq30:	
		mov r0,#4*30
		b isr
		.thumb_func
irq31:	
		mov r0,#4*31
		b isr
		.thumb_func

		

isr:
		ldr r1,=isr_table
		ldr r0,[r0, r1]
		bx r0




	.align 4
isr_table:
		.long USB_IRQHandler
		.long IIC_IRQHandler
		.long QSPI_IRQHandler
		.long SPI0_IRQHandler
		.long SPI1_IRQHandler
		.long UART0_IRQHandler
		.long UART1_IRQHandler
		.long MEMCP_IRQHandler
		.long RSA_IRQHandler
		.long SCI0_IRQHandler
		.long SCI1_IRQHandler
		.long BT_IRQHandler
		.long GPIO_IRQHandler
		.long TIMER0_IRQHandler
		.long TIMER1_IRQHandler
		.long TIMER2_IRQHandler
		.long TIMER3_IRQHandler
		.long TIMER4_IRQHandler
		.long TIMER5_IRQHandler
		.long TIMER6_IRQHandler
		.long TIMER7_IRQHandler
		.long TIMER8_IRQHandler
		.long SM4_IRQHandler
		.long SEC_IRQHandler
		.long MSR_IRQHandler
		.long TRNG_IRQHandler
		.long WDT_IRQHandler
	
		.thumb
		.thumb_func
hardware_init:
		ldr	r1, =__exidx_start
		ldr	r2, =__data_start__
		ldr	r3, =__data_end__

		sub	r3, r2
		ble	.L_loop1_done

	.L_loop1:
		sub	r3, #4
		ldr	r0, [r1,r3]
		str	r0, [r2,r3]
		bgt	.L_loop1

	.L_loop1_done:



	/*  Single BSS section scheme.
	 *
	 *  The BSS section is specified by following symbols
	 *    _sbss: start of the BSS section.
	 *    _ebss: end of the BSS section.
	 *
	 *  Both addresses must be aligned to 4 bytes boundary.
	 */
		ldr	r1, =__bss_start__
		ldr	r2, =__bss_end__

		mov	r0, #0

		sub	r2, r1
		ble	.L_loop3_done

	.L_loop3:
		sub	r2, #4
		str	r0, [r1, r2]
		bgt	.L_loop3
	.L_loop3_done:
		ldr	r0,=0x12345
		ldr	r3,=0x1111
		bl	main
		
		
		.globl delay
		.syntax unified
delay:
		subs r0,#1
		bne delay
		nop
		bx lr


		




.align	1
.thumb_func
.weak	Default_Handler
.type	Default_Handler, %function

Default_Handler:
	b	.
	.size	Default_Handler, . - Default_Handler

/*    Macro to define default handlers. Default handler
 *    will be weak symbol and just dead loops. They can be
 *    overwritten by other handlers */
 
	.macro	def_irq_handler	handler_name
	.weak	\handler_name
	.set	\handler_name, Default_Handler
	.endm
	
	def_irq_handler HARD_FAULT_IRQHandler
	def_irq_handler SVC_IRQHandler
	def_irq_handler PENDSV_IRQHandler
	def_irq_handler SYSTICK_IRQHandler
	def_irq_handler	USB_IRQHandler
	def_irq_handler	IIC_IRQHandler
	def_irq_handler	QSPI_IRQHandler
	def_irq_handler	SPI0_IRQHandler
	def_irq_handler	SPI1_IRQHandler
	def_irq_handler	UART0_IRQHandler
	def_irq_handler	UART1_IRQHandler
	def_irq_handler MEMCP_IRQHandler
	def_irq_handler RSA_IRQHandler
	def_irq_handler SCI0_IRQHandler
	def_irq_handler SCI1_IRQHandler
	def_irq_handler BT_IRQHandler
	def_irq_handler GPIO_IRQHandler
	def_irq_handler EXTI0_IRQHandler
	def_irq_handler EXTI1_IRQHandler
	def_irq_handler EXTI2_IRQHandler
	def_irq_handler TIMER0_IRQHandler
	def_irq_handler TIMER1_IRQHandler
	def_irq_handler TIMER2_IRQHandler
	def_irq_handler TIMER3_IRQHandler
  def_irq_handler TIMER4_IRQHandler
  def_irq_handler TIMER5_IRQHandler
  def_irq_handler TIMER6_IRQHandler
  def_irq_handler TIMER7_IRQHandler
  def_irq_handler TIMER8_IRQHandler
  def_irq_handler SM4_IRQHandler
  def_irq_handler SEC_IRQHandler
  def_irq_handler MSR_IRQHandler
  def_irq_handler TRNG_IRQHandler
  def_irq_handler WDT_IRQHandler