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

             Release 1.4.1б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
 Copyright (C) 2002-2004 by Hokkaido Industrial Research Institute, JAPAN

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

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

 @(#) $Id: sh2.txt,v 1.5 2005/07/06 00:45:07 honda Exp $
------------------------------------------------------------------------


SH2 åȰ¸γ

ŪSH1.txtƱͤǤ롣

1.1 åȥƥȳȯĶ

SH2ץåΥåȥƥSH7145SH7615ܤʲΥܡ
ɤǤ롣

ʳ˥եץAP_SH2F_6A(CPU: SH7145)
ʳŻHSB7615IT(CPU: SH7615)

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

1.2 ݡȤ뵡ǽγ

SH1/2¸εǽȤơߥޥѹ(chg_ixxget_ixx)ȡ
ǽɾѥƥﻲȵǽ(vxget_tim)򥵥ݡȤƤ롣
ζػߤȵ(dis_intena_int)ϥݡȤƤʤ

1.3 DSP

DSP쥸ϹԤäƤʤ


1.4 GDB 

GDB֤ˤĤƤhttp://www.hokkaido-iri.go.jp档

1.5 ꥢݡ

ͥΥѤ˥ꥢݡȤ򣱤ĻѤ롣
ꥢݡȤ
8ӥå
ѥƥʤ
ȥåץӥåȡ1ӥå
ܡ졼ȡ
Ǥ롣


SH2ץå¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡSH2¸ʬ
ˤĤƲ⤹롣ӣȣǤƱǤ롣

2.1 ǡ

signed intunsigned intsize_tΥϡ32ӥåȤǤ
롥

2.2 ߴǽȳߥϥɥ

ͥγߤȤƤϡ NMI 롣äơCPUå֤
롼ǤϡNMI ʳγߤϤ٤ƶػߤƤ롣Ūˤϡ
IPM(Interrupt Priority Mask) 15 ꤵ롣

ŪGDB֤Ѥ뤳Ȥθơ˰ʲΤ褦
ʵҤޤࡣ
ܡɾ NMI ϤʤåȤΤᡢGDB Υ֤ۥȤ
ޥ̿뤿ΥꥢݡȤͥ٤ 15 ϿGDB 
Ctrl-C 򲡤 ߤꥹ֤椬ܤ褦ˤƤ롣ε
ǽѤ뤿ˤCPUå֤Ǥϡͥ٤ 14 ˤʤ褦ˤʤ
ФʤʤΤᡢCPUåꤵͥ٤ޥ MAX_IPM
ꤷƤ롣MAX_IPM cpu_config.h  #define Ƥ롣
ȤMAX_IPM14ˡ֤ȤʤMAX_IPM15ꤷ
롣

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

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

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

SH1/2¸γߥޥѹȤΤΥӥλͤϼ
ꡣ

(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 ǻꤵ줿ͤꤹ롣ꤷ
ͤ 014ʤ013ʳξ硢E_PAR顼Ȥʤ롣IPM 0ʳ
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)ϡSH2 Ǥ ٥ơ֥
Υ٥ֹɽΥǡ(EXCNO) unsigned intƤ
롣DEF_EXC ǡ٥ֹȤͭǤʤͤ䡢CPU㳰бʤ
ꤷưݾڤʤ

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


      ----------------------
     |         PR           |
      ----------------------
     |         R7           |
      ----------------------
     |         R6           |
      ----------------------
     |         R5           |
      ----------------------
     |         R4           |
      ----------------------
     |         R3           |
      ----------------------
     |         R2           |
      ----------------------
     |         R1           |
      ----------------------
     |         R0           |
      ----------------------
     |         PC           |
      ----------------------
     |         SR           |  <-- p_excinf
      ----------------------

     PR:Procedure Register
     SR:Status Register
     PC:Program Counter

ޤCPU㳰ȯPCͤϥ󥯥Ȥ롣ΤᡢCPU㳰
ɥ餫ԤȡCPU㳰ȯ̿μ̿ᤫ¹ԤƳ
롣



2.4 ȥåץ⥸塼

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

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

ߥޥ MAX_IPM ꤹ롣

ˡåݥ(r15) STACKTOP ꤹ롣ǳߥ
ݥ󥿤ꤵ줿åΰϡͥ뵯ư󥿥ƥ
ѤΥåΰȤƻȤ롣STACKTOP ϡuser_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 ȯΥå̤ˤĤ

ʲͳˤꡢƥåϥȤѤʬ˲äƺ
240Х;ʬѰդɬפ롣

JSPͥǤϥå¾˳ߥåѰդ󥿥
ƥȤϳߥåǼ¹Ԥ롣
SH1/2㳰/߼ջ˳߶ػߤˤʤ뵡ϡɥѰդ
ʤΤᡢߤǥեȥˤäƳ߶ػߤˤ
ɬפ롣Ǥϳ߶ػߤ˰ܹԤ뤿ˡʳߵĤξ
ǡ˥år0,r1򤹤롣SR(Status Register)PC(Program
Counter)ϳ߼դ˥ϡɥưŪԤ
ΤȤ¿ųߤȯȳߥåڤؤƱͤ
ե졼बå롣SH2ϳߥ٥뤬15ʤΤǡ
ǰΥߥ󥰤ǳߤȯȡå240ХȾ񤵤롣
4Хȡ4쥸15åȡ

㳰/ߤΥͥȲΥѤ˥ͥѿintnestѰ
󥿥ƥȤȥƥȤȽ̤Ϥѿˤ
ԤäƤ롣


2.6 MACHMACL (¥쥸
      MACH:Multiply and accumulate high register
      MACL:Multiply and accumulate low register

MACHMACLˤĤƤϡgcc-mhitachiץĤȡؿMACH
MACLѤ硢å¸ƤѤؿȴȸ
ᡢߤǤ¸ƤʤޤǥѥåƤӽФ
ǥѥåϡؿƤӽФˤʤ뤿ᡢθƤӽФˤޤ
ơΥ쥸ȤȤϤʤ¸ƤʤΤᥢ
֥ΥɤѤ⤳Υ롼˽ɬפ롣
ʤߤΥǥѥå(ưŪǥѥå)Ǥ¸Ƥ롣


2.7 GBR (Global Base Register)

gccGBRѤʤᡢߥϥɥǤ¸Ƥʤ
ߥϥɥGBRȤϥץꥱ¦GBR/¸Ԥ
ɬפ롣ޤ嵭MACHMACLƱͳˤꡢǥѥå
ƤӽФˤ¸ƤʤʤߤΥǥѥå(ư
Ūǥѥå)Ǥ¸Ƥ롣



ƥ¸εǽ

3.1 ƥ९åɥ饤

ƥ९åɥ饤Ф isig_tim ƤӽФϡuser_config.h 
TIC_NUME  TIC_DENO Ƥ(ǥեȤǤ 1ߥü)
ѹ뤳Ȥǡisig_tim ƤӽФѹ뤳ȤǤ
롣
ޤ٤ 1äǤ뤿ᡢ1ñ̤üˤʤͤ
ˤϡisig_tim θƽФ˸뤳Ȥˤʤ롣
ǥեȤǤSH2¢CMT/FRTѤƤ롣ޥϥɥͥ٤
user_config.hǥޥTIMER_INTLVLȤƤ롣ʥǥեȤǤ4

3.2 ǽɾѥƥﻲȵǽ

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

3.3 ꥢ륤󥿥եɥ饤

ꥢ륤󥿥եɥ饤ФϡSH2¢SCISerial Communication
Interface/SCIFFIFO¢Serial CommunicationInterfaceˤ򥵥ݡȤ
ƤꡢͥΥѤ˻ѤƤ롣ꥢߥϥɥ
ͥ٤ӥ顼߶user_config.hǥޥSCI_INTLVL/SCI
F_INTLVLȤƤ롣ʥǥեȤǤ6


3.4 ޥå

()ŻHSB7615IT(CPU: SH7615)
      0x0000,0000 - 0x001f,ffff  ΰ(2MB)
      0x0400,0000 -              ǡΰ
                  - 0x040f,ffff  󥿥ƥѤΥåΰ
ǡΰ󥿥ƥѥåΰ򤢤碌1MB¢
̤ѡ

()եץAP-SH2F-6A(CPU: SH7145)
      0x0000,0000 - 0x0003,ffff  ΰ(256KB)
      0x0040,0000 -              ǡΰ(1MB)
                  - 0x004f,ffff  դ꽪λ
      0xffff,e000 -              ǡΰ(8KB)
                  - 0xffff,ffff  ¢꽪λ


3.5 ץץμ¹

()ŻHSB7615SE(CPU: SH7615)
餫ROM˽񤭹ޤƤ˥ư롣
Lޥɤjsp.srec˥ɤ롣
G  04000400ǥץץư롣
ץץΥåSCIF1Ϥ롣
¾ΥܡɤʤɤˤơROM¹Ԥ硢shelf.ldMakefile.config
ɥ쥹λա

()եץAP-SH2F-6A(CPU: SH7145)
jsp.srec°Υ饤ǽ񤭹Ǽ¹Ԥ롣
ץץΥåSCI1Ϥ롣


ȯĶι

ȯĶιˡˤĤƤϡGNUȯĶۥޥ˥奢򻲾Ȥ뤳ȡ
ȯˤLinux(Red Hat Linux release 7.2 Kernel 2.4.7-10ˤѤ
ưǧġΥСϰʲ̤Ǥ롥
    BINUTILS : 2.14
    GCC-CORE : 2.95.3

configure Υץ--target=sh-hitachi-elfǤ롣
ޤWindowsCygwinѤƳȯϡbinutilsconfigureΥ
ץ --disable-nls ꤹ뤳ȡ


»

5.1 ƥ।󥿡ե쥤sil_dly_nse()ˤĤ

¬ϤƤʤ


5.2 ¹Ԥ٤ʤγԤˤĤ

SH1Ʊ
ǥѥåνиǼ¹Ԥ٤ʤ(schedtsk==NULL˾ϡ
sleep̿ˤäƥץåϥ⡼ɤڤؤƳԤ򤷤
롣cpu_sapport.Sdispatcher_2ն򻲾ȡ

ߵĸsleep̿¹ԤƤ뤿ᡢߵ̿μ¹˳
׵᤬äƤʤ뤤ϳߵľ塢sleep̿¹˳
׵᤬äˡߵ̿μ¹Ԥȶ˳ߤդ졢
sleepޤޤˤʤäƤޤ
reqflgΥå˿ʤޤʤ

ϡߤεĤsleep ֤ؤΰܹԤȥߥå˼¹ԤǤʤ
Ȥ˵롣SH3ʹߤǤIPMȤ̤SRBLӥåȤȤäƳߤζػ
/Ĥ椹뤳ȤˤꡢǤ뤬SH1/2ǤIPMꤹ
ʳ˳ߤػߡĤˡʤߵġʳԤIPM
ˤsleep򥢥ȥߥå˹Ԥˡʤ
SH1/2¸Ǥϡ߼ջ˥åѤޤ줿Ϥ¿ų
ߤνиǥåϤ嵭sleep̿˳
Ϥ1̿ʬ2Хȡ˿ʤ뤳Ȥˤꤳ򤷤Ƥ롣
ˡǤ¿ųߤνи˿̿ΥСإåɤ롣
OMIT_POWER_CONTROLޥ뤳Ȥsleep̿nop̿᤬
졢¿ųߤνиǤΥå롼Ͼά롣ʤξ
Ϥˤʤ롣

5.4.2 ߡCPU㳰νˤĤ

SH1Ʊ
SH1/2Ǥϳ߼ľ˳߶ػߤˤʤäƤʤᡢA
̤γBǽ롣ʤϥϡɥΥƥ
򤱤褦ʤ˳ߥϥɥBǥڤؤ򵯤褦
ʥӥƤ֤ȳBνи̤Υ˥ǥѥå
Ƥޤ2鸵ΥäƤޤǡAν٤
ޤ
ޤA٥ȥꥬ2󸡽ФƤޤ⤢롣
ɤᡢåѤǤIPMtask_intmaskͤ
Ӥơ˳ߤʤäåƤ롣
cpu_support.S_ret_intȡ

SH1/2ǤCPU㳰դƤߥޥѲʤᡢCPU㳰
˳ߤä硢嵭Τ褦ȽˡǤнǤʤ
ΤᡢߤνиǥåѤޤ줿ϤCPU㳰
ϤӤơ褬CPU㳰ݤȽ̽򥪥
ѰդƤ롣νCPU㳰Ͽơ֥򥵡
뤿ᡢ߶ػ߶֤Ĺʤ롣Ƚ̽ͭˤ
ϥޥSUPPORT_CPU_EXC_ENTRY_CHECK롣
ƥȤȯCPU㳰νϡ󤷤ˤƤߤ
Ϥʤȹͤ嵭νϥǥեȤǤ̵ˤƤ롣ʥ
ƥȤǤCPU㳰ɤΥȯ뤫ϡߤΤ褦˥
ߥ󥰤ˤΤǤϤʤɬŪʤΤǤ뤿ᡢCPU㳰ͥ
̤⤽Υ˽सΤȤȽǤ

嵭Υơ֥ϥǥեȤCPU㳰6װϿǤ褦ˤƤ뤬
ץꥱǥȥå̿Ѥͥǥϥɥ󥰤
user_config.hNUM_EXCͤŬѹ롣


5.4 gcc3.xбˤĤ

SH2Ǥgcc3.xϤưǧϤƤʤ


¾

6.1 ǥ쥯ȥꡦե빽

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

    config/sh2/
	Makefile.config	MakefileSH2¸
	cpu_config.c	ץå¸δؿ
	cpu_config.h	ץå¸ι
	cpu_context.h	ƥ
	cpu_defs.h	ץå¸Υץꥱ
	cpu_insn.h	٥Υץå롼
	cpu_rename.def	ͥ̾Υ͡
	cpu_rename.h	ͥ̾Υ͡
	cpu_support.S	ץå¸Υ֥롼
	cpu_unrename.h	ͥ̾Υ͡
	makeoffset.c	offset.h ݡȥץ
	sh7145.h		SH7145
	sh7145cmt.h		SH7145¢cmtѥޡɥ饤
	sh7145sci.c		SH7145¢sciѥꥢɥ饤
	sh7145sci.h		SH7145¢sciѥꥢɥ饤
	sh7615.h		SH7615
	sh7615frt.h		SH7615¢frtѥޡɥ饤
	sh7615scif.c	SH7615¢scifѥꥢɥ饤
	sh7615scif.h	SH7615¢scifѥꥢɥ饤
	start.S		ȥåץ⥸塼
	tool_config.h	ȯĶ¸ιGNUȯĶѡ
	tool_defs.h	ȯĶ¸ΥץꥱGNUȯĶѡ



    config/sh2/hsb7616it/
	()ŻHSB7615IT(CPU: SH7615)

	Makefile.config	MakefileHSB7615ITܡɰ¸
	hsb7616it.h		HSB7615ITΥϡɥ
	hw_serial.cfg	SIOɥ饤ФΥե졼ե
	hw_serial.h		SIOɥ饤
	hw_timer.h		롼
	sh2.h			SH2
	shelf.ld		󥫥ץ
	shelf.stub.ld	󥫥ץ(stub)
	sys_config.c	ƥ¸δؿ
	sys_config.h	ƥ¸ι
	user_config.h	桼
	sys_defs.h  	ƥ¸Υץꥱ
	sys_rename.def	ͥ̾Υ͡
	sys_rename.h	ͥ̾Υ͡
	sys_support.S	ƥ¸Υ֥롼
	sys_unrename.h	ͥ̾Υ͡


    config/sh2/apsh2f6a/
	)եץAP-SH2F-6A(CPU: SH7145)

	Makefile.config	MakefileAP-SH2F-6Aܡɰ¸
	apsh2f6a.h		AP-SH2F-6AΥϡɥ
	hw_serial.cfg	SIOɥ饤ФΥե졼ե
	hw_serial.h		SIOɥ饤
	hw_timer.h		롼
	sh2.h			SH2
	shelf.ld		󥫥ץ
	shelf.stub.ld	󥫥ץ(stub)
	sys_config.c	ƥ¸δؿ
	sys_config.h	ƥ¸ι
	user_config.h	桼
	sys_defs.h  	ƥ¸Υץꥱ
	sys_rename.def	ͥ̾Υ͡
	sys_rename.h	ͥ̾Υ͡
	sys_support.S	ƥ¸Υ֥롼
	sys_unrename.h	ͥ̾Υ͡


6.2 桼

SH1/2¸Ǥϡ桼ܤ򥷥ƥ¸ΣĤΥե
Makefile.configuser_config.hˤޤȤƤꡢ桼ϥͥ
ΩʤƤ⡢١ѹǽˤƤ롣


_MACRO_ONLY
ޥΤߤǤꡢ֥饽饤󥯥롼ɤƤ
֥륨顼ˤʤʤʬФ뤿Υޥ

SUPPORT_CHG_IPM
2.2Ỳ

OMIT_POWER_CONTROL
5.2Ỳ

GDB_STUB
GDB stubѡ

