| /***************************************************************/ | |
| /* */ | |
| /* PROJECT NAME : RTOSDemo */ | |
| /* FILE : reset_program.asm */ | |
| /* DESCRIPTION : Reset Program */ | |
| /* CPU SERIES : RX700 */ | |
| /* CPU TYPE : RX71M */ | |
| /* */ | |
| /* 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 | |
| /* DON'T CHANGE 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 |