root/branch/fichot/Emb_App/crt0mr.a30 @ 216
1 | jalaffon | ; ****************************************************************
|
|
;
|
|||
; MR308 start up program for C language
|
|||
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION
|
|||
; AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED
|
|||
; MR308 V.1.10 Release 1
|
|||
;
|
|||
; ****************************************************************
|
|||
; "$Id: crt0mr.a30 318 2006-07-26 07:54:55Z inui $"
|
|||
;*A1* 2005-02-28 for ES
|
|||
;
|
|||
.LIST OFF
|
|||
.INCLUDE c_sec.inc
|
|||
.INCLUDE mr308.inc
|
|||
.INCLUDE sys_rom.inc
|
|||
.INCLUDE sys_ram.inc
|
|||
.LIST ON
|
|||
.GLB __SYS_INITIAL
|
|||
.GLB __END_INIT
|
|||
.GLB __init_sys,__init_tsk
|
|||
.IF M16C70!=0
|
|||
regoffset .EQU -0220H
|
|||
.ELSE
|
|||
regoffset .EQU 0
|
|||
.ENDIF
|
|||
;-----------------------------------------------------------------
|
|||
; SBDATA area definition
|
|||
;-----------------------------------------------------------------
|
|||
.GLB __SB__
|
|||
.SB __SB__
|
|||
;=================================================================
|
|||
; Initialize Macro declaration
|
|||
;-----------------------------------------------------------------
|
|||
N_BZERO .MACRO TOP_,SECT_
|
|||
MOV.B #00H, R0L
|
|||
MOV.L #TOP_, A1
|
|||
MOV.W #sizeof SECT_, R3
|
|||
SSTR.B
|
|||
.ENDM
|
|||
N_BCOPY .MACRO FROM_,TO_,SECT_
|
|||
MOV.L #FROM_,A0
|
|||
MOV.L #TO_,A1
|
|||
MOV.W #sizeof SECT_, R3
|
|||
SMOVF.B
|
|||
.ENDM
|
|||
BZERO .MACRO TOP_,SECT_
|
|||
.local _end, _loop
|
|||
MOV.L #TOP_, A1
|
|||
MOV.B #00H, R0L
|
|||
MOV.L #(sizeof SECT_ & 0FFFFFFH), R3R1
|
|||
XCHG.W R1,R3
|
|||
_loop:
|
|||
SSTR.B
|
|||
CMP.W #0,R1
|
|||
JEQ _end
|
|||
MOV.B R0L,[A1]
|
|||
ADD.L #1,A1
|
|||
MOV.W #0FFFFH,R3
|
|||
SUB.W #1,R1
|
|||
JMP _loop
|
|||
_end:
|
|||
.ENDM
|
|||
BCOPY .MACRO FROM_,TO_,SECT_
|
|||
.local _end, _loop
|
|||
MOV.L #FROM_,A0
|
|||
MOV.L #TO_,A1
|
|||
MOV.L #(sizeof SECT_ & 0FFFFFFH), R3R1
|
|||
XCHG.W R1,R3
|
|||
_loop:
|
|||
SMOVF.B
|
|||
CMP.W #0,R1
|
|||
JEQ _end
|
|||
MOV.B [A0],[A1]
|
|||
ADD.L #1,A1
|
|||
ADD.L #1,A0
|
|||
MOV.W #0FFFFH,R3
|
|||
SUB.W #1,R1
|
|||
JMP _loop
|
|||
_end:
|
|||
.ENDM
|
|||
;=================================================================
|
|||
; Interrupt section start
|
|||
;-----------------------------------------------------------------
|
|||
.SECTION MR_KERNEL,CODE,ALIGN
|
|||
;-----------------------------------------------------------------
|
|||
; after reset,this program will start
|
|||
;-----------------------------------------------------------------
|
|||
__SYS_INITIAL:
|
|||
LDC #__Sys_Sp,ISP ; set initial ISP
|
|||
MOV.B #2,0AH
|
|||
MOV.B #00,PMOD ; Set Processor Mode Register
|
|||
MOV.B #0,0AH
|
|||
LDC #0010H,FLG
|
|||
LDC #__SB__,SB
|
|||
LDC #0000H,FLG
|
|||
LDC #__Sys_Sp,FB
|
|||
LDC #__SB__,SB
|
|||
; +-----------------------------------------------------+
|
|||
; | ISSUE SYSTEM CALL DATA INITIALIZE |
|
|||
; +-----------------------------------------------------+
|
|||
; For PD308
|
|||
__INIT_ISSUE_SYSCALL
|
|||
;=================================================================
|
|||
; MR_RAM zero clear
|
|||
;--------------------------------------------------------
|
|||
N_BZERO MR_RAM_NE_top,MR_RAM_NE
|
|||
N_BZERO MR_RAM_NO_top,MR_RAM_NO
|
|||
BZERO MR_RAM_top,MR_RAM
|
|||
;=================================================================
|
|||
; NEAR area initialize.
|
|||
;--------------------------------------------------------
|
|||
; bss zero clear
|
|||
;--------------------------------------------------------
|
|||
N_BZERO bss_SE_top,bss_SE
|
|||
N_BZERO bss_SO_top,bss_SO
|
|||
N_BZERO bss_NE_top,bss_NE
|
|||
N_BZERO bss_NO_top,bss_NO
|
|||
;--------------------------------------------------------
|
|||
; initialize data section
|
|||
;--------------------------------------------------------
|
|||
N_BCOPY data_SEI_top,data_SE_top,data_SE
|
|||
N_BCOPY data_SOI_top,data_SO_top,data_SO
|
|||
N_BCOPY data_NEI_top,data_NE_top,data_NE
|
|||
N_BCOPY data_NOI_top,data_NO_top,data_NO
|
|||
;=================================================================
|
|||
; FAR area initialize.
|
|||
;--------------------------------------------------------
|
|||
; bss zero clear
|
|||
;--------------------------------------------------------
|
|||
BZERO bss_FE_top,bss_FE
|
|||
BZERO bss_FO_top,bss_FO
|
|||
;--------------------------------------------------------
|
|||
; Copy edata_E(O) section from edata_EI(OI) section
|
|||
;--------------------------------------------------------
|
|||
BCOPY data_FEI_top,data_FE_top,data_FE
|
|||
BCOPY data_FOI_top,data_FO_top,data_FO
|
|||
LDC #__Sys_Sp,SP
|
|||
LDC #__Sys_Sp,FB
|
|||
;-----------------------------------------------------------------
|
|||
; Set System IPL and Set Interrupt Vector
|
|||
;-----------------------------------------------------------------
|
|||
MOV.B #0,R0L
|
|||
MOV.B #__SYS_IPL,R0H
|
|||
LDC R0,FLG
|
|||
LDC #__INT_VECTOR,INTB
|
|||
; +-----------------------------------------------------+
|
|||
; | System timer interrupt setting |
|
|||
; +-----------------------------------------------------+
|
|||
.IF USE_TIMER
|
|||
MOV.B #stmr_mod_val,stmr_mod_reg+regoffset ; set timer mode
|
|||
MOV.W #stmr_cnt,stmr_ctr_reg+regoffset ; set interval count
|
|||
MOV.B #stmr_int_IPL,stmr_int_reg ; set timer IPL
|
|||
OR.B #stmr_bit+1,stmr_start+regoffset ; system timer start
|
|||
.ENDIF
|
|||
; +-----------------------------------------------------+
|
|||
; | System timer initialize |
|
|||
; +-----------------------------------------------------+
|
|||
.IF USE_SYSTEM_TIME
|
|||
MOV.W #__D_Sys_TIME_L,__Sys_time+4
|
|||
MOV.W #__D_Sys_TIME_M,__Sys_time+2
|
|||
MOV.W #__D_Sys_TIME_H,__Sys_time
|
|||
.ENDIF
|
|||
; +-----------------------------------------------------+
|
|||
; | User Initial Routine ( if there are ) |
|
|||
; +-----------------------------------------------------+
|
|||
; Initialize standard I/O
|
|||
.GLB __init
|
|||
; JSR.A __init
|
|||
; +-----------------------------------------------------+
|
|||
; | Initalization of System Data Area |
|
|||
; +-----------------------------------------------------+
|
|||
JSR.W __init_sys
|
|||
JSR.W __init_tsk
|
|||
.IF __MR_TIMEOUT
|
|||
.GLB __init_tout
|
|||
JSR.W __init_tout
|
|||
.ENDIF
|
|||
.IF __NUM_FLG
|
|||
.GLB __init_flg
|
|||
JSR.W __init_flg
|
|||
.ENDIF
|
|||
.IF __NUM_SEM
|
|||
.GLB __init_sem
|
|||
JSR.W __init_sem
|
|||
.ENDIF
|
|||
.IF __NUM_DTQ
|
|||
.GLB __init_dtq
|
|||
JSR.W __init_dtq
|
|||
.ENDIF
|
|||
.IF __NUM_VDTQ ;*A1*
|
|||
.GLB __init_vdtq
|
|||
JSR.W __init_vdtq
|
|||
.ENDIF
|
|||
.IF __NUM_MBX
|
|||
.GLB __init_mbx
|
|||
JSR.W __init_mbx
|
|||
.ENDIF
|
|||
.IF ALARM_HANDLER
|
|||
.GLB __init_alh
|
|||
JSR.W __init_alh
|
|||
.ENDIF
|
|||
.IF CYCLIC_HANDLER
|
|||
.GLB __init_cyh
|
|||
JSR.W __init_cyh
|
|||
.ENDIF
|
|||
.IF __NUM_MPF ;*A1*
|
|||
; Fixed Memory Pool
|
|||
.GLB __init_mpf
|
|||
JSR.W __init_mpf
|
|||
.ENDIF
|
|||
.IF __NUM_MPL ;*A1*
|
|||
; Variable Memory Pool
|
|||
.GLB __init_mpl
|
|||
JSR.W __init_mpl
|
|||
.ENDIF
|
|||
; For PD308
|
|||
__LAST_INITIAL
|
|||
__END_INIT:
|
|||
; +-----------------------------------------------------+
|
|||
; | Start initial active task |
|
|||
; +-----------------------------------------------------+
|
|||
__START_TASK
|
|||
.GLB __rdyq_search
|
|||
JMP.W __rdyq_search
|
|||
; +---------------------------------------------+
|
|||
; | Define Dummy |
|
|||
; +---------------------------------------------+
|
|||
.GLB __SYS_DMY_INH
|
|||
__SYS_DMY_INH:
|
|||
REIT
|
|||
.IF CUSTOM_SYS_END
|
|||
; +---------------------------------------------+
|
|||
; | Syscall exit rouitne to customize
|
|||
; +---------------------------------------------+
|
|||
.GLB __sys_end
|
|||
__sys_end:
|
|||
; Customize here.
|
|||
REIT
|
|||
.ENDIF
|
|||
; +---------------------------------------------+
|
|||
; | exit() function |
|
|||
; +---------------------------------------------+
|
|||
.GLB _exit,$exit
|
|||
_exit:
|
|||
$exit:
|
|||
JMP _exit
|
|||
.IF USE_TIMER
|
|||
; +---------------------------------------------+
|
|||
; | System clock interrupt handler |
|
|||
; +---------------------------------------------+
|
|||
.GLB __SYS_STMR_INH
|
|||
.ALIGN
|
|||
__SYS_STMR_INH:
|
|||
; process issue system call
|
|||
; For PD308
|
|||
__ISSUE_SYSCALL
|
|||
; System timer interrupt handler
|
|||
_STMR_hdr
|
|||
ret_int
|
|||
.ENDIF
|
|||
.END
|
|||
; ****************************************************************
|
|||
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION
|
|||
; AND RENESAS SOLUTIONS CORPORATION ALL RIGHTS RESERVED
|
|||
; ****************************************************************
|