diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-20 10:19:28 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-20 13:08:36 +0200 |
commit | fbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc (patch) | |
tree | a17e285cf22cd49cd42e8b3ad562febc3987d566 /bsps/lm32 | |
parent | bsps: Move console drivers to bsps (diff) | |
download | rtems-fbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc.tar.bz2 |
bsps: Move start files to bsps
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'bsps/lm32')
-rw-r--r-- | bsps/lm32/shared/start/start.S | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/bsps/lm32/shared/start/start.S b/bsps/lm32/shared/start/start.S new file mode 100644 index 0000000000..71cbb54119 --- /dev/null +++ b/bsps/lm32/shared/start/start.S @@ -0,0 +1,160 @@ +/* LM32 startup code + * + * This is the entry point on reset and when loading the + * executive from a bootloader. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + * + * Jukka Pietarinen <jukka.pietarinen@mrf.fi>, 2008, + * Micro-Research Finland Oy + */ + +#include "bspopts.h" + + .section .boot,"a",@progbits + .align 4 + + .globl start + .type start,@function + .globl _start + .type _start,@function + .globl __start + .type __start,@function + .globl LatticeDDInit + .type LatticeDDInit,@function + .globl crt0 + .type crt0,@function + +LatticeDDInit: +__start: +_start: +start: + /* Clear r0 */ + xor r0,r0,r0 + /* Disable interrupts */ + wcsr IE, r0 + /* Mask all interrupts */ + wcsr IM,r0 + /* Set exception base address */ + mvhi r1, hi(start) + ori r1, r1, lo(start) + wcsr EBA, r1 + bi crt0 + nop +/* + * Unused handlers call debug handlers + */ +breakpoint_handler: + rcsr r7, DEBA + addi r7, r7, 32 + b r7 + nop + nop + nop + nop + nop +instruction_bus_error_handler: + rcsr r7, DEBA + addi r7, r7, 64 + b r7 + nop + nop + nop + nop + nop +watchpoint_handler: + rcsr r7, DEBA + addi r7, r7, 96 + b r7 + nop + nop + nop + nop + nop +data_bus_error_handler: + rcsr r7, DEBA + addi r7, r7, 128 + b r7 + nop + nop + nop + nop + nop +divide_by_zero_handler: + rcsr r7, DEBA + addi r7, r7, 160 + b r7 + nop + nop + nop + nop + nop +interrupt_handler: + .extern _ISR_Handler + mvhi r0, hi(_ISR_Handler) + ori r0, r0, lo(_ISR_Handler) + b r0 + nop + nop + nop + nop + nop +system_call_handler: + rcsr r7, DEBA + addi r7, r7, 224 + b r7 + nop + nop + nop + nop + nop + +crt0: + /* Flush data cache */ + addi r1, r0, 1 + wcsr DCC, r1 + nop + nop + nop + nop + /* Flush Instruction Cache */ + wcsr ICC, r1 + nop + nop + nop + nop + /* Initialize stack pointer */ + mvhi sp, hi(_fstack-4) + ori sp, sp, lo(_fstack-4) + /* Initialize global pointer */ + mvhi gp, hi(_edata) + ori gp, gp, lo(_edata) + /* Clear bss */ + mvhi r1, hi(_clear_start) + ori r1, r1, lo(_clear_start) + mvhi r3, hi(_clear_end) + ori r3, r3, lo(_clear_end) +.clear_bss: + be r1, r3, .end_clear_bss + sw (r1+0), r0 + addi r1, r1, 4 + bi .clear_bss +.end_clear_bss: + mvi r1, 0 + be r4, r0, .no_rescue + mvhi r1, hi(.rescue_str) + ori r1, r1, lo(.rescue_str) +.no_rescue: + mvhi r7, hi(boot_card) + ori r7, r7, lo(boot_card) + call r7 + # boot_card returns when RTEMS is shutdown +.dead_end: + bi .dead_end + +.section .rodata +.rescue_str: + .ascii "rescue" + |