
             TOPPERS/JSPͥ 桼ޥ˥奢 
                 SH3/SH4 åȰ¸

          Release 1.4.2бǽ: 11-Jul-2005

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

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN

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

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

 @(#) $Id: sh3.txt,v 1.36 2005/09/26 06:26:36 honda Exp $
------------------------------------------------------------------------

SH3/SH4 åȰ¸γ


1.1 åȥƥȳȯĶ

SH3/SH4 ץåΥåȥƥȤƤϡSH7709ASH7729R
SH7727SH7750ܤʲΥܡɤ򥵥ݡȤƤ롥ʤSH3-DSP 
 DSP ǽSH4  FPU ϥݡȤƤʤʥǥѥåڤӳ
ߤǴϢ쥸¸Ƥʤ

()ΩĶLSIƥॺ MS7709ASE01 ܡ (CPU: SH7709A)
()ΩĶLSIƥॺ MS7729RSE01 ܡ (CPU: SH7729R)
()ΩĶLSIƥॺ MS7750SE01  ܡ (CPU: SH7750)
()ΩĶLSIƥॺ MS7727CP01  ܡ (CPU: SH7727)

ʤMS7709ASE01MS7729RSE01MS7750SE01ϡϡɥ̤
Ƥ뤿ᡤ solution_engine Ȥ̾Υƥ¸ȤƤޤȤ
롥ڤؤϡƥ¸ Makefile.clonfig ǻꤹ롥ʲ
3Υܡɤä˶̤ʤϡSolution Engine ɽ롥

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

Solution Engine Ǥϼ¹ԴĶȤơGDB֤Ѥˡ JTAG-ICE 
Ѥˡ򥵥ݡȤ롥GDB֤ Toppers ץȤΥۡڡ
ɲǽǤ롥JTAG-ICEȤƤϡԥޥԥ塼
PARTNER-JǤưǧƤ롥GDB֤Ѥˤϡ
Makefile ǡDBGENV  GDB_STUB ꤹʥǥեȡˡPARTNER-J
ѤˤϡDBGENV PARTNER_J ꤹ롥

MS7727CP01 ǤϡT-Monitor ѤˡJTAG-ICEѤˡ򥵥ݡ
롥ʤT-Monitor ȤäƥǥХå뤳ȤԲǽǤꡤñʤ
ȤѤ롥ŪˤϡͥS쥳ɤѴT-Monitor
ǥɤƼ¹Ԥ롥ͥ뽪λϡץåꥻåȤ롥


1.2 ݡȤ뵡ǽγ

SH3 ¸εǽȤơߥޥѹ(chg_ixxget_ixx)ȡ
ǽɾѥƥﻲȵǽ(vxget_tim)򥵥ݡȤƤ롥ߤζ
ߤȵ(dis_intena_int)ϥݡȤƤʤ


1.3 ¾ΥåȤؤΥݡƥ

СǤϡSH7708 Ѥƥ¸¸ߤʤ
顤ץå¸ΥɼΤ SH7708 򥵥ݡȤ롥Τᡤ
SH7708򥵥ݡȤ륷ƥ¸뤳ȤưפǤ롥ξ
ˤϡѥ륪ץ⤷ sys_defs.h  SH7708 Ф



1.4 ꥢݡ

ͥΥѤȤơSolution Engine ǤϥѡI/O¢
SCI(CN3) 19200bps ǻѤ롥MS7727CP01 ǤϡCPUܡɾΥꥢ
󥿥եͥ 115200bps ǻѤ롥ʤƤΥݡȤˤ
 ǡ: 8bit,Parity:none,Stop:1bitǤ롥


1.5 ǥ

ƥåȤϥǥåץåˤꥨǥѹ뤳Ȥǽ
롥˹碌ơͥΥǥϳƥƥ¸
ѹǽǤ롥ǥϰʲθĽꤹ롥

 ƥ¸ Makefile.config 
    ѥ륪ץ -ml  or -mb
    󥫥ץ     -ml  or -mb
    󥫥ץ     shlelf.ld or shelf.ld

 ƥ
    SIL_ENDIAN     SIL_ENDIAN_LITTLE or SIL_ENDIAN_BIG


SH3 ץå¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡSH3¸ʬ
ˤĤƲ⤹롥


2.1 ǡ

int unsigned intΥ 32ӥåȤǤ롥


2.2 ߴǽȳߥϥɥ

ͥγߤȤƤϡ NMI 롥äơCPUå֤
롼ǤϡNMI ʳγߤϤ٤ƶػߤƤ롥Ūˤϡ
IPM(Interrupt Priority Mask) 15 ꤵ롥ʤ顤ܡɾ
 NMI ϤʤåȤΤᡤGDB֤ۥȤΥޥ̿
뤿ΥꥢݡȤͥ٤ 15 ϿGDB  Ctrl-C 򲡤 
ߤꥹ֤椬ܤ褦ˤƤ롥εǽѤ뤿
ˤCPUå֤Ǥϡͥ٤ 14 ˤʤ褦ˤʤФʤʤ
ΤᡤCPUåꤵͥ٤ޥ MAX_IPM ǻꤷƤ롥
MAX_IPM cpu_config.h Ƥ롥GDB֤Ȥ 14 
GDB֤Ȥʤ 15 ꤷƤ롥

DEF_INH ǻꤹߥϥɥֹ(inhno)ϡSH7708/50 Ǥϡ
߻ݥ쥸(INTEVT)ꤵ륳ɤǤꡤSH7709A/09/29R/27 Ǥϡ
߻ݥ쥸2(INTEVT2)ꤵ륳ɤǤ롥ǡ
(INHNO) unsigned intƤ롥DEF_INH ǡINTEVT,INTEVT2
ɤȤͭǤʤͤ䡤ߤбʤֹꤷư
ݾڤʤ

SH3¸εǽȤơSR(Status Register) ߥޥӥå(I3
I0)ͤѹ뤿Υӥ chg_ipm ȡȤ뤿Υ
 get_ipm 򥵥ݡȤƤ롥ʤߥޥӥåȤͤ
ɽǡ IPM ϡunsigned intƤ롥

ΥӥϡƥȤ CPUå֤ξ
ˤΤ߸ƤӽФȤǤ롥chg_ipm ˤ IPM  0 ʳ(ʤ
餫γߤػߤƤ)ˤǤ⡤ǥѥå϶ػߤ
줺chg_ipm ˤѹ IPM ͤϡǥѥåΥ˰
Ѥ롥㤨С륿 IPM  1 ѹ塤餫γߤ
̤ΥڤؤȡڤؤäΥǤ IPM  1 ˤ
롥

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

SH3¸γߥޥѹȤΤΥӥλͤϼ
̤ꡥ


(1) chg_ipm                     ߥޥѹ

CAPI
        ER ercd = chg_ipm(IPM ipm);

ڥѥ᡼
        IPM     ipm             ꤹ٤ IPM 

ڥ꥿ѥ᡼
        ER      ercd            顼

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

ڵǽ

IPM(Interrupt Priority Mask) ipm ǻꤵ줿ͤꤹ롥ꤷ
ͤ 013ʤ14ʳξ硤E_PAR顼Ȥʤ롥IPM  1MAX_IPM -1 
ꤷǤ⡤ǥѥå϶ػߤʤޤꤷ IPM 
ͤϡǥѥåѤ롥

ʤΥӥѤơIPM  MAX_IPM (٤Ƥγߤػ)
ꤹ뤳ȤϤǤʤIPM  MAX_IPM ˤˤϡloc_cpu 
Ȥ٤Ǥ롥

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


(2) get_ipm                     ߥޥλ

CAPI
        ER ercd = get_ipm(IPM *p_ipm);

ڥѥ᡼
        ʤ

ڥ꥿ѥ᡼
        ER      ercd            顼
        IPM     ipm             ߤ IPM 

ڥ顼ɡ
        E_CTX           ƥȥ顼

ڵǽ

ߤ IPM(Interrupt Priority Mask)ͤɤ߽Фipm ֤

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


2.3 CPU㳰ǽCPU㳰ϥɥ

DEF_EXC ǻꤹߥϥɥֹ(excno)ϡSH3 Ǥ 㳰ݥ쥸
ꤵ㳰ֹɽΥǡ(EXCNO) unsigned int
Ƥ롥DEF_EXC ǡ㳰ֹȤͭǤʤͤ䡤
CPU㳰бʤֹꤷưݾڤʤ

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

offset
          ----------------------
         |         R7           |  <-- p_excinf
          ----------------------
  1      |         R6           |
          ----------------------
  2      |         R5           |
          ----------------------
  3      |         R4           |
          ----------------------
  4      |         R3           |
          ----------------------
  5      |         R2           |
          ----------------------
  6      |         R1           |
          ----------------------
  7      |         R0           |
          ----------------------
  8      |        MACH          |
          ----------------------
  9      |        MACL          |
          ----------------------
 10      |        GBR           |
          ----------------------
 11      |         SR           |
          ----------------------
 12      |         PR           |
          ----------------------
 13      |         PC           |
          ----------------------

ޤCPU㳰ȯPCͤȯ㳰װ˱CPUˤꥤ󥯥
Ȥ䡤줺˥ȥ饤礬롥ΤᡤPCͤѹ
ϡCPU㳰ϥɥǡp_excinf򸵤PCͤѹФ褤



2.4 ȥåץ⥸塼

SH3¸Υȥåץ⥸塼(start.S)ǤϡνԤ

(A) ץå⡼ɤνȥåݥ󥿤ν

ǽˡ٤ƤΥå̵塤å饤ȥ롼⡼
ɤꤷͭˤ롥ޤץåΥ⡼ɤø⡼ɡ쥸
Х1ꤷߥޥ MAX_IPM ꤹ롥


ˡåݥ(r15) STACKTOP ꤹ롥ǳߥ
ݥ󥿤ꤵ줿åΰϡͥ뵯ư󥿥ƥ
ѤΥåΰȤƻȤ롥STACKTOP ϡsys_config.h 
뤳ȤꤷƤ롥

(B) hardware_init_hook θƽФ

hardware_init_hook  0 Ǥʤˤϡhardware_init_hook ƤӽФ
hardware_init_hook ϡͥ뤬ư˹Ԥɬפ륿
Ȱ¸νԤѰդƤ롥hardware_init_hook ɤǤ
Ƥʤ硤󥫤ǤΥܥ 0 (󥫥
ץ˵Ҥ)

(C) bss dataν

bss򥼥ꥢ롥ޤdata롥

(D) software_init_hook θƽФ

software_init_hook  0 Ǥʤˤϡsoftware_init_hook ƤӽФ
software_init_hook ϡͥ뤬ư˹Ԥɬפ륽եȥ
Ķ(Ūˤϡ饤֥)¸νԤѰդƤ롥
software_init_hook ɤǤƤʤ硤󥫤ǤΥ
 0 (󥫥ץ˵Ҥ)

(E) ͥεư

kernel_start ʬͥư롥kernel_start ꥿
Ƥ뤳ȤꤷƤʤ


2.5 쥸Х

㳰ϥɥŪ˥쥸Х0ѤƤ롥쥸
Х1 r7 Τ㳰/ߤΥͥȲΥѤ˻ѤƤ롥
󥿥ƥȤȥƥȤȽ̤ϤΥ쥸ˤԤ
Ƥ롥ʤ֤ϥ쥸Х1R0R1Ѥ뤿ᡤΥ쥸
˽񤭹ǡϥ֤ƤӽФ˲롥


2.6 MACHMACLGBR

gccǤϡMACHMACLGBRϤ٤ƥå쥸Ȥư뤿ᡤ
ؿƤӽФǤͤݾڤʤΤᡤ㳰/ȯ
ϡå쥸Ǥѥ쥸R0R7Ʊͤ¸Ƥ롥
ޤǥѥåƤӽФϡؿƤӽФˤʤ뤿ᡤ
¸Ƥʤ֥ΥɤѤ⤳Υ롼˽ɬפ
롥


2.7 ߥϥɥ¹Իγߥޥ

SH3ϳȯߥޥӥå(I3I0)ϥץåˤäƼư
Ūꤵʤᡤեȥˤäꤹɬפ롥ߥ
ɥ¹ԻꤹߥޥӥåȤ򥫡ͥ˻ꤹ륵ӥ
Ȥdefine_int_plevel() ѰդƤ롥ΥӥλѤ
̤ꡥʤdefine_int_plvel()ˤߥޥӥåȤꤷʤ
гߥϥɥϥǥեȤ MAX_IPM -1 ΥޥǼ¹Ԥ롥

 define_int_plevel  ߥϥɥ¹ԻγߥޥӥåȤλ

CAPI
  void define_int_plevel(UINT dintno, UW plevel)

ڥѥ᡼
  dintno    ֹ
  plevel    ߥ٥

ڵǽ
  dintno ǻꤷֹγߥϥɥ餬¹Ԥγ
  ޥ plevel ˤ롥


ƥ¸εǽ

3.1 ƥ९åɥ饤

ƥ९åɥ饤Ф isig_tim ƤӽФϡsys_defs.h  
TIC_NUME  TIC_DENO Ƥ(ɸ 1ߥü)
ѹ뤳Ȥǡisig_tim ƤӽФѹ뤳ȤǤ롥
ޤ٤ 1äǤ뤿ᡤ1ñ̤üˤʤͤꤷ
ˤϡisig_tim θƽФ˸뤳Ȥˤʤ롥

3.2 ǽɾѥƥﻲȵǽ

SH3¸Ǥϡǽɾѥƥﻲȵǽ(vxget_tim)򥵥ݡȤ
롥ǽɾѥƥ٤ 1ñ̤Ǥ뤬ޤθ
ɤ߽Ф˰Ū˥ޤߤɬפ뤿ᡤvxget_tim 
Ƥ٤˥ƥ९åŤ٤뤳Ȥˤʤ롥ʤSYSUTIM 
UD(64ӥåȤ̵)Ƥ롥

3.3 ꥢ륤󥿥եɥ饤


Solution_Engine Υꥢ륤󥿥եɥ饤ФϡѡI/O¢
SCI(CN3) 򥵥ݡȤƤ롥ޤMS7727CP01Υꥢ륤󥿥ե
ɥ饤ФϡST16C2550CQ48 򥵥ݡȤƤ롥

3.4 ޥå

ΰȥǡΰϳƥƥ¸ Makefile.config ǡ
νͤϡsys_defs.h ꤹ롥

Solution Engine
  ΰ 0x0c003000  0x0c0fffff 1MBǡΰ 0x0c100000 
   3MB󥿥ƥѤΥåΰ 0x0c3fffff ˳
  ݤƤ롥0x0c000000  0x0c000fff ϡGDB֤ΥꥢȤʤ
  ƤꡤѤ뤳ȤǤʤ


MS7727CP01
  ΰ 0x0c003000  0x0c0fffff 1MBǡΰ 0x0c100000 
   3MB󥿥ƥѤΥåΰ 0x0c3fffff ˳
  ݤƤ롥0x0c000000  0x0c002fff ϡROM˥ΥꥢȤʤ
  ƤꡤѤ뤳ȤǤʤ


ȯĶι

ȯĶιˡˤĤƤϡGNUȯĶۥޥ˥奢򻲾ȤΤȡ


4.1 ȯĶΥС
ưǧġΥСϰʲ̤Ǥ롥

    BINUTILS : 2.10.1
    GCC-CORE : 2.95.3
    GDB      : 4.18
    NEWLIB   : 1.9.0

Ȥ߹碌⤷

    BINUTILS : 2.14
    GCC-CORE : 3.3
    GDB      : 5.3
    NEWLIB   : 1.11.0


¾

5.1 ǥ쥯ȥꡦե빽

SH3 åȰ¸γƥեγפϼ̤ꡥ

    config/sh3/
        Makefile.config Makefile SH3 ¸
        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        ٥Υץå롼
        start.S           ȥåץ⥸塼
        shelf.ld          ӥåǥѥ󥫥ץ
        shlelf.ld         ȥ륨ǥѥ󥫥ץ
        hw_timer.h        롼
        sh3.h             SH3 
        sh4.h             SH4 


    config/sh3/solution_engine
        Makefile.config   Makefile Solution Engine ¸
        ms7709ase01.h     MS7709ASE01 ϡɥ
        ms7729rse01.h     MS7729RSE01 ϡɥ
        ms7750se01.h      MS7750SE01  ϡɥ
        solution_engine.h Solution Engine
        sys_config.c      ƥ¸δؿ
        sys_config.h      ƥ¸ι
        sys_defs.h        ƥ¸Υץꥱ
        sys_support.S     ƥ¸Υ֥롼
        sys_rename.def    ͥ̾Υ͡
        sys_rename.h      ͥ̾Υ͡
        sys_unrename.h    ͥ̾Υ͡
        hw_serial.h       SIOɥ饤
        hw_serial.cfg     SIOɥ饤ФΥե졼ե


    config/sh3/ms7727cp01
        Makefile.config   Makefile MS7727CP01 ¸
        ms7727cp01.h      MS7727CP01 ϡɥ
        sys_config.c      ƥ¸δؿ
        sys_config.h      ƥ¸ι
        sys_defs.h        ƥ¸Υץꥱ
        sys_support.S     ƥ¸Υ֥롼
        sys_rename.def    ͥ̾Υ͡
        sys_rename.h      ͥ̾Υ͡
        sys_unrename.h    ͥ̾Υ͡
        hw_serial.h       SIOɥ饤
        hw_serial.cfg     SIOɥ饤ФΥե졼ե


    pdic/simple_sio/
        st16c2550.h       ST16C2550 
        st16c2550.c       ST16C2550 SIOɥ饤
        fdc37c935a.h      fdc37c935a 
        fdc37c935a.c      fdc37c935a SIOɥ饤



