mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-05 13:53:50 -04:00
Introduce a port for T-HEAD CK802. A simple demo for T-HEAD CB2201 is also included.
This commit is contained in:
parent
d2914041f8
commit
0d95aca202
125 changed files with 23809 additions and 0 deletions
195
FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S
Normal file
195
FreeRTOS/Demo/T-HEAD_CB2201_CDK/RTOSDemo_CDK/RTOSDemo/crt0.S
Normal file
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
* crt0.S
|
||||
* 1 define and initial the stack pointer
|
||||
* 2 exception handler table
|
||||
* 3 call SystemInit
|
||||
* 4 go to __main in entry.o
|
||||
*
|
||||
* Copyright (C) 2016~2017 Hangzhou C-SKY Microsystems Co., Ltd
|
||||
* Modify by Jiang Long on 2016-09-14
|
||||
*/
|
||||
// <<< Use Configuration Wizard in Context Menu >>>
|
||||
|
||||
/*
|
||||
* For importing variable or functions from other c or assemble files.
|
||||
*/
|
||||
.import main
|
||||
|
||||
/*
|
||||
* default service routine
|
||||
*/
|
||||
.global Reset_Handler
|
||||
.global Misaligned_Access_Handler
|
||||
.global Access_Error_Handler
|
||||
.global Divided_By_Zero_Handler
|
||||
.global Illegal_Handler
|
||||
.global Privlege_Violation_Handler
|
||||
.global Trace_Exection_Handler
|
||||
.global Breakpoint_Exception_Handler
|
||||
.global Unrecoverable_Error_Handler
|
||||
.global Idly4_Error_Handler
|
||||
.global Auto_INT_Handler
|
||||
.global Auto_FINT_Handler
|
||||
.global Reserved_HAI_Handler
|
||||
.global Reserved_FP_Handler
|
||||
.global TLB_Ins_Empty_Handler
|
||||
.global TLB_Data_Empty_Handler
|
||||
.global Default_handler
|
||||
|
||||
.weak Reset_Handler
|
||||
.weak Misaligned_Access_Handler
|
||||
.weak Access_Error_Handler
|
||||
.weak Divided_By_Zero_Handler
|
||||
.weak Illegal_Handler
|
||||
.weak Privlege_Violation_Handler
|
||||
.weak Trace_Exection_Handler
|
||||
.weak Breakpoint_Exception_Handler
|
||||
.weak Unrecoverable_Error_Handler
|
||||
.weak Idly4_Error_Handler
|
||||
.weak Auto_INT_Handler
|
||||
.weak Auto_FINT_Handler
|
||||
.weak Reserved_HAI_Handler
|
||||
.weak Reserved_FP_Handler
|
||||
.weak TLB_Ins_Empty_Handler
|
||||
.weak TLB_Data_Empty_Handler
|
||||
.weak Default_handler
|
||||
|
||||
|
||||
.export ckcpu_vsr_table /* Vector table base address. */
|
||||
.section .exp_table,"ax",@progbits
|
||||
/* Vector table space. */
|
||||
$d:
|
||||
.align 10
|
||||
ckcpu_vsr_table:
|
||||
.long Reset_Handler
|
||||
.long Misaligned_Access_Handler
|
||||
.long Access_Error_Handler
|
||||
.long Divided_By_Zero_Handler
|
||||
.long Illegal_Handler
|
||||
.long Privlege_Violation_Handler
|
||||
.long Trace_Exection_Handler
|
||||
.long Breakpoint_Exception_Handler
|
||||
.long Unrecoverable_Error_Handler
|
||||
.long Idly4_Error_Handler
|
||||
.long Auto_INT_Handler
|
||||
.long Auto_FINT_Handler
|
||||
.long Reserved_HAI_Handler
|
||||
.long Reserved_FP_Handler
|
||||
.long TLB_Ins_Empty_Handler
|
||||
.long TLB_Data_Empty_Handler
|
||||
|
||||
.rept 32
|
||||
.long NOVIC_IRQ_Default_Handler
|
||||
.endr
|
||||
$t:
|
||||
/* The ckcpu startup codes. */
|
||||
.text
|
||||
.align 2
|
||||
/*
|
||||
* This is the codes first entry point. This is where it all begins...
|
||||
*/
|
||||
Reset_Handler:
|
||||
/*
|
||||
* Init psr value, enable exception, disable interrupt and fast interrupt.
|
||||
* psr = 0x80000100
|
||||
*/
|
||||
bgeni r7, 31
|
||||
bseti r7, 30
|
||||
bseti r7, 29
|
||||
bseti r7, 8
|
||||
mtcr r7, psr
|
||||
|
||||
/*
|
||||
* Setup initial vector base table for interrupts and exceptions
|
||||
*/
|
||||
lrw a3, ckcpu_vsr_table
|
||||
mtcr a3, vbr
|
||||
|
||||
/* Initialize the normal stack pointer from the linker definition. */
|
||||
lrw r0, g_top_irqstack
|
||||
mov sp, r0
|
||||
|
||||
/*
|
||||
* The ranges of copy from/to are specified by following symbols
|
||||
* __etext: LMA of start of the section to copy from. Usually end of text
|
||||
* __data_start__: VMA of start of the section to copy to
|
||||
* __data_end__: VMA of end of the section to copy to
|
||||
*
|
||||
* All addresses must be aligned to 4 bytes boundary.
|
||||
*/
|
||||
lrw r1, __erodata
|
||||
lrw r2, __data_start__
|
||||
lrw r3, __data_end__
|
||||
|
||||
subu r3, r2
|
||||
cmpnei r3, 0
|
||||
bf .L_loop0_done
|
||||
|
||||
.L_loop0:
|
||||
ldw r0, (r1, 0)
|
||||
stw r0, (r2, 0)
|
||||
addi r1, 4
|
||||
addi r2, 4
|
||||
subi r3, 4
|
||||
cmpnei r3, 0
|
||||
bt .L_loop0
|
||||
|
||||
.L_loop0_done:
|
||||
|
||||
/*
|
||||
* The BSS section is specified by following symbols
|
||||
* __bss_start__: start of the BSS section.
|
||||
* __bss_end__: end of the BSS section.
|
||||
*
|
||||
* Both addresses must be aligned to 4 bytes boundary.
|
||||
*/
|
||||
lrw r1, __bss_start__
|
||||
lrw r2, __bss_end__
|
||||
|
||||
movi r0, 0
|
||||
|
||||
subu r2, r1
|
||||
cmpnei r2, 0
|
||||
bf .L_loop1_done
|
||||
|
||||
.L_loop1:
|
||||
stw r0, (r1, 0)
|
||||
addi r1, 4
|
||||
subi r2, 4
|
||||
cmpnei r2, 0
|
||||
bt .L_loop1
|
||||
.L_loop1_done:
|
||||
|
||||
jbsr main
|
||||
/* Should never get here. */
|
||||
1:
|
||||
br 1b
|
||||
Misaligned_Access_Handler:
|
||||
Access_Error_Handler:
|
||||
Divided_By_Zero_Handler:
|
||||
Illegal_Handler:
|
||||
Privlege_Violation_Handler:
|
||||
Trace_Exection_Handler:
|
||||
Breakpoint_Exception_Handler:
|
||||
Unrecoverable_Error_Handler:
|
||||
Idly4_Error_Handler:
|
||||
Auto_INT_Handler:
|
||||
Auto_FINT_Handler:
|
||||
Reserved_HAI_Handler:
|
||||
Reserved_FP_Handler:
|
||||
TLB_Ins_Empty_Handler:
|
||||
TLB_Data_Empty_Handler:
|
||||
Default_handler:
|
||||
br Default_handler
|
||||
rte
|
||||
|
||||
.section .bss
|
||||
|
||||
.align 2
|
||||
.global g_intstackalloc
|
||||
.global g_intstackbase
|
||||
.global g_top_irqstack
|
||||
g_intstackalloc:
|
||||
g_intstackbase:
|
||||
.space 4096
|
||||
g_top_irqstack:
|
Loading…
Add table
Add a link
Reference in a new issue