
	     TOPPERS/JSPͥ 桼ޥ˥奢 
    		    MIPS3 åȰ¸

	   Release 1.4.1 бǽ: 9-Aug-2004

------------------------------------------------------------------------
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2001-2004 by Industrial Technology Institute,
                             Miyagi Prefectural Government, JAPAN

 嵭ԤϡFree Software Foundation ˤäƸɽƤ
 GNU General Public License  Version 2 ˵ҤƤ狼
 (1)(4)ξ˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥѲǽʥХʥꥳɡʥ֥륪
     ȥե饤֥ʤɡˤηѤˤϡ
     ȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭ɽ
     Ѿ浪Ӳ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥԲǽʥХʥꥳɤηޤϵ
     ߹ѤˤϡΤ줫ξȡ
   (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
       ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭Ԥդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
 ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
 ʤޤܥեȥѤˤľŪޤϴŪ
 ʤ»˴ؤƤ⡤Ǥʤ
------------------------------------------------------------------------

MIPS3 åȰ¸γ

1.1 åȥƥȳȯĶ

MIPS3ץåΥåȥƥȤƤϡʲΥץå򥵥ݡȤ
Ƥ롣

VR5500 (NEC)
VR4131 (NEC)

ݡȤƤܡɤϡʲ̤Ǥ롣

ҥޥ RTE-VR5500-CB(64) (CPU:VR5500)
ԥޥԥ塼 KZ-Vr4131PCI-01 (CPU:VR4131)

ȯĶˤϡGCC ʤɤ GNUȯĶѤ֥ȥեեޥ
Ȥ ELF ɸȤ롣

ʲvr5500, vr4131ǥ쥯ȥmips3ǥ쥯ȥϰϤץå
¸ȸƤӡvr5500, vr4131ǥ쥯ȥ˴ؤ뤳Ȥ򡢥ƥ¸ȸ
֡
	MIPS3åȰ¸ = ץå¸ + ƥ¸

1.2 ݡȤ뵡ǽγ

MIPS3åȰ¸εǽȤơߥޥѹ(chg_ipmget_ipm)
ȡǽɾѥƥﻲȵǽ(vxget_tim)򥵥ݡȤƤ롣ߤ
ػߤȵ(dis_intena_int)ϥݡȤƤʤ

1.3 ¾ΥåȤؤΥݡƥ

MIPS ꡼ϡMIPS Ҥ鶡뤵Ƥ CPU ǤꡢΥѤ
͡ʥץåƥ᡼в٤Ƥ롣ޤMIPS ˤϡ̿᥻å
γĥ٥˱ MIPS I  IV ޤǤ¸ߤ롣ǡ MIPS III 
٥ʰʲMIPS3ˤ̿᥻åȤѤԤä

ϺԤäץå˴ؤơVR5500 ̿᥻åȤȤ MIPS IV 
ޤбƤ뤬VR4131  MIPS III ޤǤбǤ뤿Ǥ롣
ʺμѤơ¾MIPSץåؤΥݡƥ󥰤ԤȤǽ
  롣

1.4 GDB 

ߤ TOPPERS/JSP ͥ MIPS3 ǤROM򥵥ݡȤƤ롣

ޤGDB֤Ȥ߹碌ƻѤ뤳Ȥθơ¾ǤJSPͥ
ƱͤˡGDB_STUBޥˤ拾ѥԤäƤ롣
ΥޥˤꡢѤ󥫥ץȤڤؤ뤳Ȥǡб
ԤäƤ롣
(/vrxxxx/makefile.config)

MIPS3ѤGDB֤ϡvr4131бǤƤꡢTOPPERSץ
ȥۡڡӡܾ븩ȵ祻󥿡ۡڡ̤
ͽǤ롣

1.5 ꥢݡ

ͥΥѤ˥ꥢݡȤ򣱤ĻѤ롣
ꥢݡȤ
  8ӥå
  ѥƥʤ
  ȥåץӥåȡ1ӥå
  ܡ졼ȡ9600bps
Ǥ롣
(tl16pir552.c, vr4131_dsiu.csiopinib_table)

ʤܡ졼ȤˤĤƤϡDEVIDE_RATIOޥˤƤΤɬפ
ѹ뤳ȤǤ롣
(sys_config.h)

MIPS3åȰ¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡMIPS3åȰ
¸ʬˤĤƲ⤹롣

2.1 ǡ

int unsigned intΥ 32ӥåȤǤ롣
ߤϡMIPSΤϡ64ӥåȥƥǤ뤿ᡢ64ӥåȤؤб
ǽǤ롣ʳǤѼӤʤɤ顢32ӥåȤǤμ
Ԥä

2.2 ߴǽCPU㳰

MIPS3ǤϡߤCPU㳰ˤ㳰פȤǡԤä
롣ΤᡢꥻåȤʤɤΰ̿Ū㳰٥
ɥ쥹϶̤ȤʤäƤ롣

ʤʤμǤϡROMʤɤͳˤꡢơ쥸BEVӥ
ȤȤƼԤäƤΤǡ٥ɥ쥹0xbfc00300ˤʤäƤ롣
(sys_config.h ; INIT_SR)

ǡ٥ɥ쥹椫顢ߤCPU㳰(߰ʳΡ
פ򡢰ʲΤ褦˸Ƥ֤ȤȤ롣)ȤʬƽԤɬפ
롣ǡ쥸(Cause;CP0)㳰(ExcCode)ѤȽǤ
ԤäʬƤ롣

ȽǸΡװбϥɥƤӽФˡ٥ơ֥
ߤƤ롣
      		INT_TABLE int_table[ TMAX_ALL_INTNO ]
			ICU_IPM icu_intmask_table[ TMAX_ALL_INTNO ]
      CPU㳰		EXCVE exc_table[ TMAX_CORE_EXCNO ]
ǡߥϥɥ鵼٥ơ֥ˤĤƤϡMIPS3ϡߤ
ͥԤʤˡߥϥɥƤӽФMIPS3˴ؤ
ߥޥȤޤȤ᤿INT_TABLEηȤޤ
ȥˤĤƤϡ͡ʳߥȥ餬¸ߤ뤳Ȥθơ
ܿδץå¸ʬΥơƥ¸ˤƳ
ߥȥϢμԤɬפ뤿ᡢ̤icu_intmask_table
뤳Ȥб뤳ȤȤ
cpu_config.h, cpu_config.c, pic_icu.h, vr4131_icu.h

ʤǡ
	TMAX_ALL_INTNO : MIPS3ȳߥȥȤޤ᤿
			 ܿ
		MIPS3 ܿ TMAX_CORE_INTNO (8ܸ)ȡ
		  ȥܿ TMAX_ICU_INTNO Ȥιס)
	TMAX_CORE_EXCNO : MIPS3ΡCPU㳰ܿ32ܸ
Ǥ롣
(mips3.h, cpu_config.h, pic_icu.h, vr4131_icu.h)

ϥɥ鵼٥ơ֥ˤϡͤȤơǥХåѤcpu_experrؿ
ϿƤ롣ϡȤơߡCPU㳰TLB, XTLB԰ȯ
Υåݥ󥿤͡ơ쥸͡쥸ͤ
ĴؿǤꡢͤѤΥݡȤ˽񤭽ФؿǤ롣
(cpu_config.c)

ʲǤϡ2.32.4ǤϳߤˤĤ2.5ǤCPU㳰ˤĤ
롣

MIPS3ϡߥȥ¢ƤʤᡢƥåȤˤ
Ƴ߽ۤʤ롣ǡѤåȰʳ˰ܿ뤿
߽˴ؤ륤󥿥եϡʸκǸˤޤȤƵܤ
ΤǡȤΤȡ

2.3 ߴǽ

2.3.1 ߥȥICUCPUȤ³

MIPS3ϡߥȥ¢Ƥʤᡢ̤ߤɬפ롣
γߥȥȤ³Ȥ뤿ˡINIT_CORE_IPM 
롣ͤϡmips3.hƤCause_Int(0:4)ޥѤ
롣
(ʤΥޥϡǽŪˤCP0θ쥸ΥӥåȤľƤ롣)
(sys_config.h)

(a) VR5500
VR5500ϡߥȥ¢Ƥʤˡåȥܡɾ
ߥȥߤƤ롣γߥȥȤϡ
Int(0:1)Σܤ³Ƥ롣
      INIT_CORE_IPM = ( Cause_Int0 | Cause_Int0 )

(b) VR4131
VR4131ϡߥȥ¢Ƥ롣γߥȥȤϡ
Int(0:2)Σܤ³Ƥ롣
ʥϡɥp196ȡ
      INIT_CORE_IPM = ( Cause_Int0 | Cause_Int1 | Cause_Int2 )

2.3.2 ߥϥɥ

ߥϥɥϡ嵭ε٥ơ֥Ͽ򤷤Ѥ뤳Ȥˤʤ롣
ΤȤΡơ֥ΰǤֳֹװֹפȸƤ֡

0  7ϡMIPS3γƳװбƤꡢˤ INTNO_IP0
  INTNO_IP7 ȤƤ롣
(mips3.h)

ޤ8ְʹߤ򡢥ƥ¸ǰʲΤ褦Ƥ롣

(a) VR5500
          װ      װֹ      ޥ̾
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          ޣ                        INTNO_TIMER0
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          ꥢ룰                      INTNO_SERIAL0
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          GBUS-INT0-                    INTNO_GBUS
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          BUS ERROR                     INTNO_BUS_ERR
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          ޣ                      INTNO_TIMER1
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          ꥢ룱                    INTNO_SERIAL1
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          ѥ                      INTNO_PARALEL
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
          DMAC INTREQ-                  INTNO_DMAC

(pic_icu.h)

(b) VR4131
          װ          װֹ      ޥ̾
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        Хåƥ                              INTNO_BAT
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ѥå                        INTNO_POWER
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ңԣạ̃磱                    INTNO_RTCL1
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ElipsedTime                   INTNO_ETIME
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ǣɣ                              INTNO_GIU
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ӣɣ                              INTNO_SIU
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        եȥ                        INTNO_SOFTINT
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ạ̃ˣңգ                        INTNO_CLKRUN
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ңԣạ̃磲                    INTNO_RTCL2
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ̣ţ                              INTNO_LED
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        TClock                      INTNO_TCLK
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ƣɣ                              INTNO_FIR
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ģӣɣ                            INTNO_DSIU
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        Уã                              INTNO_PCI
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ӣã                              INTNO_SCU
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        ãӣ                              INTNO_CSI
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
        £ã                              INTNO_BCU

(vr4131_icu.h)

ΥåȤˤƤϡͥǤϡʾγװ椫鲼
ѤƤ롣

(a) VR5500
  ޣꥢ룰ʡꥢ룱

(b) VR4131
  TClock󥿡ģӣɣ

2.3.3 ߥޥͥ

ߥޥͥΤΡAPIϰʲ̤Ǥ롣

(1)IPM
CPUȳߥȥȤƤޤȤ᤿ߥޥ򰷤η
롣CORE_IPMcoreICU_IPMicuȤʤ빽¤ΤȤƤ롣
(cpu_defs.h)

CORE_IPMϡơ쥸˽ͤݻ뤿ᡢUINTȤ
Ƥ롣ޤICU_IPMϡ줾˥åȥܡɤˤĤƲ
褦Ƥ롣

(a) VR5500
  VR5500ϳߥȥ¢Ƥʤᡢåȥܡɾ˳
  ߥȥäƤ롣γߥȥϡХȡߣ
  γߥޥäƤΤǡICU_IPM
	{ int0m, int1m } = { UB, UB }
  ȤƤ롣

(b) VR4131
  VR4131ϳߥȥ¢Ƥ롣¢ߥȥϡ
  ХȡߣĤγߥޥ(MSYSINT1REG, MSYSINTREG2REG쥸)
  ƤΤǡICU_IPM
	{ msysint1, msysint2 } = { UH, UH }
  ȤƤ롣

(cpu_defs.h, sys_defs.h)

μǤϡICU_IPM νͤȤƲΤ褦ˤƤ롣

(a) VR5500
  ޣΤߤĤƤ롣

(b) VR4131
  ХåƥΤߤĤƤ롣

(sys_config.h)

coreͤϡơ쥸˽ࡢIM(0:7)ʬΤߤݻ
  ȡ¾ΥӥåȤưϡݾڤʤ

(2)all_set_ilv          	ߥ٥

CAPI
        all_set_ilv(INTNO intno, IPM *ipm)

ڥѥ᡼
	INTNO intno		װֹ
	IPM ipm			ߥޥ

ڥ꥿ѥ᡼
	ʤ

ڵǽ
MIPS3ӳߥȥ˴ؤ롢ߥϥɥ鵼٥ơ
֥int_tableʤӤˡicu_intmask_tableˤˡߥޥꤹ롣
(cpu_config.h)

ʤåȥܡɾγߥȥˤ뤬Ԥä
åȥܡɤγߥȥǤξȤͥԤä
ʤΤˡͥٽߥޥǹԤɬפ롣

λߥޥꤹȤϡIPM¤ΤǤǤCORE_IPM
coreϡΥåȥܡɤΥϡɥȿǤƤΤǤ
ǡ§ȤѹʤȤȤ롣ߥ٥ϡ³Ƥ
ߥȥγߥޥѹ뤳Ȥб뤳ȤȤ롣

μˤ롢ͥ٤ϰʲ̤Ǥ롣
(a) VR5500
  ͥ : () ꥢ룱 -> ꥢ룰 -> ޣ ()
(rte-vr5500-cb.h)
(b) VR4131
  ͥ : () ģӣɣ -> TClock -> Хåƥ­ ()
(kz-vr4131pci-01.h)

2.4 chg_ipmΥݡȤˤĤ

chg_ipm 򥵥ݡȤ뤿ˡߥϥɥνʤɤ˥Хإ
ɤƤ롣ǡSUPPORT_CHG_IPM ȤޥˤꡢΥ
ӥ򥵥ݡȤ뤫ɤڤؤ褦ˤƤ롣
(SUPPORT_CHG_IPM ϡcpu_config.h  #define Ƥ롣)

MIPS3åȰ¸γߥޥѹȤΤΥӥλ
ϼ̤ꡣ

(1) chg_ipm			ߥޥѹ

CAPI
	ER ercd = chg_ipm(IPM ipm);

ڥѥ᡼
	IPM	ipm		ꤹ٤ IPM 

ڥ꥿ѥ᡼
	ER	ercd		顼

ڥ顼ɡ
	E_CTX		ƥȥ顼
	E_PAR		ѥ᡼顼(ipm )

ڵǽ

ߥޥ ipm ǻꤵ줿ͤꤹ롣ꤷͤMIPS3ʬ
ˤĤƤ0MAX_IPMϰˡߥȥʬˤĤƤϳ
ȥγߥޥϰäƤʤˡE_PAR顼
ޤꤷIPMͤϡǥѥåѤ롣
ǡMAX_IPMϡMIPS3ǤߥޥκΥӥåȥѥ
Ǥ롣

ΥӥϡƥȤ CPUå֤λΤ߸
ӽФȤǤ롣󥿥ƥȤ CPUå֤ǸƤӽФ
ˤϡE_CTX顼Ȥʤ롣

(2) get_ipm			ߥޥλ

CAPI
	ER ercd = get_ipm(IPM *p_ipm);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	ER	ercd		顼
	IPM	ipm		ߤ IPM 

ڥ顼ɡ
	E_CTX		ƥȥ顼

ڵǽ

ߤ ߥޥͤɤ߽Фipm ֤

ΥӥϡƥȤ CPUå֤λΤ߸
ӽФȤǤ롣󥿥ƥȤ CPUå֤ǸƤӽФ
ˤϡE_CTX顼Ȥʤ롣

ʤȥ졼ǽ˴ؤơchg_ipm˴ؤʬϥƥ¸ˤ
ԤäƤ롣
(sys_tool_config.h)

2.5 CPU㳰ǽCPU㳰ϥɥ

DEF_EXC ǻꤹCPU㳰װֹ(excno)ϡMIPS3 Ǥε٥ơ֥
Υ٥ֹɽΥǡ(EXCNO) UINTƤ롣㳰
װֹMIPS3㳰ɤ11бƤ롣

DEF_EXC ǡ㳰װֹȤͭǤʤͤ䡢CPU㳰бʤֹ
ꤷưݾڤʤ

(1)p_excinf
CPU㳰ϥɥϤp_excinfϡCPU㳰ȯΥƥȤ¸
åؤΥݥ󥿤Ϥ롣åι¤ʲ˼

      ----------------------
     |       sp (r29)       |  <-- p_excinf
      ----------------------
     |       at (r1)        |
      ----------------------
     |       v0 (r2)        |
      ----------------------
     |       v1 (r3)        |
      ----------------------
     |       a0 (r4)        |
      ----------------------
     |       a1 (r5)        |
      ----------------------
     |       a2 (r6)        |
      ----------------------
     |       a3 (r7)        |
      ----------------------
     |       t0 (r8)        |
      ----------------------
     |       t1 (r9)        |
      ----------------------
     |       t2 (r10)       |
      ----------------------
     |       t3 (r11)       |
      ----------------------
     |       t4 (r12)       |
      ----------------------
     |       t5 (r13)       |
      ----------------------
     |       t6 (r14)       |
      ----------------------
     |       t7 (r15)       |
      ----------------------
     |       t8 (r24)       |
      ----------------------
     |       t9 (r25)       |
      ----------------------
     |       gp (r28)       |
      ----------------------
     |       fp (r30)       |
      ----------------------
     |       ra (r31)       |
      ----------------------
     |  PC (EPC;CP0_r14)    |
      ----------------------
     |  SR (Status;CP0_r12) |
      ----------------------
     |          HI          |
      ----------------------
     |          LO          |
      ----------------------

     sp : Stack Pointer
     gp : Global Pointer
     fp : Frame Pointer
     ra : Return Address
     PC : Program Counter
     SR : Status Register

ޤCPU㳰ȯEPCͤϡ㳰ȯ̿᤬ʬåȤˤϡ
ľʬ̿򤵤
ʤʤо̿Υɥ쥹-4񤭹ޤ롣

2.6 HI, LO 쥸

MIPS3Ǥϡ쥸HI, LO򥵥ݡȤƤ롣ǡμˤ
Ƥϡߥϥɥνǡå¸Ƥ롣
ƥǤΡΥǥѥåƤӽФξϡؿƤӽ
ǤꡢθƤӽФޤäƤΥ쥸Ѥ뤳Ȥ̵Τǡ
¸Ƥʤ
(cpu_support.S)

2.7 ȥåץ⥸塼

MIPS3åȤǤϡ㳰٥ΰĤˡꥻå¤Ӥ NMI(Non Maskable
Interrupt)ѤΥ٥ɥ쥹Ƥ롣Υɥ쥹Υ褬
ȥåץ⥸塼ȤʤäƤ롣

Υȥåץ⥸塼(reset.S)ǤϡνԤ

(A) ץåν

ץåνϡΤΤԤ
(a) CPU쥸ν
쥸åݥspХݥgpk0쥸
롣

åݥ󥿤ˤϡɥ쥹 _stack_top ꤹ롣_stack_top ϡ
ץΤȤ롣ꤵ륹åΰϡ󥿥
ƥѤΥåΰȤơߥϥɥʤɤѤ롣
(vrxxxxelf.ld)

Хݥ󥿤ˤϡɥ쥹 _gp ꤹ롣_gp ϡ󥫥ץ
ΤȤ롣
(vrxxxxelf.ld)

k0쥸ˤϡͥ뵯ư󥿥ƥȤǤμ¹ԤȤΤǡ1
ꤹ롣

(b) CP0쥸ν
ơ쥸ե쥸åLo쥸ӥ쥸
롣

ơ쥸 INIT_SR ˽롣INIT_SR ϡsys_config.h 
뤳ȤꤷƤ롣ΤȤơ쥸γߥޥ
롣λߥޥ INIT_CORE_IPM (sys_config.h) ͤꤹ롣

ե쥸INIT_CONFIG_MASK ǽ롣INIT_CONFIG_MASK ϡ
sys_config.h 뤳ȤꤷƤ롣ΥޥͤOR黻ԤȤǡ
ԤäƤ롣

(B) hardware_init_hook θƽФ

hardware_init_hook  0 Ǥʤˤϡhardware_init_hook ƤӽФ
hardware_init_hook ϡ̤˥ͥ뤬ư˹Ԥɬפ륷ƥ
¸ν㡧RAMȥνʤɡˤ򵭽ҤΤȤ롣
Ҿϡsys_support.S ɸȤ롣

hardware_init_hook ɤǤƤʤ硢󥫤ǤΥܥ0
(󥫥ץ˵Ҥ)

ʤMIPS3ƥǤϡ̤˰켡åTLB (Translation
Lookaside Buffer®Ѵ˾׵)¢Ƥ뤬ץåȤ¿
㤤롣ǡνϡhardware_init_hook ˵Ҥ뤳Ȥ
ɸȤ롣

(C) bssdataν

bssʴ sbssˤ򥼥ꥢ롣

dataʴ sdataˤ롣ROMбΤˡROM
 RAM ؤȡԡԤ

(D) software_init_hook θƽФ

software_init_hook  0 Ǥʤˤϡsoftware_init_hook ƤӽФ
software_init_hook ϡͥ뤬ư˹Ԥɬפ륽եȥ
Ķ(Ūˤϡ饤֥)¸νԤѰդƤ롣

software_init_hook ɤǤƤʤ硢󥫤ǤΥܥ
 0 (󥫥ץ˵Ҥ)

(E) ͥεư

kernel_start ʬͥư롣kernel_start ꥿󤷤
뤳ȤꤷƤʤ

(reset.S)

ƥ¸εǽ

3.1 ƥ९åɥ饤

ƥ९åɥ饤Ф isig_tim ƤӽФϡsys_defs.h 
TIC_NUME  TIC_DENO Ƥ(ǥեȤǤ 1ߥü)
ѹ뤳Ȥǡisig_tim ƤӽФѹ뤳ȤǤ롣
ޤ٤륯å˰¸뤿ᡢޤζ륯åñ̤ü
ʤͤꤷˤϡisig_tim θƽФ˸뤳Ȥˤʤ롣

ǥեȤǤϡΥޤѤƤ롣
(a) VR5500
  åȥܡܤΥ(uPD71054)Υ0 (륯å 2MHz)
(b) VR4131
  VR4131¢RTCTClock (륯å 33.2MHz)

ʤMIPS3Υޤϡ桼Ѥ뤳ȤǤ롣

3.2 ǽɾѥƥﻲȵǽ

MIPS3åȰ¸Ǥϡǽɾѥƥﻲȵǽ(vxget_tim)
ݡȤƤ롣SYSUTIMUD(64ӥåȤ̵)Ƥ롣

ǽɾѥƥ٤϶륯åñ̤Ǥ뤬ޤθͤ
ɤ߽Ф˰Ū˥ޤߤɬפ뤿ᡢvxget_tim Ƥ
٤˥ƥ९åŤ٤뤳Ȥˤʤ롣ǡSUPPORT_VXGET_TIM
ȤޥˤꡢΥӥ򥵥ݡȤ뤫ɤڤ
褦ˤƤ롣
(SUPPORT_VXGET_TIM ϡsys_config.h  #define Ƥ롣)

3.3 ꥢ륤󥿥եɥ饤

(a) VR5500
ꥢ륤󥿥եɥ饤ФϡܡɾܤSCCSerial Communication
Controler(TL16PIR552)UART-CH#0UART-CH#1򥵥ݡȤƤ롣ꥢ
ΥݡȤݡȿϡTNUM_PORTޥˤ롣ǥեȤǤϡ
ݡȣȥݡȣΣݡȤ򥵥ݡȤƤ롣ʤͥΥ
ˤϥݡȣ˻ѤƤ롣
(TNUM_PORT ϡsys_config.h  #define Ƥ롣)
(tl16pir552.h, tl16pir552.c)

(b) VR4131
ꥢ륤󥿥եɥ饤ФϡVR4131¢DSIU(ǥХꥢ륤
ե˥å)򥵥ݡȤƤ롣ϡͥΥѤ˻Ѥ
Ƥ롣

ʤSCU(ꥢ륤󥿥ե˥å)ϡݡȤƤʤ
DSIUѤΥɤѹ뤳ȤˤꡢбǽǤ롣

(vr4131_dsiu.h, vr4131_dsiu.c)

3.4 ޥå

ޥåפ˴ؤϡ󥫥ץȤˤƹԤѥ
󥫥ץȤˤĤƤϡMakefile.config ˤԤ
(vrxxxxelf.ld, Makefile.config)

ʤΰ褬 0xbfc00000 ȡ0x9fc00000 ΣˤʤäƤꡢ
ˡȥɥ쥹0x00000000 ǤʤˡROM˾Ƥդ
ȤROMɥ쥹ȤбʤΤˡѤROM饤ǡ
ŬڤʥեåͤꡢӡŬڤʥХåեꥢԤɬפ
롣

(a) VR5500
ҥޥRTE-VR5500-CB(64)(CPU: VR5500)

μˤƤϡΰѹˤꡢkseg0 ޤ kseg1 
ưξǽǤ롣ѹϡ󥫥ץǹԤ

ơΥޥåפϰʲ̤Ǥ롣

kseg0ΰʥåΰˤξ
         0x9fc00000 - 0x9fdfffff  ΰ		(FLASH ROM 2Mbyte)
	(0xa0000000 - 0xa00fffff  ROMΰΥߥ顼Ѥ˳
							(SRAM   1Mbyte))
         0xa8000000 - 0xabffffff  ǡΰ		(DRAM  64Mbyte)
		    - 0xabffffff  󥿥ƥѥå
	 0xbfc00000 - 0xbfc007ff  㳰٥ơ֥롦ΰ
				  (exce_vec_map, reset ǻ)
(vr5500elf.ld)

kseg1ΰ󥭥åΰˤξ
	(0xa0000000 - 0xa00fffff  ROMΰΥߥ顼Ѥ˳
							(SRAM   1Mbyte))
         0xa8000000 - 0xabffffff  ǡΰ		(DRAM  64Mbyte)
		    - 0xabffffff  󥿥ƥѥå
         0xbfc00000 - 0xbfcfffff  ΰ		(ROM    1Mbyte)
(vr5500elf.ld)

(b) VR4131
ԥޥԥ塼 KZ-Vr4131PCI-01 (CPU:VR4131)

μˤƤϡΰѹˤꡢkseg0 ޤ kseg1 
ưξǽǤ롣ѹϡ󥫥ץǹԤ

ơΥޥåפϰʲ̤Ǥ롣

kseg0ΰʥåΰˤξ
         0x9c000000 - 0x9c03ffff  󥿥ƥѥå
							(SRAM 256kbyte)
         0x9fc00700 - 0x9fdfffff  ΰ	   (FLASH ROM 2Mbyte)
	(0xa0000000 - 0xa01fffff  ROMΰΥߥ顼Ѥ˳
							(DRAM   2Mbyte))
         0xa0200000 - 0xa0ffffff  ǡΰ		(DRAM  14Mbyte)
	 0xbfc00000 - 0xbfc006ff  㳰٥ơ֥롦ΰ
						  (FLASH ROM 0x700byte)
				 (exce_vec_map, reset ǻ)
(vr4131elf.ld)

kseg1ΰ󥭥åΰˤξ
	(0xa0000000 - 0xa01fffff  ROMΰΥߥ顼Ѥ˳
							(DRAM   2Mbyte))
         0xa0200000 - 0xa0ffffff  ǡΰ		(DRAM  14Mbyte)
         0xac000000 - 0xac03ffff  󥿥ƥѥå
							(SRAM 256kbyte)
         0xbfc00000 - 0xbfdfffff  ΰ		(FLASH ROM 2Mbyte)
(vr4131elf.ld ѹä뤳Ȥбǽ)

3.5 CP0ϥɤˤĤ

MIPSǤϡץåˤäƤCP0ϥɤ¸ߤΤ롣Τ
бȤơNOP_FOR_CP0_HAZARDޥ롣ϡcpu_support.S
ѤƤ롣

ˡϡɬפʿʬnop¤٤뤳Ȥˤʤ롣
(vr4131.h, vr5500.h)

ȯĶι

ȯĶιˡˤĤƤϡGNUȯĶۥޥ˥奢򻲾Ȥ뤳ȡ
ʤåȴĶ <TARGET> ͤˤĤƤϡʲ򻲹ͤΤȡ
ȯˤWindows2000SP4CygwinѤ

ưǧϡΥġˤƳǧƤ롣ΥġǥեȤȤ롣

GNUۤƤ륪ꥸʥGCCʤɤ򥽡鹽ۤġ
  ưǧԤäȤΥСϰʲ̤Ǥ롣
    BINUTILS : 2.13.2.1
    GCC-CORE : 3.3.2
    NEWLIB   : 1.11.0
ʤξΥåȴĶ <TARGET> ˤϡmipsel-nec-elf Ѥ롣

»

ӥåǥϥݡȤƤʤ
  ʥȥ륨ǥΤߤ򥵥ݡȤƤ롣
(sys_defs.h)

64bit⡼ɤϥݡȤƤʤ

VR5500¢ư˥åȤϥݡȤƤʤ

ȥåץ롼󡢥󥯥ץȤϡC++бƤʤ

¾

6.1 ǥ쥯ȥꡦե빽

MIPS3 åȰ¸γƥեγפϼ̤ꡣ

    config/mips3/
        MIPS3

	Makefile.config		MakefileMIPS3åȰ¸
	cpu_defs.h		ץå¸Υץꥱ
	cpu_config.h		ץå¸ι
	cpu_config.c		ץå¸δؿ
	cpu_support.S		ץå¸Υ֥롼
	cpu_context.h		ƥ
	cpu_rename.def		ͥ̾Υ͡
	cpu_rename.h		ͥ̾Υ͡
	cpu_unrename.h		ͥ̾Υ͡
	tool_defs.h		ȯĶ¸Υץꥱ
				GNUȯĶѡ
	tool_config.h		ȯĶ¸ιGNUȯĶѡ
	makeoffset.c		offset.h ݡȥץ
	cpu_insn.h		٥Υץå롼
	exception_vector.S	㳰٥ɥ쥹Ǥʬ
	start.S			ȥåץ⥸塼
	mips3.h			MIPS3Υ쥸̾ʤɤ
	util.h			ӥåֹʤɤ

    config/mips3/vr5500/
        VR5500(NEC)бƥ¸
       (ҥޥ RTE-VR5500-CB(64) б)

	Makefile.config		MakefileRTE-VR5500-CB(64)ƥ¸
	sys_defs.h		ƥ¸Υץꥱ
	sys_config.h		ƥ¸ι
	sys_config.c		ƥ¸δؿ
	sys_support.S		ƥ¸Υ֥롼
	sys_rename.def		ͥ̾Υ͡
	sys_rename.h		ͥ̾Υ͡
	sys_unrename.h		ͥ̾Υ͡
	sys_tool_config.h	ȯĶ¸Υƥ¸
				GNUȯĶѡ
	hw_timer.h		롼
	hw_serial.h		SIOɥ饤
	hw_serial.cfg		SIOɥ饤ФΥե졼ե
	vr5500.h   		VR5500Υϡɥ
	pic_icu.h		ߥȥط
        rte_vr5500_cb.h 	RTE-VR5500-CB(64)ܡɤΥϡɥ
	upd71054.h		NECҦPD71054 ޥɥ饤дϢ
				(åȥܡRTE-VR5500-CBܤΥ)
	vr5500_elf.ld		󥫥ץ(ROM )
	vr5500_elf_ram.ld	󥫥ץ(RAM ž)

    config/mips3/vr4131/
        VR4131(NEC)бƥ¸
       (ԥޥԥ塼 KZ-Vr4131PCI-01 б)

	Makefile.config		MakefileKZ-Vr4131PCI-01ƥ¸
	sys_defs.h		ƥ¸Υץꥱ
	sys_config.h		ƥ¸ι
	sys_config.c		ƥ¸δؿ
	sys_support.S		ƥ¸Υ֥롼
	sys_rename.def		ͥ̾Υ͡
	sys_rename.h		ͥ̾Υ͡
	sys_unrename.h		ͥ̾Υ͡
	sys_tool_config.h	ȯĶ¸Υƥ¸
				GNUȯĶѡ
	hw_timer.h		롼
	hw_serial.h		SIOɥ饤
	hw_serial.cfg		SIOɥ饤ФΥե졼ե
	vr4131.h		VR4131Υϡɥ
	vr4131_sil.h		VR4131Υϡɥѥƥ
				󥿥ե쥤䡼
	vr4131_icu.h		VR4131¢ߥȥ˥åICU
				ߴϢ
	vr4131_dsiu.h		VR4131¢ǥХꥢ륤󥿥ե˥å
				DSIC ʰSIOɥ饤дϢ
	vr4131_dsiu.c		VR4131¢ǥХꥢ륤󥿥ե˥å
				DSIC ʰSIOɥ饤
	vr4131_rtc.h		VR4131¢ꥢ륿९å˥åRTC
				ޥɥ饤дϢ
        kz_vr4131pci_01.h	KZ-Vr4131PCI-01ܡɤΥϡɥ
	vr4131_elf.ld		󥫥ץ(ROM )
	vr4131_elf_gdb.ld	󥫥ץ(GDB )

ʰʲVR5500ܥåȥܡRTE-VR5500-CB
    pdic/simple_sio
	tl16pir552.h		TITL16PIR552 ʰSIOɥ饤дϢ
	tl16pir552.c		TITL16PIR552 ʰSIOɥ饤
				(åȥܡRTE-VR5500-CBܤΥꥢ
				 ȥ)

6.2 ¾

MIPS ƥѤץåμϡ¿Ǥǡ
桹ȯ¦ΥåȴĶ꤫顢μ VR4131VR5500 Ȥ
ΥץåΤߤΥݡȤȤʤäƤޤ

ǡΡ¿ϤäƤץåưƥȤ˶Ϥ
罸Ƥޤ

󡢲ؤȤϢԤƤޤ

TOPPERSץ  ᡼󥰥ꥹ  TOPPERS-USER

ܾ븩ȵ祻󥿡  ŻҾ󵻽  󵻽ѳȯ
  TEL : 022-377-8700e-mail : micom@mit.pref.miyagi.jp


ͥܿԤؤξ

ϡMIPSƥؤμ򡢺Ԥäå
ץåʳMIPSƥץåؤȰܿ뤿ξˤĤ
ޤȤ롣

7.1 ߥȥICUCPUȤΥ󥿥եˤĤ

MIPS3ǤϡߤCPU㳰ޤǤʬϹԤޤCPU㳰ˤ
ϹԤװФʬϹԤʤϡMIPS3³
ߥȥ餬ǤʤȤȡ¿礭
Ǥ롣
(cpu_support.S)

ǡʲˡʬΤΥ󥿥եʤӤˡ¾ΤȤ
ʤФʤʤޥʤɤޤȤ롣
(cpu_support.S ; proc_interruptʲ)

װȽ̴ط

(1)װֹ
װȽǸˡߥϥɥƤӽФΰȤʤֹ档
0  7ϡMIPS3ˤ INTNO_IP0  INTNO_IP7 ȤƤ롣
(mips3.h)
ǡƥ¸Ǥϡ8ְʹߤ롣

(2)PUSH_ICU_IPM                 ߥȥγߥޥ

ڵǽ
ߥȥγߥޥ򡢥å¸롣
֥ǽ񤤤ޥȤcpu_support.SǻѤ롣
˳ߥȥѤʤƥǤϡ뤳ȡ

(3)POP_ICU_IPM                  ߥȥγߥޥ

ڵǽ
ߥȥγߥޥ򡢥å롣
֥ǽ񤤤ޥȤcpu_support.SǻѤ롣
˳ߥȥѤʤƥǤϡ뤳ȡ

(4)PROC_INTERRUPT_SYS ޤ proc_interrupt_sys
				װФƥϥɥؤʬ

ڵǽ
װȽǤŬڤʳߥϥɥƤӽФ
ˡϡޥPROC_INTERRUPT_SYSˤޤϡؿƽСproc_interrupt_sys
ǹԤȤȤ롣
ŪˤϡʲΤ褦ʥץǼ뤳Ȥˤʤ롣
	1. װȽ
	2. ߥޥʥߥȥˤ
	3. ߵ
	4. ø롼θƽ
	5. ߶ػ
	6. ߥȥγ׵Υꥢ
       (7. join_interrupt_and_exception롣; ؿƽФξ)
ƽлΰȤƤϡa1쥸ˤϳ׵Υơ쥸
ޤa2쥸ˤϸ쥸ͤƤΤǡ
Ѥ뤳ȤǤ롣

͡
ˤƤϡra쥸˲ƤϤʤʤ
¹®٤ʤɤδ顢ޥͥ褹롣
ܤϡ7.2 ߥϥɥθƽнμפ򻲾ȡ

ߥޥͥط

(1)ICU_IPM
ߥȥˤĤƤΡߥޥ򰷤ηǤ롣

(2)CHECK_ICU_IPM                ICUγߥޥIPMΥå롼

CAPI
	CHECK_ICU_IPM(ICU_IPM p);

ڥѥ᡼
	ICU_IPM	p		å٤ ICU_IPM 

ڵǽ
ߥޥ p ꤵƤϰϤˤ뤫ɤå롣
CѤ롢ޥȤ롣CHECK_IPM ƤӽФ롣
(pic_icu.h, vr4131_icu.h)

(3)icu_set_ipm                  ߥȥΥޥ

CAPI
	icu_set_ipm(ICU_IPM *icu_ipm);

ڥѥ᡼
	ICU_IPM	icu_ipm		ꤹ٤ ICU_IPM 

ڥ꥿ѥ᡼
	ʤ

ڵǽ
ߥȥγߥޥicu_ipmꤹ롣
(pic_icu.h, vr4131_icu.h)

(4)icu_get_ipm                  ߥȥγߥޥ

CAPI
	icu_get_ipm(ICU_IPM *icu_ipm);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	ICU_IPM	icu_ipm		ߤ ICU_IPM 

ڵǽ
ߥȥγߥޥicu_ipm¸롣
(pic_icu.h, vr4131_icu.h)

(5)icu_set_ilv			ߥȥγߥޥơ֥
				

CAPI
	icu_set_ilv(INTNO intno, ICU_IPM *icu_ipm);

ڥѥ᡼
        INTNO   intno           ߥޥơ֥Υǥå
	ICU_IPM	icu_ipm		ꤹߥޥ

ڵǽ
ߥȥγߥޥơ֥Ρintno֤˳ߥޥicu_ipm
ꤹ롣all_set_ilvƤӽФ롣
(pic_icu.h, vr4131_icu.h)

7.2 ߥϥɥθƽнμ

嵭󥿥ե˴ŤPROC_INTERRUPT_SYSޤproc_interrupt_sys
μˤĤ򤹤롣

ʤμˤƤϡȤVR5500Ǥproc_interrupt_sysؿ
VR4131ǤPROC_INTERRUPT_SYSޥƤ롣
(sys_support.S:VR5500, vr4131_icu.h:VR4131)

μˤƤϡåȥܡɤγߥȥλͤƧޤ
㴳ǼԤäƤ롣

ġνˤĤƥȤ򤷤Ƥ

  1. װȽ

  װȽ̤ϡ
        MIPS3Cause쥸˴Ťʬ
        ߥȥ˴Ťʬ
  2ʳǤʬȽǤԤäƤ롣ΤߥȥˤĤ
  ʬϼ㴳뤿ˡ®٤ȤΥȥ졼ɥդθơ
  PROC_INT(0:4)ޥ褦ʼԤäƤ롣
  μǤϡPROC_INT0ΤߤѤ뤳ȤȤơߥȥ
  ˴ؤإåեVR5500Ǥ pic_icu.hVR4131Ǥ vr4131_icu.h
  ˤƤ롣ʤΥޥˤƤϡװֹ椬t0쥸
  ˡ׵ΥꥢΤt1쥸롣

  (ˡMIPS3γ׵򥯥ꥢ뤿νƤ롣
   ŪˤϡCause쥸ΥꥢԤäƤ롣)

  2. ߥޥʥߥȥˤ

  ߥޥˤƤϡSET_ICU_IPMޥ
  Ƥ롣Υޥϡߥȥ˴ؤإåե
  VR5500Ǥ pic_icu.hVR4131Ǥ vr4131_icu.hˤˤƤ롣

  3. ߵ

  int_tableintmaskǤ顢MIPS3ؤγߥޥͤ
  åȤ뤳ȤǳߵĤ򤷤Ƥ롣

  4. ø롼θƽ

  t0쥸¸ƤװֹѤơint_table
  ϥɥΥɥ쥹ơߥϥɥƤӽФƤ롣

  5. ߶ػ

  ߶ػߤϡStatus쥸IEӥåȤCPUå֤ȽǤѤ
  뤿ˡ뤳ȤǤʤΤǡƱStatus쥸EXLӥå
  뤳Ȥǡ¸Ƥ롣

  6. ߥȥγ׵Υꥢ

  νϡߥϥɥǹԤȤбΤǡƤʤ

ʾΤ褦ʼԤäƤ뤬proc_interrupt_sysμѤ
¾ΥåȤؤΥݡƥ󥰤ԤΥ󥿥եʲˤޤȤ롣

(1) PROC_INT0                   װȽ

ڥ꥿ѥ᡼
		t0		װֹ
		t1		׵᥯ꥢΤ

ڵǽ
MIPS3γװIP2׵бߥȥΡװ
ȽǤ롣װȽǸˡt0˳װֹt1MIPS3Ѥγ
׵᥯ꥢΤơproc_ICU_IPM֡
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

(2) PROC_INT1                   װȽ

ڥ꥿ѥ᡼
		t0		װֹ
		t1		׵᥯ꥢΤ

ڵǽ
װIP3б硣ʲPROC_INT0Ʊ͡
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

(3) PROC_INT2                   װȽ

ڥ꥿ѥ᡼
		t0		װֹ
		t1		׵᥯ꥢΤ

ڵǽ
װIP4б硣ʲPROC_INT0Ʊ͡
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

(4) PROC_INT3                   װȽ

ڥ꥿ѥ᡼
		t0		װֹ
		t1		׵᥯ꥢΤ

ڵǽ
װIP5б硣ʲPROC_INT0Ʊ͡
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

(5) PROC_INT4                   װȽ

ڥ꥿ѥ᡼
		t0		װֹ
		t1		׵᥯ꥢΤ

ڵǽ
װIP6б硣ʲPROC_INT0Ʊ͡
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

(6)SET_ICU_IPM                  ߥȥ¸Υޥ

ڵǽ
ߥȥγߥޥꤹ롣
֥ǽ񤤤ޥȤsys_support.S ǻѤ롣

͡
ΥޥȤˤϡt0쥸t1쥸˲ƤϤʤʤ
t0ˤϡװֹ椬äƤꡢt1ˤϡ׵᥯ꥢ
Ƥ롣

7.3 ¾

ˡͥܿˤɬפ̵ܿ˻ͤȤʤ褦ʥޥʤɤ
롣

(1)CHECK_IPM                	ߥޥΥåޥ

CAPI
	CHECK_IPM(IPM p);

ڥѥ᡼
	IPM	p		å٤ IPM 

ڵǽ
ߥޥ p ꤵƤϰϤˤ뤫ɤå롣
CѤ롢ޥȤ롣xxx_ipm ǸƤӽФ롣
(cpu_config.h)


ѹ

2003ǯ1224JSPͥ Release1.4 б (MIPS3ǤΥݡȤ򳫻)
2004ǯ 2182.3.37.3ɲ
2004ǯ 3313.4֣»׽
2004ǯ 8 9
