/***************************************************************/ | |
/* */ | |
/* PROJECT NAME : RTOSDemo */ | |
/* FILE : reset_program.asm */ | |
/* DESCRIPTION : Reset Program */ | |
/* CPU SERIES : RX100 */ | |
/* CPU TYPE : RX113 */ | |
/* */ | |
/* This file is generated by e2 studio. */ | |
/* */ | |
/***************************************************************/ | |
/************************************************************************/ | |
/* File Version: V1.01 */ | |
/* Date Generated: 04/03/2015 */ | |
/************************************************************************/ | |
/*reset_program.asm*/ | |
.list | |
.section .text | |
.global _PowerON_Reset /*global Start routine */ | |
.extern _HardwareSetup /*external Sub-routine to initialise Hardware*/ | |
.extern _data | |
.extern _mdata | |
.extern _ebss | |
.extern _bss | |
.extern _edata | |
.extern _main | |
.extern _ustack | |
.extern _istack | |
.extern _rvectors | |
.extern _exit | |
_PowerON_Reset : | |
/* initialise user stack pointer */ | |
mvtc #_ustack,USP | |
/* initialise interrupt stack pointer */ | |
mvtc #_istack,ISP | |
#ifdef __RXv2__ | |
/* setup exception vector */ | |
mvtc #_ExceptVectors, extb /* EXCEPTION VECTOR ADDRESS */ | |
#endif | |
/* setup intb */ | |
mvtc #_rvectors_start, intb /* INTERRUPT VECTOR ADDRESS definition */ | |
/* setup FPSW */ | |
mvtc #100h, fpsw | |
/* load data section from ROM to RAM */ | |
mov #_mdata,r2 /* src ROM address of data section in R2 */ | |
mov #_data,r1 /* dest start RAM address of data section in R1 */ | |
mov #_edata,r3 /* end RAM address of data section in R3 */ | |
sub r1,r3 /* size of data section in R3 (R3=R3-R1) */ | |
#ifdef __RX_ALLOW_STRING_INSNS__ | |
smovf /* block copy R3 bytes from R2 to R1 */ | |
#else | |
cmp #0, r3 | |
beq 2f | |
1: mov.b [r2+], r5 | |
mov.b r5, [r1+] | |
sub #1, r3 | |
bne 1b | |
2: | |
#endif | |
/* bss initialisation : zero out bss */ | |
mov #00h,r2 /* load R2 reg with zero */ | |
mov #_ebss, r3 /* store the end address of bss in R3 */ | |
mov #_bss, r1 /* store the start address of bss in R1 */ | |
sub r1,r3 /* size of bss section in R3 (R3=R3-R1) */ | |
sstr.b | |
/* call the hardware initialiser */ | |
mov #_HardwareSetup,r7 | |
jsr r7 | |
nop | |
/* setup PSW */ | |
mvtc #10000h, psw /* Set Ubit & Ibit for PSW */ | |
/* change PSW PM to user-mode */ | |
MVFC PSW,R1 | |
//DO NOT SWITCH TO USER MODE OR #00100000h,R1 | |
PUSH.L R1 | |
MVFC PC,R1 | |
ADD #10,R1 | |
PUSH.L R1 | |
RTE | |
NOP | |
NOP | |
#ifdef CPPAPP | |
mov #__rx_init,r7 | |
jsr r7 | |
#endif | |
/* start user program */ | |
mov #_main,r7 | |
jsr r7 | |
mov #_exit,r7 | |
jsr r7 | |
#ifdef CPPAPP | |
.global _rx_run_preinit_array | |
.type _rx_run_preinit_array,@function | |
_rx_run_preinit_array: | |
mov #__preinit_array_start,r1 | |
mov #__preinit_array_end,r2 | |
mov #_rx_run_inilist,r7 | |
jsr r7 | |
.global _rx_run_init_array | |
.type _rx_run_init_array,@function | |
_rx_run_init_array: | |
mov #__init_array_start,r1 | |
mov #__init_array_end,r2 | |
mov #4, r3 | |
mov #_rx_run_inilist,r7 | |
jsr r7 | |
.global _rx_run_fini_array | |
.type _rx_run_fini_array,@function | |
_rx_run_fini_array: | |
mov #__fini_array_start,r2 | |
mov #__fini_array_end,r1 | |
mov #-4, r3 | |
/* fall through */ | |
_rx_run_inilist: | |
next_inilist: | |
cmp r1,r2 | |
beq.b done_inilist | |
mov.l [r1],r4 | |
cmp #-1, r4 | |
beq.b skip_inilist | |
cmp #0, r4 | |
beq.b skip_inilist | |
pushm r1-r3 | |
jsr r4 | |
popm r1-r3 | |
skip_inilist: | |
add r3,r1 | |
mov #next_inilist,r7 | |
jsr r7 | |
done_inilist: | |
rts | |
.section .init,"ax" | |
.balign 4 | |
.global __rx_init | |
__rx_init: | |
.section .fini,"ax" | |
.balign 4 | |
.global __rx_fini | |
__rx_fini: | |
mov #_rx_run_fini_array,r7 | |
jsr r7 | |
.section .sdata | |
.balign 4 | |
.global __gp | |
.weak __gp | |
__gp: | |
.section .data | |
.global ___dso_handle | |
.weak ___dso_handle | |
___dso_handle: | |
.long 0 | |
.section .init,"ax" | |
mov #_rx_run_preinit_array,r7 | |
jsr r7 | |
mov #_rx_run_init_array,r7 | |
jsr r7 | |
rts | |
.global __rx_init_end | |
__rx_init_end: | |
.section .fini,"ax" | |
rts | |
.global __rx_fini_end | |
__rx_fini_end: | |
#endif | |
/* call to exit*/ | |
_exit: | |
bra _loop_here | |
_loop_here: | |
bra _loop_here | |
.text | |
.end |