/*
* CK803S 启动代码
* 平头哥CK803S芯片启动汇编代码
*/
.syntax unified
.cpu ck803s
.arch ck803s
.section .vectors, "a", %progbits
.type g_vectors, %object
.size g_vectors, .-g_vectors
g_vectors:
.long __stack /* 0: 栈顶指针 */
.long Reset_Handler /* 1: 复位处理函数 */
.long Default_Handler /* 2: NMI处理函数 */
.long Default_Handler /* 3: 硬错误处理函数 */
.long Default_Handler /* 4: 保留 */
.long Default_Handler /* 5: 保留 */
.long Default_Handler /* 6: 保留 */
.long Default_Handler /* 7: 保留 */
.long Default_Handler /* 8: 保留 */
.long Default_Handler /* 9: 保留 */
.long Default_Handler /* 10: 保留 */
.long Default_Handler /* 11: SVC处理函数 */
.long Default_Handler /* 12: 保留 */
.long Default_Handler /* 13: 保留 */
.long xPortPendSVHandler /* 14: PendSV处理函数 (FreeRTOS) */
.long xPortSysTickHandler /* 15: SysTick处理函数 (FreeRTOS) */
/* 外部中断向量 */
.long Default_Handler /* 16: 外部中断0 */
.long Default_Handler /* 17: 外部中断1 */
.long Default_Handler /* 18: 外部中断2 */
.long Default_Handler /* 19: 外部中断3 */
.long Default_Handler /* 20: 外部中断4 */
.long Default_Handler /* 21: 外部中断5 */
.long Default_Handler /* 22: 外部中断6 */
.long Default_Handler /* 23: 外部中断7 */
.long Default_Handler /* 24: 外部中断8 */
.long Default_Handler /* 25: 外部中断9 */
.long Default_Handler /* 26: 外部中断10 */
.long Default_Handler /* 27: 外部中断11 */
.long Default_Handler /* 28: 外部中断12 */
.long Default_Handler /* 29: 外部中断13 */
.long Default_Handler /* 30: 外部中断14 */
.long Default_Handler /* 31: 外部中断15 */
.text
.thumb
/* 复位处理函数 */
.type Reset_Handler, %function
.global Reset_Handler
Reset_Handler:
/* 设置栈指针 */
lrw r0, __stack
mov sp, r0
/* 禁用中断 */
psrclr ie
/* 初始化系统 */
bl SystemInit
/* 复制数据段到RAM */
lrw r0, _data_load_start /* 源地址 */
lrw r1, _data_start /* 目标地址 */
lrw r2, _data_end /* 结束地址 */
cmphs r1, r2
bt 2f
1: ldw r3, (r0)
stw r3, (r1)
addi r0, 4
addi r1, 4
cmphs r1, r2
bf 1b
2: /* 清零BSS段 */
lrw r0, _bss_start
lrw r1, _bss_end
movi r2, 0
cmphs r0, r1
bt 4f
3: stw r2, (r0)
addi r0, 4
cmphs r0, r1
bf 3b
4: /* 调用C构造函数 */
bl __libc_init_array
/* 跳转到main函数 */
bl main
/* 如果main返回,进入死循环 */
5: br 5b
.size Reset_Handler, . - Reset_Handler
/* 默认中断处理函数 */
.type Default_Handler, %function
.weak Default_Handler
Default_Handler:
br Default_Handler
.size Default_Handler, . - Default_Handler
/* 系统初始化函数 */
.type SystemInit, %function
.weak SystemInit
SystemInit:
/* 在这里添加芯片特定的初始化代码 */
/* 例如:时钟配置、PLL设置等 */
rts
.size SystemInit, . - SystemInit
/* C库初始化函数 */
.type __libc_init_array, %function
.weak __libc_init_array
__libc_init_array:
/* 调用全局构造函数 */
lrw r0, __ctors_start__
lrw r1, __ctors_end__
cmphs r0, r1
bt 2f
1: ldw r2, (r0)
jsr r2
addi r0, 4
cmphs r0, r1
bf 1b
2: rts
.size __libc_init_array, . - __libc_init_array
/* 弱符号别名 */
.weak NMI_Handler
.thumb_set NMI_Handler, Default_Handler
.weak HardFault_Handler
.thumb_set HardFault_Handler, Default_Handler
.weak SVC_Handler
.thumb_set SVC_Handler, Default_Handler
.weak PendSV_Handler
.thumb_set PendSV_Handler, xPortPendSVHandler
.weak SysTick_Handler
.thumb_set SysTick_Handler, xPortSysTickHandler
/* 外部中断弱符号别名 */
.weak IRQ0_Handler
.thumb_set IRQ0_Handler, Default_Handler
.weak IRQ1_Handler
.thumb_set IRQ1_Handler, Default_Handler
.weak IRQ2_Handler
.thumb_set IRQ2_Handler, Default_Handler
.weak IRQ3_Handler
.thumb_set IRQ3_Handler, Default_Handler
.weak IRQ4_Handler
.thumb_set IRQ4_Handler, Default_Handler
.weak IRQ5_Handler
.thumb_set IRQ5_Handler, Default_Handler
.weak IRQ6_Handler
.thumb_set IRQ6_Handler, Default_Handler
.weak IRQ7_Handler
.thumb_set IRQ7_Handler, Default_Handler
.weak IRQ8_Handler
.thumb_set IRQ8_Handler, Default_Handler
.weak IRQ9_Handler
.thumb_set IRQ9_Handler, Default_Handler
.weak IRQ10_Handler
.thumb_set IRQ10_Handler, Default_Handler
.weak IRQ11_Handler
.thumb_set IRQ11_Handler, Default_Handler
.weak IRQ12_Handler
.thumb_set IRQ12_Handler, Default_Handler
.weak IRQ13_Handler
.thumb_set IRQ13_Handler, Default_Handler
.weak IRQ14_Handler
.thumb_set IRQ14_Handler, Default_Handler
.weak IRQ15_Handler
.thumb_set IRQ15_Handler, Default_Handler
.end
最新发布