
	     TOPPERS/JSPJ[l [UY}jA 
    		    iSH2 ^[Qbgˑj

             iRelease 1.4.1ΉC2004j

------------------------------------------------------------------------
 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

 L쌠҂́Cȉ (1)`(4) ̏CFree Software Foundation 
 ɂČ\Ă GNU General Public License  Version 2 ɋL
 qĂ𖞂ꍇɌC{\tgEFAi{\tgEFA
 ς̂܂ށDȉjgpEEρEĔzziȉC
 pƌĂԁj邱Ƃ𖳏ŋD
 (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́CL̒
     \C̗pщL̖ۏ؋K肪Ĉ܂܂̌`Ń\[
     XR[hɊ܂܂Ă邱ƁD
 (2) {\tgEFACCu`ȂǁC̃\tgEFAJɎg
     pł`ōĔzzꍇɂ́CĔzzɔhLgip
     ҃}jAȂǁjɁCL̒쌠\C̗pщL
     ̖ۏ؋Kfڂ邱ƁD
 (3) {\tgEFAC@ɑgݍނȂǁC̃\tgEFAJɎg
     płȂ`ōĔzzꍇɂ́Ĉꂩ̏𖞂
     ƁD
   (a) ĔzzɔhLgip҃}jAȂǁjɁCL̒
       쌠\C̗pщL̖ۏ؋Kfڂ邱ƁD
   (b) Ĕzž`ԂCʂɒ߂@ɂāCTOPPERSvWFNg
       񍐂邱ƁD
 (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
     QCL쌠҂TOPPERSvWFNgƐӂ邱ƁD

 {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
 TOPPERSvWFNǵC{\tgEFAɊւāC̓Kp\
 ܂߂āCȂۏ؂sȂD܂C{\tgEFA̗pɂ蒼
 ړI܂͊ԐړIɐȂ鑹QɊւĂC̐ӔC𕉂ȂD

 @(#) $Id: sh2.txt,v 1.1 2008/06/17 00:04:40 suikan Exp $
------------------------------------------------------------------------


PDSH2 ^[Qbgˑ̊Tv

{ISH1.txtƓlłB

1.1 ^[QbgVXeƊJ

SH2vZbT̃^[QbgVXeSH7145ASH7615𓋍ڂȉ̃{[
hłB

EijAt@vWFNgAP_SH2F_6A(CPU: SH7145)
EijkldqHSB7615IT(CPU: SH7615)

Jɂ́AGCC Ȃǂ GNUJpAIuWFNgt@CtH[
}bg ELF WƂB

1.2 T|[g@\̊Tv

SH1/2ˑ̋@\ƂāA݃}XN̕ύXEQ(chg_ixxAget_ixx)ƁA
\]pVXeQƋ@\(vxget_tim)T|[gĂB
̋֎~Ƌ(dis_intAena_int)̓T|[gĂȂB

1.3 DSP

DSPWX^̑Ҕ͍sĂȂB


1.4 GDB X^u

GDBX^uɂĂhttp://www.hokkaido-iri.go.jpzzB

1.5 VA|[g

J[l̃Oo͗pɃVA|[gPgpB
VA|[g̐ݒ
@E8rbg
@EpeBȂ
@EXgbvrbgF1rbg
@E{[[gF
łB


QDSH2vZbTˑ̋@\

̐߂ł́AJ[lуVXeT[rX̋@\̒ŁASH2ˑ̕
ɂĉBrgPłƓłB

2.1 f[^^

signed int^Cunsigned int^Csize_t^̃TCÝC32rbgł
D

2.2 ݊Ǘ@\Ɗ݃nh

J[lǗO݂̊ƂẮA NMI BāACPUbNԂ⏉
[`ł́ANMI ȊOׂ݂̊͂ċ֎~ĂB̓Iɂ́A
IPM(Interrupt Priority Mask) 15 ɐݒ肳B

IGDBX^u𗘗p邱ƂlāA\[XR[hɈȉ̂悤
ȋLq܂ށB
{[h NMI ͂Ȃ^[Qbĝ߁AGDB ̃X^uzXg
}VƒʐM邽߂̃VA|[g̗Dx 15 œo^AGDB 
Ctrl-C  荞݂X^uɐ䂪ڂ悤ɂĂB̋@
\gp邽߂ɂCPUbNԂł́ADx 14 ɂȂ悤ɂȂ
΂ȂȂB̂߁ACPUbNŐݒ肳Dx}N MAX_IPM
w肵ĂBMAX_IPM cpu_config.h ̒ #define ĂBX^u
gꍇMAX_IPM14ɁAX^ugȂꍇMAX_IPM15ɐݒ肵
B

SH1/2ˑ̋@\ƂāASR(Status Register) 荞݃}XNrbg(I3`
I0)̒lύX邽߂̃T[rXR[ chg_ipm ƁAQƂ邽߂̃T[r
XR[ get_ipm T|[gĂBȂA荞݃}XNrbg̒l
\f[^^ IPM ́Aunsigned int^ɒ`ĂB

̃T[rXR[́A^XNReLXg CPUbNԂ̏ꍇ
ɂ̂݌ĂяoƂłBchg_ipm ɂ IPM  0 ȊO(Ȃ킿A
炩݂̊֎~Ă)ɂꍇłAfBXpb`͋֎~
ꂸAchg_ipm ɂύX IPM ̒ĺAfBXpb`̃^XNɈ
pBႦ΁A^XN IPM  1 ɕύXA炩݂̊
ʂ̃^XNɐ؂ւƁA؂ւ̃^XNłIPM1ɂȂB

chg_ipm T|[g邽߂ɁA݃nh̏oȂǂɃI[owb
h𐶂ĂBŁASUPPORT_CHG_IPM Ƃ}NɂÃT[
rXR[T|[g邩ǂ؂ւ悤ɂĂB
SUPPORT_CHG_IPM ́Auser_config.h ̒ #define ĂB

SH1/2ˑ̊݃}XN̕ύXEQƂ̂߂̃T[rXR[̎dl͎̒
B

(1) chg_ipm			݃}XN̕ύX

yCAPIz
	ER ercd = chg_ipm(IPM ipm);

yp[^z
	IPM	ipm		ݒ肷ׂ IPM ̒l

y^[p[^z
	ER	ercd		G[R[h

yG[R[hz
	E_CTX		ReLXgG[
	E_PAR		p[^G[(ipm s)

y@\z

IPM(Interrupt Priority Mask) ipm Ŏw肳ꂽlɐݒ肷Bw肵
l 0`14Ȃ0`13ȊȌꍇAE_PARG[ƂȂBIPM 0ȊO
i1`MAX_IPM-1jɐݒ肵ꍇłAfBXpb`͋֎~ȂB܂A
ݒ肵 IPM ̒ĺAfBXpb`֎~pB

ȂÃT[rXR[pāAIPM  MAX_IPM (ׂĂ݂̊֎~)
ɐݒ肷邱Ƃ͂łȂBIPM  MAX_IPM ɂꍇɂ́Aloc_cpu 
gׂłB

̃T[rXR[́A^XNReLXg CPUbNԂ̎̂݌
яoƂłB^XNReLXg CPUbNԂŌĂяo
ɂ́AE_CTXG[ƂȂB

(2) get_ipm			݃}XN̎Q

yCAPIz
	ER ercd = get_ipm(IPM *p_ipm);

yp[^z
	Ȃ

y^[p[^z
	ER	ercd		G[R[h
	IPM	ipm		݂ IPM ̒l

yG[R[hz
	E_CTX		ReLXgG[

y@\z

݂ IPM(Interrupt Priority Mask)̒lǂݏoAipm ɕԂB

̃T[rXR[́A^XNReLXg CPUbNԂ̎̂݌
яoƂłB^XNReLXg CPUbNԂŌĂяo
ɂ́AE_CTXG[ƂȂB


2.3 CPUOǗ@\CPUOnh

DEF_EXC Ŏw肷銄݃nhԍ(excno)́ASH2 ł xN^e[u
̃xN^ԍ\Ãf[^^(EXCNO) unsigned int^ɒ`Ă
BDEF_EXC ŁAxN^ԍƂėLłȂlACPUOɑΉȂ
w肵ꍇ͕̓ۏ؂ȂB

CPUOnhɓnp_excinf́ACPUÕReLXgۑ
X^bNւ̃|C^nBX^bN̍\ȉɎB


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

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

܂ACPUOPC̒l̓CNgB̂߁ACPUOn
h畜AsƁACPUO߂̖̎߂sĊJ
B



2.4 X^[gAbvW[

SH2ˑ̃X^[gAbvW[(start.S)ł́ȀsB

(A) vZbT[h̏ƃX^bN|C^̏

荞݃}XN MAX_IPM ɐݒ肷B

ɁAX^bN|C^(r15) STACKTOP ɐݒ肷BŊ݃X^b
N|C^ɐݒ肳ꂽX^bN̈́AJ[lN͔^XNReL
Xgp̃X^bN̈ƂĎgBSTACKTOP ́Auser_config.h Œ`
邱Ƃz肵ĂB

(B) hardware_init_hook ̌ďo

hardware_init_hook  0 łȂꍇɂ́Ahardware_init_hook ĂяoB
hardware_init_hook ́AJ[lNOɍsKv^[Qb
gˑ̏s߂ɗpӂĂBhardware_init_hook ǂł
`ĂȂꍇAJł̃V{ 0 ɒ`(JXN
vgɋLq)B

(C) bssZNV dataZNV̏

bssZNV[NAB܂AdataZNVB

(D) software_init_hook ̌ďo

software_init_hook  0 łȂꍇɂ́Asoftware_init_hook ĂяoB
software_init_hook ́AJ[lNOɍsKv\tgEF
A(̓Iɂ́ACu)ˑ̏s߂ɗpӂĂB
software_init_hook ǂł`ĂȂꍇAJł̃V{
 0 ɒ`(JXNvgɋLq)B

(E) J[l̋N

kernel_start ֕򂵁AJ[lNBkernel_start 烊^[
Ă邱Ƃ͑z肵ĂȂB


2.5 ݔ̃X^bNʂɂ

ȉ̗RɂAe^XNX^bN̓^XNggp镪ɉčő
240oCg]ɗpӂKvB

JSPJ[lł̓^XNX^bN̑Ɋ݃X^bNpӂA^XNR
eLXg͊݃X^bNŎsB
SH1/2͗O/ݎtɊ݋֎~ɂȂ@\n[hEFAŗpӂ
ȂB̂߁A݂̓Ń\tgEFAɂĊ݋֎~ɂ
KvBł͊݋֎~Ɉڍs邽߂Ɂi݋̏
ŁjX^bNr0,r1ҔBiSR(Status Register)PC(Program
Counter)͊ݎtɃn[hEFAIɑҔsBj
̂ƂAd݂Ɗ荞݃X^bNɐ؂ւOɓl
t[X^bNɐBSH2͊荞݃x15îŁA
ň̃^C~OŊ݂ƁAX^bN240oCgB
i4oCg~4WX^~15Zbgj

O/荞݂̃lXg񐔂̃JEgpɃJ[lŕϐintnestp
A^XNReLXgƃ^XNReLXg̔ʂ͂̕ϐɂ
sĂB


2.6 MACHMACL (ϘaWX^j
      MACH:Multiply and accumulate high register
      MACL:Multiply and accumulate low register

MACHMACLɂẮAgcc-mhitachiIvVƁA֐MACH
MACLgpꍇAX^bNɕۑĂgpA֐𔲂ƌɖ
߁A݂ł͕ۑĂȂB܂AfBXpb`ĂяoA
fBXpb`ꍇ́A֐ĂяoɂȂ邽߁ǍĂяoɂ܂
āÃWX^gƂ͂ȂߕۑĂȂB̂߃AZ
ũR[hgpꍇ̃[ɏ]KvB
ȂÃ݂fBXpb`(󓮓IfBXpb`)ł͕ۑĂB


2.7 GBR (Global Base Register)

gccGBRgpȂ߁A݃nh̓ł͕ۑĂȂB
݃nhGBRgꍇ̓AvP[VGBȒҔ/ۑs
KvB܂ALMACHMACLƓRɂAfBXpb`
ĂяoꍇɂۑĂȂBȂÃ݂fBXpb`(
IfBXpb`)ł͕ۑĂB



RDVXeˑ̋@\

3.1 VXeNbNhCo

VXeNbNhCo isig_tim ĂяóAuser_config.h 
TIC_NUME  TIC_DENO Œ`Ă(ftHgł 1~b)B
̒`ύX邱ƂŁAisig_tim ĂяoύX邱Ƃł
B
A^C}̐x 1ʕbł邽߁A1ʕbPʂŒ[ɂȂlݒ
ꍇɂ́Aisig_tim ̌ďoɌ덷邱ƂɂȂB
ftHgłSH2̓CMT/FRTgpĂB^C}nh̗Dx
user_config.hŃ}NTIMER_INTLVLƂĒ`ĂBiftHgł4j

3.2 \]pVXeQƋ@\

SH1/2ˑł́A\]pVXeQƋ@\(vxget_tim)T|[g
B\]pVXe̐x 1ʕbPʂł邪A^C}̌ݒl
ǂݏo߂ɈꎞIɃ^C}~Kv邽߁Avxget_tim 
ĂԓxɃVXeNbNÂx邱ƂɂȂBȂASYSUTIM^
UD^(64rbg̕^)ɒ`ĂB

3.3 VAC^tF[XhCo

VAC^tF[XhCóASH2SCIiSerial Communication
Interfacej/SCIFiFIFOSerial CommunicationInterfacejT|[g
ĂAJ[l̃Oo͗pɎgpĂBVA݃nh
Dx͑MуG[݋user_config.hŃ}NSCI_INTLVL/SCI
F_INTLVLƂĒ`ĂBiftHgł6j


3.4 }bv

E()kldqHSB7615IT(CPU: SH7615)
      0x0000,0000 - 0x001f,ffff  R[ḧ(2MB)
      0x0400,0000 -              f[^̈
                  - 0x040f,ffff  ^XNReLXgp̃X^bN̈
f[^̈Ɣ^XNReLXgpX^bN̈킹1MBB
͖gpB

E()At@vWFNgAP-SH2F-6A(CPU: SH7145)
      0x0000,0000 - 0x0003,ffff  R[ḧ(256KB)
      0x0040,0000 -              f[^̈(1MB)
                  - 0x004f,ffff  OtI
      0xffff,e000 -              f[^̈(8KB)
                  - 0xffff,ffff  I


3.5 TvvO̎s

E()kldqHSB7615SE(CPU: SH7615)
炩ROMɏ܂Ă郂j^NB
LR}hjsp.srecɃ[hB
G  04000400ŃTvvO𓮍삳B
TvvÕbZ[WSCIF1o͂B
̃{[hȂǂɂāAROMsꍇAshelf.ldMakefile.config
AhX̎wɒӁB

E()At@vWFNgAP-SH2F-6A(CPU: SH7145)
jsp.srect̃C^[ŏŎsB
TvvÕbZ[WSCI1o͂B


SDJ̍\z

J̍\z@ɂẮAGNUJ\z}jAQƂ邱ƁB
JɂLinux(Red Hat Linux release 7.2 Kernel 2.4.7-10jpB
mFc[̃o[W͈ȉ̒ʂłD
    BINUTILS : 2.14
    GCC-CORE : 2.95.3

configure ̃IvV--target=sh-hitachi-elfłB
܂AWindowsCygwinpĊJꍇ́AbinutilsconfigurẽI
vV --disable-nls w肷邱ƁB


TD

5.1 VXeC^[tF[XCsil_dly_nse()ɂ

͂ĂȂB


5.2 sׂ^XNȂꍇ̊ݑ҂ɂ
@@
SH1ƓB
fBXpb`̏oŎsׂ^XNȂ(schedtsk==NULLjꍇ́A
sleep߂ɂăvZbTȓd̓[hɐ؂ւĊݑ҂
Bicpu_sapport.Sdispatcher_2t߂QƁj

݋sleep߂sĂ邽߁A݋߂̎sOɊ
ݗvĂꍇi邢͊݋AsleepߎsOɊ
ݗvꍇjA݋߂̎sƋɊ݂󂯕tA
̕Asleep܂܂ɂȂĂ܂B
ireqflg̃`FbNɐi܂ȂBj

̖́C݂̋sleep Ԃւ̈ڍsAg~bNɎsłȂ
ƂɋNBSH3ȍ~łIPMƂ͕ʂSRBLrbggĊ݂̋֎~
/𐧌䂷邱ƂɂA̖ł邪ASH1/2łIPMݒ肷
ȊOɊ݂֎~^@ȂA݋iݑ҂IPM
jsleepAg~bNɍs@ȂB
SH1/2ˑł́AݎtɃX^bNɐς܂ꂽ߂Ԓn𑽏d
݂̏oŃ`FbNA߂ԒnLsleep߂ɊYꍇ͖߂
Ԓn1ߕi2oCgji߂邱Ƃɂ肱̖ĂB
A̕@ł͑d݂̏oɐ߂̃I[o[wbhB
OMIT_POWER_CONTROL}N`邱Ƃsleep߂̑nop߂}
Ad݂̏oł̃`FbN[`͏ȗBȉꍇ
d͂̓_ŕsɂȂBj

5.4.2 ݁^CPUȌoɂ

SH1ƓB
SH1/2ł͊ݎtɊ݋֎~ɂȂĂȂ߁AA̓
ɕʂ̊B\Bi̓n[hEFÃA[LeN
`悤ȂBj݃nhBŃ^XN؂ւN悤
ȃT[rXR[ĂԂƊB̏oŕʂ̃^XNɃfBXpb`
Ă܂A^XN2猳̃^XNɖ߂Ă܂ŁAȀx
܂B
܂AAxgK2񌟏oĂ܂B
h߁AX^bNɐςł߂IPMtask_intmask̒l
rāAɊ݂Ȃ`FbNĂB
icpu_support.S_ret_intQƁj

SH1/2łCPUO󂯕tĂ݃}XN͕ωȂ߁ACPUO̓
Ɋ݂ꍇAL̂悤Ȕʕ@łΏłȂB
̂߁Ȁ݂oŃX^bNɐς܂ꂽ߂ԒnCPUO̓
̔ԒnrāA߂悪CPUO̓ۂ𔻕ʏIv
VŗpӂĂB̏CPUOo^e[uT[`
邽߁A荞݋֎~ԂȂB̔ʏLɂ
ꍇ̓}NSUPPORT_CPU_EXC_ENTRY_CHECK`B
^XNReLXgŔCPUȌ́A񂵂ɂĂ݂
ǖ͂ȂƍlAL̏̓ftHgł͖ɂĂBi^XN
ReLXgłCPUOǂ̃^XNŔ邩́Â݂悤Ƀ^
C~Oɂ̂ł͂ȂKRIȂ̂ł邽߁ACPUO̗D揇
ʂ̃^XNɏ̂ƂĔfBj

L̃e[u̓ftHgCPUO6vo^ł悤ɂĂ邪A
AvP[VŃgbv߂gpAJ[lŃnhOꍇ
user_config.hNUM_EXC̒lKXύXB


5.4 gcc3.xΉɂ

SH2łgcc3.xnœmF͂ĂȂB


UD̑

6.1 fBNgEt@C\

SH2 ^[Qbgˑ̊et@C̊Tv͎̒ʂB

    config/sh2/
	Makefile.config	MakefileSH2ˑ`
	cpu_config.c	vZbTˑ̊֐
	cpu_config.h	vZbTˑ̍\`
	cpu_context.h	ReLXg
	cpu_defs.h	vZbTˑ̃AvP[Vp`
	cpu_insn.h	჌x̃vZbT샋[`
	cpu_rename.def	J[l̓ʖ̃l[`
	cpu_rename.h	J[l̓ʖ̃l[
	cpu_support.S	vZbTˑ̃Tu[`
	cpu_unrename.h	J[l̓ʖ̃l[
	makeoffset.c	offset.h T|[gvO
	sh7145.h		SH7145̒`
	sh7145cmt.h		SH7145cmtp^C}[hCo
	sh7145sci.c		SH7145scipVAhCo
	sh7145sci.h		SH7145scipVAhCo
	sh7615.h		SH7615̒`
	sh7615frt.h		SH7615frtp^C}[hCo
	sh7615scif.c	SH7615scifpVAhCo
	sh7615scif.h	SH7615scifpVAhCo
	start.S		X^[gAbvW[
	tool_config.h	Jˑ̍\`iGNUJpj
	tool_defs.h	Jˑ̃AvP[Vp`iGNUJpj



    config/sh2/hsb7616it/
	()kldqHSB7615IT(CPU: SH7615)

	Makefile.config	MakefileHSB7615IT{[hˑ`
	hsb7616it.h		HSB7615IT̃n[hEFA`
	hw_serial.cfg	SIOhCõRtBM[Vt@C
	hw_serial.h		SIOhCo
	hw_timer.h		^C}샋[`
	sh2.h			SH2̒`
	shelf.ld		JXNvg
	shelf.stub.ld	JXNvg(stubp)
	sys_config.c	VXeˑ̊֐
	sys_config.h	VXeˑ̍\`
	user_config.h	[U[`
	sys_defs.h  	VXeˑ̃AvP[Vp`
	sys_rename.def	J[l̓ʖ̃l[`
	sys_rename.h	J[l̓ʖ̃l[
	sys_support.S	VXeˑ̃Tu[`
	sys_unrename.h	J[l̓ʖ̃l[


    config/sh2/apsh2f6a/
	)At@vWFNgAP-SH2F-6A(CPU: SH7145)

	Makefile.config	MakefileAP-SH2F-6A{[hˑ`
	apsh2f6a.h		AP-SH2F-6Ãn[hEFA`
	hw_serial.cfg	SIOhCõRtBM[Vt@C
	hw_serial.h		SIOhCo
	hw_timer.h		^C}샋[`
	sh2.h			SH2̒`
	shelf.ld		JXNvg
	shelf.stub.ld	JXNvg(stubp)
	sys_config.c	VXeˑ̊֐
	sys_config.h	VXeˑ̍\`
	user_config.h	[U[`
	sys_defs.h  	VXeˑ̃AvP[Vp`
	sys_rename.def	J[l̓ʖ̃l[`
	sys_rename.h	J[l̓ʖ̃l[
	sys_support.S	VXeˑ̃Tu[`
	sys_unrename.h	J[l̓ʖ̃l[


6.2 [U[̐ݒ荀

SH1/2ˑł́A[U[̐ݒ荀ڂVXeˑ̂Q̃t@C
Makefile.configuser_config.hɂ܂Ƃ߂ĂA[U[̓J[l
ȂĂAxAݒύX\ɂĂB


E_MACRO_ONLY
@@}N`݂̂łAAZu\[XCN[hĂ
@@AZuG[ɂȂȂ𒊏o邽߂̃}N

ESUPPORT_CHG_IPM
@@2.2ߎQ

EOMIT_POWER_CONTROL
@@5.2ߎQ

EGDB_STUB
@@GDB stubpB

