mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-06 07:33:17 +00:00
Rename * _Configuration_Interrupt_stack_area_begin in _ISR_Stack_area_begin, * _Configuration_Interrupt_stack_area_end in _ISR_Stack_area_end, and * _Configuration_Interrupt_stack_size in _ISR_Stack_size. Move definitions to <rtems/score/isr.h>. The new names are considerable shorter and in the right namespace. Update #3459.
161 lines
2.4 KiB
ArmAsm
161 lines
2.4 KiB
ArmAsm
/* 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(_ISR_Stack_area_end-4)
|
|
ori sp, sp, lo(_ISR_Stack_area_end-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"
|
|
|