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

	    iRelease 1.4.1 ΉAŏIXV: 07-Oct-2004j

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

 L쌠҂́AFree Software Foundation ɂČ\Ă
 GNU General Public License  Version 2 ɋLqĂA
 (1)`(4)̏𖞂ꍇɌA{\tgEFAi{\tgEF
 Aς̂܂ށBȉjgpEEρEĔzziȉA
 pƌĂԁj邱Ƃ𖳏ŋB
 (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́AL̒
     \A̗pщL̖ۏ؋K肪Â܂܂̌`Ń\[
     XR[hɊ܂܂Ă邱ƁB
 (2) {\tgEFAėp\ȃoCiR[hiP[^uIu
     WFNgt@C⃉CuȂǁǰ`ŗpꍇɂ́Ap
     ɔhLgip҃}jAȂǁjɁAL̒쌠\A
     ̗pщL̖ۏ؋Kfڂ邱ƁB
 (3) {\tgEFAėps\ȃoCiR[ȟ`܂͋@ɑg
     ݍ񂾌`ŗpꍇɂ́Âꂩ̏𖞂ƁB
   (a) pɔhLgip҃}jAȂǁjɁAL̒
       \A̗pщL̖ۏ؋Kfڂ邱ƁB
   (b) p̌`ԂAʂɒ߂@ɂāAL쌠҂ɕ񍐂
       ƁB
 (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
     QAL쌠҂Ɛӂ邱ƁB

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

P. PowerPC32 ^[Qbgˑ̊Tv

1.1 ^[QbgVXeƊJ

PowerPC32vZbT̃^[QbgVXeƂẮAȉ̃vZbTT
|[gĂB

EMPC860T (g[)

T|[gĂ{[h́Aȉ̒ʂłB

E()^obN TB6102S(CPU:MPC860T)

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

fBNg\ȉɎBPowerPCłł̓VXeˑňꕔv
ZbTˑiɊ݃Rg[ˑjsĂB̂߁AvZb
TˑƃVXeˑƂ\L͌₷̂ŁAȌA$CPU
fBNg$SYSfBNgƂ\LpB

@$CPU=powerpc32fBNg
@@@PowerPCʕ
@@@@PowerPCA[LeN`ɂċK肳Ă͈͓
@@@@ł镔
@@@@ׂĂPowerPCnvZbTŋʂɎgpłB
@@@@
@$SYSfBNg
@@@]̃{[hˑiVXeˑj
@@@݃Rg[ˑ
@@@^C}hCo
@@@VAhCo

܂AThe IBM PowerPC Embedded EnvironmentA[LeN`̃VXe
ˑ̃TvR[ht@XpɊ܂ł邪A͓mF
ĂȂBifoCXˑ̒`KXAǉKvBj

1.2 T|[g@\̊Tv

PowerPC32^[Qbgˑ̋@\ƂāA݃}XN̕ύXEQ(chg_ipmA
get_ipm)ƁA\]pVXeQƋ@\(vxget_tim)T|[gĂ
B݂̋֎~Ƌ(dis_intAena_int)̓T|[gĂȂB

1.3 ̃^[Qbgւ̃|[eBO

PowerPCA[LeN`̓vZbTERÂ݂̕K肳ĂA
̃RApvZbTẽ[J[琻iĂB
Rg[̎dleCve[VɈقȂĂ邽߁A
݃Rg[ˑ̏$SYSfBNgiVXeˑjɕ
ĂBPowerPCA[LeN`EvZbTփ|[eBOꍇ
$SYSfBNgȉC΂悢B
|[eBO̍H͊荞݃Rg[̃A[LeN`ɈˑB
i̓IȏCڂ́u7. J[lڐAҌ̏vQƁj

ȂAPowerPC 32rbgA[LeN`ΏۂɃJ[l̎s
B

1.4 GDB X^u

݂ TOPPERS/JSPJ[l PowerPC32łROM݂̂T|[gĂB
AGDBX^uƑgݍ킹Ďgp邱ƂlāA@łJSPJ[
lƓlɃ\[XR[hGDB_STUB}NɂRpC̐ݒ
sĂB

1.5 VA|[g

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

ȂA{[[gɂẮABAUD_RATE}NɂĒ`Ă̂ŕKv
ĕύX邱ƂłB
(user_config.h)

1.6 GfBA

e^[Qbg̓fBbvXCb`ɂGfBAύX邱Ƃ\
Bɍ킹āAJ[l̃GfBA̐ݒ͊eVXeˑ
ύX\łBGfBA͈ȉ̌Őݒ肷B

 E$SYSfBNg Makefile.config 
    RpCIvV
    @-mbigFrbOEGfBA
    @-mlittleFgEGfBA

 EVXe`iuser_config.hj
    SIL_ENDIAN
    @SIL_ENDIAN_BIGFrbOEGfBA
    @SIL_ENDIAN_LITTLEFgEGfBA
    
  
  @gEGfBAł̓mF͍sĂȂ


Q. PowerPC32^[Qbgˑ̋@\

̐߂ł́AJ[lуVXeT[rX̋@\̒ŁAPowerPC32^[
Qbgˑ̕ɂĉB

2.1 f[^^

int^ unsigned int^̃TCY 32rbgłB

2.2 Cve[Vˑ̋Lq@ɂ

PowerPC32A[LeN`͊݃Rg[K肵ĂȂ߁AeC
ve[VɂĊݏقȂBPowerPC32ˑ
̎ł́A$CPUfBNgɂPowerPC32A[LeN`ŋK肳
Ăê݂LqACve[VˑiɊ荞݃Rg
[ˑj̏$SYSfBNgŒ`ĂB
񗘗p^[QbgȊOɈڐA邽߂̊ݏɊւC^
tF[X́A̍̕ŌɁu7. J[lڐAҌ̏vƂ
܂Ƃ߂ċLڂĂ̂ŎQƂ̂ƁB

2.3 ݊Ǘ@\

J[lǗO݂̊ƂẮA NMIBāACPUbNԂ⏉
[`ł́ANMI ȊOׂ݂̊͂ċ֎~ĂB̓Iɂ́A
MSR(Machine Status Register)EErbg0ɐݒ肳B

DEF_INH Ŏw肷銄݃nhԍ(inhno)́AvZbT̃n[hEF
A̕\Lɍ킹邱ƂƂB

݃}XN^ݗDx̂߂́A`EAPI͈ȉ̒ʂłB

(1) IPM^
@݃Rg[̊݃}XN߂̌^łB
(sys_defs.h)

(2) define_ipm         	@@@@ݎt̊݃}XN̐ݒ
@@@@@@@@@@@@@@@@iIvVj
yCAPIz
        define_ipm(INHNO inhno, IPM ipm);

yp[^z
	INHNO inhno		݃nhԍ
	IPM ipm			݃}XN

y^[p[^z
	Ȃ

y@\z
@݃nhԍinhno݂̊󂯕tƂɊ
@Rg[IPMɐݒ肷l`B݃Rg[
@d݂̃xn[hEFAŃT|[gĂ΁A
@\tgEFAł̂悤ȏKv͂ȂB
@foCXhCȍŎgp邱Ƃz肵Ă
  (sys_config.h)

2.4 chg_ipm̃T|[gɂ

PowerPC32A[LeN`ˑ̋@\ƂāA݃Rg[̊荞
}XN̒lύX邽߂̃T[rXR[ chg_ipm ƁAQƂ邽߂
T[rXR[ get_ipm T|[gĂBȂA荞݃}XNrbg
̒l\f[^^ IPM ́A$SYSfBNgɂĒ`ĂB

̃T[rXR[́A^XNReLXg CPUbNԂ̏ꍇ
ɂ̂݌ĂяoƂłBchg_ipm ɂ 炩݂̊֎~
ԂɂꍇłAfBXpb`͋֎~ꂸAchg_ipm ɂύX
 IPM ̒ĺAfBXpb`̃^XNɈpBႦ΁A^X
N IPM  0x01 ɕύXA炩݂̊ɂʂ̃^XNɐ؂
ƁA؂ւ̃^XNł IPM  0x01 ɂȂ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

PowerPC32^[Qbgˑ̊݃}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

@݃}XN ipm Ŏw肳ꂽlɐݒ肷Bw肵l݃R
@g[̊݃}XN͈͓̔ɓĂȂꍇɂE_PARG[
@B
@܂Aݒ肵IPM̒ĺAfBXpb`pB
@
@̃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	*p_ipm		݂ IPM ̒l

yG[R[hz
	E_CTX			ReLXgG[

y@\z

@݂ ݃}XN̒lǂݏoAp_ipmẅɏށB
@
@̃T[rXR[́A^XNReLXg CPUbNԂ̎̂
@ĂяoƂłB^XNReLXg CPUbNԂŌĂяo
@ꍇɂ́AE_CTXG[ƂȂB
@
@ȂAg[XO@\ɊւāAchg_ipmɊւ镔̓VXeˑ
@ɂĒ`sĂB
@(sys_tool_config.h)


2.5 Cve[Vˑ̒`

2.5.1 MPC860Tˑ̒`

(1) ݔԍ
     mpc860t.hŒ`ĂB
     
                       iSIU݃\[Xj
        ݔԍ  b      }N    b  ݗv 
      ||||||||||||||||||||||||||||
             0x0    b    INTNO_IRQ0    b  IRQ0
             0x1    b    INTNO_LVL0    b  x0
             0x2    b    INTNO_IRQ1    b  IRQ1
             0x3    b    INTNO_LVL1    b  x1
             0x4    b    INTNO_IRQ2    b  IRQ2
             0x5    b    INTNO_LVL2    b  x2
             0x6    b    INTNO_IRQ3    b  IRQ3
             0x7    b    INTNO_LVL3    b  x3i^C}Ŏgpj
             0x8    b    INTNO_IRQ4    b  IRQ4
             0x9    b    INTNO_LVL4    b  x4iCPMŎgpj
             0xa    b    INTNO_IRQ5    b  IRQ5
             0xb    b    INTNO_LVL5    b  x5
             0xc    b    INTNO_IRQ6    b  IRQ6
             0xd    b    INTNO_LVL6    b  x6
             0xe    b    INTNO_IRQ7    b  IRQ7
             0xf    b    INTNO_LVL7    b  x7
      ||||||||||||||||||||||||||||

                       iCPM݃\[Xj
        ݔԍ  b      }N    b  ݗv 
      ||||||||||||||||||||||||||||
            0x10    b    INTNO_ERR     b  G[
            0x11    b    INTNO_PC4     b  pI/O PC4
            0x12    b    INTNO_PC5     b  pI/O PC
            0x13    b    INTNO_SMC2    b  SMC2/PIP
            0x14    b    INTNO_SMC1    b  SMC1
            0x15    b    INTNO_SPI     b  SPI
            0x16    b    INTNO_PC6     b  pI/O PC6
            0x17    b    INTNO_TIMER4  b  ^C}4
            0x18    b                  b  \ς
            0x19    b    INTNO_PC7     b  pI/O PC7
            0x1a    b    INTNO_PC8     b  pI/O PC8
            0x1b    b    INTNO_PC9     b  pI/O PC9
            0x1c    b    INTNO_TIMER3  b  ^C}3
            0x1d    b                  b  \ς
            0x1e    b    INTNO_PC10    b  pI/O PC10
            0x1f    b    INTNO_PC11    b  pI/O PC11
            0x20    b    INTNO_I2C     b  I2C
            0x21    b    INTNO_RISC    b  RISC^C}e[u
            0x22    b    INTNO_TIMER2  b  ^C}2
            0x23    b                  b  \ς
            0x24    b    INTNO_IDMA2   b  IDMA2
            0x25    b    INTNO_IDMA1   b  IDMA1
            0x26    b    INTNO_SDMA    b  SDMA`loXG[
            0x27    b    INTNO_PC12    b  pI/O PC12
            0x28    b    INTNO_PC13    b  pI/O PC13
            0x29    b    INTNO_TIMER1  b  ^C}1
            0x2a    b    INTNO_PC14    b  pI/O PC14
            0x2b    b    INTNO_SCC4    b  SCC4
            0x2c    b    INTNO_SCC3    b  SCC3
            0x2d    b    INTNO_SCC2    b  SCC2
            0x2e    b    INTNO_SCC1    b  SCC1
            0x2f    b    INTNO_PC15    b  pI/O PC15
      ||||||||||||||||||||||||||||

@@@SIUFSystem Interface Unit
@@@CPMFCommunication Processor Module

(2) ݃Rg[̊݃}XN

MPC860Tł̓vZbTɓ̃VXeEC^[tF[XEjbgSIU
ʐMvZbTEW[CPMꂼꊄ݃Rg[ĂA
2̊݃Rg[JXP[hڑĂB
̎ł́ASIŮ݃}XNiSIU݃}XNWX^SIMASKĵ
J[lŊǗĂBCPMɂĂ͊݃Rg[d݂
xn[hEFAŃT|[gĂ߁AJ[lłCPM݃}X
NǗĂȂB
IPM^̒`
@typedef UH IPM;
łBisys_defs.hj
܂ACPMSIUւ̊ݗvx4ɐݒ肳ĂB
iuser_config.h̃}NCPM_INT_LEVELj

(3) J[lŎgpĂfoCXiݗvj
@@@EMPC860T̎݃^C}PITix3j
@@@EMPC860TVAE}l[WgRg[SMC1
@@@@iCPM݂̈Ȃ̂ŁAx4j

(4) efoCX̊ݗDx
  Dx : () VASMC1ix4j > ^C}PITix3j ()
@@@


2.5 CPUOǗ@\CPUOnh

DEF_EXCŎw肷CPUOvԍ(excno)́APowerPCA[LeN`ŋK
CPUOvԍƈΈɑΉĂB
̃f[^^(EXCNO) UINT^ɒ`ĂB

DEF_EXCŗOvԍƂėLłȂlCPUOɑΉȂԍw
ꍇ͕̓ۏ؂ȂB

CPUOvԍA}NACPUOv̑Ή֌WȉɎB

 1. EXC_NO_SYSTEM_RESET@     VXeZbgO
 2. EXC_NO_MACHINE_CHECK      }VE`FbNO
 3. EXC_NO_DSI                DSIO
                              if[^EEANZXj 
 4. EXC_NO_ISI                ISIOi߃tFb`j
 5. EXC_NO_EXTERNAL_INTERRUPT O
 6. EXC_NO_ALIGNMENT          ACgO
 7. EXC_NO_PROGRAM            vOO
 8. EXC_NO_FLOATING_POINT_UNAVAILABLE 
                              _gps
 9. EXC_NO_DECREMENTER        fN^O
10. EXC_NO_IMPLEMENT_EXCEPTION_00A00
                              Cve[VŗL̗O0x00a00
12. EXC_NO_SYSTEM_CALL        VXeR[
13. EXC_NO_TRACE              g[XiIvVj
14. EXC_NO_FLOATING_POINT_ASSIST
                              _⏕

15Ԉȍ~ɃvZbT̃Cve[VŗL̗Oi0x01000j
`ĂꍇB


(1) CPUOnhւ̈p_excinf
@CPUOnhɓnp_excinf́ACPUÕReLXg
@X^bNւ̃|C^nBX^bN̍\ȉɎB

p_excinf -->  --------------------
             |       r0           | 
              --------------------
             |       r3           |
              --------------------
             |       r4           |
              --------------------
             |       r5           |
              --------------------
             |       r6           |
              --------------------
             |       r7           |
              --------------------
             |       r8           |
              --------------------
             |       r9           |
              --------------------
             |       r10          |
              --------------------
             |       r11          |
              --------------------
             |       r12          |
              --------------------
             |       srr0         | /*   Ҕ^AWX^0@*/
              --------------------
             |       srr1         | /*   Ҕ^AWX^1@*/
              --------------------
             |       lr           | /*   NEWX^ @@*/
              --------------------
             |       ctr          | /*   JEgEWX^@ */
              --------------------
             |       cr           | /*   RfBVEWX^ */
              --------------------
             |       xer          | /*   Iy[V́@*/
              --------------------  /*       ʃWX^  */
             |       exc_no       | /*   Ovԍ  */
              --------------------
             
(2) o^CPUȌ
@o^CPUOꍇ̓J[lpӂĂftHg̃G
@[sB̓IɂCPUÕWX^̓eCPUOv
@Oo͂A[vɓB


2.6 _WX^
             
PowerPC32ł́A_WX^IvVŒ`ĂB
J[l_WX^T|[gsĂ邪A@ł
eXgsĂȂBi|[eBOɗpMPC860T_
WX^ĂȂ߁j
(cpu_support.S)

2.7 X^[gAbvW[

PowerPC32^[Qbgł́AOxN^̈ɁAZbgт NMI(Non 
Maskable Interrupt)p̃xN^AhXĂB̃AhX
Wv悪X^[gAbvW[ƂȂĂB

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

(A) vZbT̏

}VXEe[^XEWX^AvZbT̓샂[hݒ
B

ɁAX^bN|C^(r1) STACKTOPɐݒ肷BŊ݃X^bN
|C^ɐݒ肳ꂽX^bN̈́AJ[lN͔^XNReLX
gp̃X^bN̈ƂĎgB
STACKTOṔAsys_config.hŒ`邱Ƃz肵ĂB

(B) hardware_init_hook ̌ďo

hardware_init_hook  0 łȂꍇɂ́Ahardware_init_hook ĂяoB
hardware_init_hook ́AʂɃJ[lNOɍsKvV
Xeˑ̏Lq̂ƂBiFoXXe[gERg[
̏ALbV̏AEHb`hbO^C}̏Ȃǁj
Lqꏊ́Asys_support.SWƂB

hardware_init_hook ǂɂ`ĂȂꍇAJł̃V{
0ɒ`(JXNvgɋLq)B

(C) bssZNVdataZNV̏

bssZNV[NAB

dataZNVBROMΉ̂߂ɁAROMRAM փRs[s
B

(D) software_init_hook ̌ďo

software_init_hook  0 łȂꍇɂ́Asoftware_init_hook ĂяoB
software_init_hook ́AJ[lNOɍsKv\tg
EFA(̓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


R. VXeˑ̋@\

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}̐xNbNɈˑ邽߁A^C}̋NbN
PʂŒ[ɂȂlݒ肵ꍇɂ́Aisig_tim ̌ďoɌ덷
邱ƂɂȂB

ftHgł́AL̃^C}𗘗pĂB
(a) MPC860Tˑ
  MPC860T̎݃^C}PIT
  iNbNg 12.5MHzj

3.2 \]pVXeQƋ@\

PowerPC32^[Qbgˑł́A\]pVXeQƋ@\
(vxget_tim)T|[gĂBSYSUTIM^UD^(64rbg̕
^)Œ`ĂB

\]pVXe̐x͋NbNPʂł邪A^C}̌ݒl
ǂݏo߂ɈꎞIɃ^C}~Kv邽߁Avxget_tim Ă
xɃVXeNbNÂx邱ƂɂȂB
܂ASUPPORT_VXGET_TIMƂ}NɂÃT[rXR[T
|[g邩ǂ؂ւ悤ɂĂB
(SUPPORT_VXGET_TIM ́Auser_config.h ̒ #define ĂB)

(a) MPC860Tˑ
@\]pVXe̐x80nsecłB
  i^C}ւ̋NbNg 12.5MHzj

3.3 VAC^tF[XhCo

(a) MPC860T
@VAC^tF[XhCóAMPC860TVAE}l[W
@gERg[SMC1T|[gĂBVÃT|[g|[g
@͌1chłAuser_config.h ̒TNUM_PORT}NɂĒ`Ă
@B

3.4 }bv

}bvɊւݒ́AJXNvgɂčsBRpCɗ
p郊JXNvg$SYS/Makefile.configŎw肷B

eX̃}bv͈ȉʂłB

(a) MPC860T
E()^obN TB6102S

(a-1) ROM̏ꍇiDBGENV = ROMjFmpc860elf.ld
                                             (SDRAM 16Mbyte)
	 0x00000100 - 0x00001fff  OxN^
         0x00002000 -             f[^̈
		    - 0x01000000  ^XNReLXgpX^bN

                                             (FLASH ROM 2Mbyte)
         0x10000100 - 0x100001ff  ZbgxN^
         0x10000200 - 0x10001fff  OxN^̌f[^
         0x10002000 -             R[ḧ
		    - 0x10400000  ϐ̏lf[^

l
@{ł΁AZbg0x00000100ԒnsJnƂ
@Ã{[h̏ꍇ͈ȉ2̗RFlash ROM̐擪+0x100Ԓn
@i0x10000100Ԓnjsn܂B
@@(1) oXEXe[gERg[܂ł́AׂẴAN
@@@@ZXEoN0iFlash ROMjɃqbgB
@@(2) ZbgɃAhXoXA20MsɂȂĂB


(a-2) RAMɂׂă_E[hꍇ
@@iDBGENV = DOWNLOAD_TO_RAMjFram_mpc860elf.ld

                                             (SDRAM 16Mbyte)
	 0x00000100 - 0x00001fff  OxN^
         0x00002000 -             R[ḧ
		    -             ϐ̏lf[^
         0x00800000 -             f[^̈
		    - 0x01000000  ^XNReLXgpX^bN

l
@iJTAGfobOc[ȂǂŁjfobO̍ۂɁAvOFlash 
@RONɏłƍƌBŃvÕ_E[h
@ԂZ邽߁AׂẴvORAMɃ}bv郊NXN
@vgpӂĂB$SYS/Makefile.configDBGENV = DOWNLOAD_TO_RAM
@IƕKvȃ}N`ǉƋɁANXNvg
@ram_mpc860elf.ldw肳BoXEXe[gRg[̏
@Flash ROMɏłA܂Ŏs_(*1)ŃvO
@_E[h0x100ԒnsJnB

(*1) ROM̐ݒŃrĥFlash ROMɏłA
@@ sys_support.S̃xcopy_exception_vectors܂ŎsΗǂB



S. J̍\z

J̍\z@ɂẮAGNUJ\z}jAQƂ邱ƁB
ȂA^[Qbg <TARGET> ̒lɂẮAȉQl̂ƁB
JɂWindows2000 SP4CygwinpB

mF́AL̃c[ɂĊmFĂB̃c[ftHgƂB

EGNUzzĂIWiGCCȂǂ\[X\zc[
  mFsƂ̃o[W͈ȉ̒ʂłB
    BINUTILS : 2.13.2.1
    GCC-CORE : 2.95.3
    NEWLIB   : 1.11.0
ȉꍇ̃^[Qbg <TARGET> ɂ́Apowerpc-elf pBj

EThe IBM PowerPC Embedded EnvironmentA[LeN`p̃VXeˑ
@̃TvR[hit@Xj̓UCNXАEDK6.2Ɋ܂܂
@GNUc[(gcc-2.95.3)ɂăRpCʂƂ܂ŊmFĂB
@EDKɊ܂܂GNUc[Cygwingp@͉LURLQƁB
@@http://www.ertl.jp/~honda/microblaze/index.html

T. 

E64rbgE[h̓T|[gĂȂB
@ig͔rIeՂƎvBj

E_WX^̑ޔ^͎@eXgĂȂB
@i|[eBOɗpMPC860T_WX^ĂȂ߁j

EgEGfBAE[hł̎@eXgsĂȂB

EX^[gAbv[`ANXNvǵAC++ɑΉĂȂB

ESIL_LOC_INT()ɂ
@PowerPCłłSIL_LOC_INT()̎CPUbNƓ@pĂ
@B̂߁ASIL_LOC_INT()Ŋ݋֎~ĂԂł́Asns_loc()
@yvxsns_loc()CPUbNԂƔʂĂ܂B
@JSPJ[lł͌XA݃bNɂ̓T[rXR[gpłȂ
@K肵Ă̂ŁAe͏ȂƎvB
@ijsp/user.txt́u5.1.1 ݃bNԂ̐vQƁj

E.sdata.sbssZNVɂ
@X^[gAbv[`уNXNvg.sdata.sbssZN
@VɑΉĂȂB܂ARtBM[VE`FbJ[
@.sdata.sbssZNṼ}bsOɑΉĂȂB

EThe IBM PowerPC Embedded EnvironmentA[LeN`ɂ
@VXeˑ̃TvR[ht@XpɊ܂ł邪A
@mFĂȂBiRpCʂƂ܂ł͊mFĂBj
@ۂɓ삳ɂ̓foCXˑ̒`KXAǉKvB

U. ̑

6.1 fBNgEt@C\

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

    config/powerpc32/
        PowerPC32ʕ

	Makefile.config		MakefilePowerPC32^[Qbgˑ̒`
	cpu_defs.h		vZbTˑ̃AvP[Vp`
	cpu_config.h		vZbTˑ̍\`
	cpu_config.c		vZbTˑ̊֐
	cpu_support.S		vZbTˑ̃Tu[`
	cpu_insn.h		჌x̃vZbT샋[`
	cpu_context.h		ReLXg
	cpu_rename.def		J[l̓ʖ̃l[`
	cpu_rename.h		J[l̓ʖ̃l[
	cpu_unrename.h		J[l̓ʖ̃l[
	vea_oea.h		IWiPowerPCA[LeN`p`
	vea_oea_emb.h		The IBM PowerPC Embedded Environment
				A[LeN`p`
	tool_defs.h		Jˑ̃AvP[Vp`
				iGNUJpj
	tool_config.h		Jˑ̍\`iGNUJpj
	powerpc32.h		PowerPC32̃WX^Ȃǂ̒`
	start.S			X^[gAbvE[`
	makeoffset.c		offset.h T|[gvO

    config/powerpc32/mpc860t/
        MPC860T(g[)ΉVXeˑ
          (()^obN TB6102SΉ)

	Makefile.config		MakefileTB6102SVXeˑ`
	user_config.h		[U[`
	sys_defs.h		VXeˑ̃AvP[Vp`
	sys_config.h		VXeˑ̍\`
	sys_config.c		VXeˑ̊֐
	sys_support.S		VXeˑ̃Tu[`
	sys_rename.def		J[l̓ʖ̃l[`
	sys_rename.h		J[l̓ʖ̃l[
	sys_unrename.h		J[l̓ʖ̃l[
	sys_tool_config.h	Jˑ̃VXeˑ\`
				iGNUJpj
	mpc860t.h   		MPC860T̃n[hEFA`
	mpc860_sil.h   		MPC860TpANZXE[`̒`
	tb6102s.h   		TB6102S{[h̃n[hEFA`
	hw_timer.h		^C}샋[`
	mpc860_pit.h		MPC860T݃^C}PIT
				샋[`
	hw_serial.h		SIOhCo
	hw_serial.cfg		SIOhCõRtBM[Vt@C
	mpc860_smc.h		MPC860TVAE}l[Wg
				Rg[SMC1̑샋[`
	mpc860_smc.c		
	
	mpc860elf.ld		JXNvgiROMpj
	mpc860elf_ram.ld	JXNvgifobOpj

    config/powerpc32/ibm_ppc_emb_sample/
        The IBM PowerPC Embedded EnvironmentA[LeN`Ή
        VXeˑ̃TvR[h

	Makefile.config		MakefilẽVXeˑ`
	user_config.h		[U[`
	sys_defs.h		VXeˑ̃AvP[Vp`
	sys_config.h		VXeˑ̍\`
          			(Kvȃ}N`̃Tv)
	sys_config.c		VXeˑ̊֐
	sys_support.S		VXeˑ̃Tu[`
	sys_rename.def		J[l̓ʖ̃l[`
	sys_rename.h		J[l̓ʖ̃l[
	sys_unrename.h		J[l̓ʖ̃l[
	sys_tool_config.h	Jˑ̃VXeˑ\`
				iGNUJpj
	hw_timer.h		^C}샋[`
	pit.h			^C}foCX̑c[`
	hw_serial.h		SIOhCo
	hw_serial.cfg		SIOhCõRtBM[Vt@C
	smc.h			VAfoCX̑샋[`
	smc.c			
	sample_elf.ld		JXNvgiROMpj

6.2 [U[̐ݒ荀

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

6.2.1 Makefile.config̐ݒ荀

Es
@ϐDBGENV̐ݒɂsIB
@@EDBGENV=ROMFROM
@@EDBGENV=GDB_STUBFGDB stubiT|[gj
@@EDBGENV=DOWNLOAD_TO_RAM
@@@@fobOpɃvOׂRAM̈Ƀ}bsOݒ
@@@@iTB6101S{[hŗLj

EGfBA
    RpCIvViϐCOPTSjƂĎw肷
    @-mbigFrbOEGfBA
    @-mlittleFgEGfBA

  
  @gEGfBAł̓mF͍sĂȂ

E}bsO
@@ETEXT_START_ADDRESSFtextZNV̐擪AhX
@@EDATA_START_ADDRESSFdataZNV̐擪AhX

6.2.2 user_config.h̐ݒ荀

user_config.hňȉ̃}N`sƂɂAݒύXłB

(1) RpCp̃tOƂėp}N

ESUPPORT_CHG_IPM
@@chg_ipm()LɂB

ESUPPORT_VXGET_TIM
@@\]pVXeQƋ@\vxget_tim()LɂB

ESIL_ENDIAN
    ESIL_ENDIAN_BIGFrbOEGfBA
    ESIL_ENDIAN_LITTLEFgEGfBA

ESUPPORT_POWER_MANAGEMENT
@@vZbTd̓[hĂB
@@iMSRPOWrbgLj
@@s\ȃ^XNPȂݑ҂ɂȂƂAvZbT
@@d̓[hɈڍsB
@@}NSAVE_POWPER̐QƁB

EUSE_MULTIPLE_WORD_LOAD_STORE
@@WX^̑Ҕ^ɐ[h^XgAE}`v߂
@@gpB
@@Cve[VɂĂ͓̏s[h^XgA
@@肩ĒxȂ̂Œ

EABSOLUTE_JUMP_EXC_ENTRY
@@OxN^̔zuɂẮAOxN^textZNVɂ鑱
@@̏ɕ򂷂ہAb߂ɂPCΕiO0x07ff,ffffjł͓
@@ȂꍇBABSOLUTE_JUMP_EXC_ENTRY}N`ƐΔ
@@nw肵ĕ򂷂ɐ؂ւA̖łB

(2) lݒ肷}N

ESTACKTOP
@@^XNReLXgpX^bN̏l

ESYSTEM_CLOCK
@@VXeNbN[MHz]

EINTLVL_TIMER
@@^C}̊݃x
@@
@@@yMPC860TŗLz
@@@@@SIU̓x\

ETIC_NUME
ETIC_DENO
@@^C}݂ɂisig_tim()Ăяo[msec]
@@ꂼꕪqA\B
@@config.txt
@@@(3) ^CeBbN̒`
@@Q

EINTLVL_SERIAL
@@VÅ݃x

@@@yMPC860TŗLz
@@@@@VÅ݃xʂɐݒłA
@@@@@CPM_INT_LEVELiqjɂČ肷B

EBAUD_RATE
@@VAʐM̃{[[g
@@9600, 19200, 38400[bps]̐lŒ`B

EVA|[g̒`
@@ETNUM_PORT
@@@@GDICxŃT|[gVA|[g̐
@@@@iJ[l̊Ǘɂ|[gj
@@ETNUM_SIOP
@@@@PDICxŃT|[gVA|[g̐
@@@@ifoCXhCoEx̃|[gj
@@ELOGTASK_PORTID
@@@@VXeOɗpVA|[gԍ


6.2.2.1@IWiPowerPCA[LeN`ŗL̐ݒ荀

(1) RpCp̃tOƂėp}N

ESUPPORT_FLOATING_POINT_REG
@@vZbT_WX^ĂB
@@fBXpb`ŕ_WX^̑Ҕ^sB

@@iڐAɗpMPC860T_WX^ĂȂ߁j
@@̃IvV͎@eXgsĂȂB
@@܂A{8oCgEACgɍ킹ׂA̓_Ή
@@ĂȂB
@
@@݃[`ACPUO[`у^XNO[`
@@_WX^gpꍇ́Ae[`ŕ_
@@WX^̑Ҕ^sƁB

EIMPLEMENT_EXCEPTION_00A00
@@Cve[VŗL̗O0x00a00gpB
@@e̎̂0xaԖڂCPUOnhƂēo^邱ƁB
@
@l
@@ECPUOԍ0xa̓}NEXC_NO_IMPLEMENT_EXCEPTION_00A00
@@@ƂāA`ĂB
@@Eo^CPUOnhł́AʏCPUOnh
@@@lɃJ[l̋@\𗘗p邱ƂłB

6.2.2.2@The IBM PowerPC Embedded EnvironmentA[LeN`ŗL̐ݒ荀
  ڍׂ́u7.5.6 IBMnPowerPCΉɂāv̍Q

(1) RpCp̃tOƂėp}N
@ESUPPORT_IBM_PPC_EMB_APU
  @@APUfoCXɎĂ邱ƂB
  @@iAPUFAuxiliary Processor Unitj

(2) lݒ肷}N
@ENUM_IMPLEMENT_EXCEPTION
@@Cve[VŗLɒ`ꂽO̖{
@@iJ[lɓo^Cꃋ[`̖{j

6.2.2.3@MPC860TŗL̐ݒ荀

(1) RpCp̃tOƂėp}N
@ESIL_DEBUG
@@@SILgpƂ̃O@\LɂifobOpj
@@@̓IɂSILoRfoCXւ̃ANZXO჌xo
@@@̓[`sys_putc()ă̐p̃GAɋL^B
@@@BOOL^̃O[oϐsil_debug_onTRUEɐݒ肵_SIL
@@@ANZXO@\LɂȂBisil_mpc860.hCN[h
@@@sil_debug_onextern錾Bj
@@@
@@@SIL̃O@\͓ŃJ[lW̃O@\gpĂ邽߁A
@@@{O@\̏o͂ǂ̏dvx̏o͂Ɋ蓖Ă邩͒ӂKvł
@@@Biuser.txt́u4.4 ȌdvxvQƁj
@@@Ⴆ΁AdvxLOG_EMERGSIL̃Oo͂Ɋ蓖ĂꍇATv
@@@vO̐ݒł͏dvxLOG_EMERG͊݋쓮̃VAo͂
@@@჌xo̗͂ɏo͂ݒɂȂĂ̂ŁA̖ړI
@@@gꍇɂ͓KȂBiOo͎ɂɃOAOo
@@@~܂ȂȂBj{@\Lɂꍇ͉L̂悤SIL̃O
@@@@\蓖Ădvx̃O݋쓮ŃVAo͂ȂȂ
@@@悤Ȑݒ𐄏B
@@@
@@@ݒFSIL̃O@\dvx LOG_EMERGɊ蓖Ăꍇ
@@@@vmsk_log(LOG_UPTO(LOG_INFO) & ~LOG_MASK(LOG_EMERG), 
@@@@@@@@@LOG_UPTO(LOG_EMERG));
@@@
@@@^C}hCoŗpƃVXeׂ̕ȂA^XNق
@@@Ǔ삵ȂȂ̂Œ

(2) lݒ肷}N
@ECPM_INT_LEVEL
@@@CPMSIUւ̊ݗvx
@@@VASMC1̊ݗvxƓɂȂ


6.3 `ς݃}N

AZuŗp^߂ƂāAtool_config.hňȉ̃}N
pӂĂB

LI32(reg, imm) F32rbgl[h
@ėpWX^reg32rbg̑limm[hB
@
@l
@@[li16rbgl̃[hłB
@
LOAD_VAL32(reg, val)F32rbgϐ[h
@ėpWX^regɕϐval̒l[hB

ȉ̃[`The IBM PowerPC Embedded EnvironmentA[LeN`ɂ
DCRiDevice Control RegisterjANZXpvea_oea_emb.hŒ`
ĂB̓foCXhCoŎgp邱Ƃz肵ĂB

sil_rew_dcr(reg, val)FDCŘݒl̓Ǐo
      reg:WX^ԍi萔j
      val:ǂݏoli[ϐiUW^j

sil_wrw_dcr(reg, val)FDCŘݒl̕ύX
      reg:WX^ԍi萔j
      val:ݒ肷li[ꂽϐiUW^j

---------------------------------------------------------------------

V. J[lڐAҌ̏

́A{J[l𑼂̂PowerPC32A[LeN`EvZbTֈ
A邽߂̏ɂĂ܂Ƃ߂B


7.1 p`
@EICUFInterrup Control Unit
@@@@@݃Rg[
@EIPMFInterrupt Priority Mask
@@@@@ICŮ݃}XN
@ECve[Vˑ
@@@@@ȉAPowerPCnvZbTł̃vZbTŗL̕
@@@@@Cve[VˑƌĂԁB

7.2 WX^̊蓖

PowerPCEABI()ɂK肳郌WX^蓖
@r0Fzero܂͔ėpWX^
@r1:X^bN|C^
@r2FTOCiTable of Contentsj
@@@@{ICRpCR[hł͎gpȂB
@@@@XUNIX̃vZXؑւŎgpĂc
@@@@JSPJ[lł͂̃WX^gpĂȂB
@@@@i݂OőҔ^sĂȂBj
@r3-4FA߂l
@r5-10F
@r13Fsmall datai.sdataZNṼAhXj
@r14-30F[Jϐ
@r31F[Jϐ܂environment pointer
@
@@PowerPC Embedded Application Binary Interface (EABI)Ƃ
@@@PowerPCA[LeN`wcK肵ĂB
@

JSPJ[lPowerPCˑŌ߂WX^蓖
@SPRG0F݁^CPUOlXgJE^
@SPRG1Fint_table@[݃xN^̐擪AhX
@SPRG2Fexc_table@[CPUOxN^̐擪AhX


yMPC860TŗLz
@SPRG3Fipm_table@݃nhԍIPMΉte[u̐擪
@@@@@@@@@@AhX

7.3 OS̏Ԕʂ̎j

@ReLXg
@@SPRG0WX^݁^CPUOlXgJE^ƂĊ蓖ĂĂA
@@^XNReLXg^^XNReLXg̔ʂsĂB

@CPUbN
@@}X^EXe[^XEWX^MSREErbgCPUbNԂ
@@\ĂB
@@@EE=0:CPUbN
@@@EE=1:CPUbN

7.4 fBNg\
@$CPU=powerpc32fBNg
@@@PowerPCʕ
@@@@PowerPCA[LeN`ɂċK肳Ă͈͓
@@@@ł镔
@@@@ׂĂPowerPCnvZbTŋʂɎgpłB
@@@@
@$SYSfBNg
@@@]̃{[hˑiVXeˑj
@@@݃Rg[ˑ
@@@^C}hCo
@@@VAhCo
@@@
PowerPCA[LeN`ł͊݃Rg[͋K肳Ă炸Aev
ZbTɈقȂ銄݃Rg[CvgĂBāA
ׂĂ̊O݂͓݃xN^iItZbg0x500jɕ򂷂B
PowerPC32ˑł̓Cve[VˑiɊ݃Rg[
ˑj̏$SYSfBNgɕĂBɂA
PowerPC32A[LeN`̃vZbT̏ꍇA݃Rg[ˑ
Lq邾Ŗ{J[lڐA邱ƂłBiRȂAڐA
H͊荞݃Rg[̃A[LeN`ɑ傫ˑBj
ȉPowerPC32A[LeN`ʕƃCve[Vˑ̃C
^tF[XqׂB

7.5 PowerPCʕ$SYSfBNgԂ̃C^[tF[X
@u`t@CFsys_config.hvƂLq͂̃}N
@sys_config.h܂sys_config.hCN[hwb_[
@t@CŒ`邱ƂӖB

7.5.1 PowerPCRAɊւ`

INIT_MSR}NFMSȐliIvVj
  Zbg̏l̂܂܂ł悢ꍇ͒`ȂĂ悢
  `t@CFsys_config.h


7.5.2 ݃Rg[ˑ̒`

(1) TMAX_INTNO}NF݃Rg[ʂł銄ݗv̐
@Ⴆ΁AVAʐM̎M݂ƑM݂݃`l
@LĂꍇAݗvƂĂ͂PƐB
  `t@CFsys_config.h

(2) IPMF݃}XÑf[^^
@PȂ}N`ł͂ȂtypedefgĒ`B
@`t@CFsys_defs.h

(3) PUSH_ICU_IPM}NF݃Rg[̊݃}XN̑Ҕ

y@\z
@݃Rg[̊݃}XNAX^bN֕ۑB
@AZu߂ŋLqA݂̓ŎgpB

ylz
@OɊ݃Rg[𗘗pȂVXeł́AŒ`邱ƁB
@r1,r13`r31j󂵂Ă͂ȂB
@IPM̃f[^TCY̔@ɂ炸Ȁ̑OŃX^bN|C^
@4oCgE邱ƁB
@܂APUSH_ICU_IPM}NPOP_ICU_IPM}N΂Ŏsꂽꍇ̓X
@^bN|C^邱ƁB
@`t@CFsys_config.h
  
(4) POP_ICU_IPM}NF݃Rg[̊݃}XN̕

y@\z
@݃Rg[̊݃}XNAX^bN畜B
@AZu߂ŋLqȀ݂oŎgpB

ylz
@OɊ݃Rg[𗘗pȂVXeł́AŒ`邱ƁB
@r1,r13`r31j󂵂Ă͂ȂB
@IPM̃f[^TCY̔@ɂ炸Ȁ̑OŃX^bN|C^
@4oCgE邱ƁB
@܂APUSH_ICU_IPM}NPOP_ICU_IPM}N΂Ŏsꂽꍇ̓X
@^bN|C^邱ƁB
@`t@CFsys_config.h

(5) PROC_ICU(label)}NFݏICUˑ

yp[^z
  label		V{ʗp}N

y@\z
@ݗv𔻒fAK؂Ȋ݃nhĂяoB
@AZu߂ŋLqB
@`t@CFsys_config.h
@
@
@̃}Ncpu_support.S̊ݏ̒ŁAPowerPCRA̔ėpWX
@^̈ꕔir0,r3`r12jAꃌWX^A݃Rg[IPM̑ޔA
@X^bNؑւς񂾏ԂŌĂ΂Aȉ̏sB

  @ĂяoƂ̑O
  @@ȉ̏ς񂾏ԂŌĂ΂
  @@@EWX^̑ޔ
  @@@@EėpWX^̈ꕔ r0,r3`r12
  @@@@EꃌWX^ SRR0ASRR1ALRACTRACRAXER
  @@@@E݃Rg[IPM
  @@@EX^bNؑւ
  @@@@@ReLXgi^XN^^XNj̊Ǘ
  @
  @e
  @@Eݗv̔
  @@E݃}XN̐ݒ
  @@E݋
  @@ECꃋ[`Ăяo
  @@@i݃nho^̏ꍇ̓ftHg̃G[j
  @@E݋֎~
  @@EiKvł΁j荞ݗvtÕNA
  
@݋[xN^e[uint_table[]PowerPCʕŒ`ĂA
@̐擪AhXSPRG1Ɋi[ĂB
@iu7.2 WX^̊蓖āvQƁvj
@
@ÓIAPI DEF_IHNŒ`ꂽ݃nhɂẮACꃋ[`
@擪AhX݋[xN^e[uɓo^鏈Nɋʕ
@Ăяo邽(*1)APROC_ICU}Nł̓e[u̓e͏
@݂ƂėpėǂB
@@(*1) jsp/kernel/interrupt.cinterrupt_initialize()Q
@
@PROC_ICU}Nł͊݃nhԍCfbNXƂĊ݋[x
@N^e[uCꃋ[`̐擪AhX4oCgf[^ƂĎ
@oƂłB
@̓Iɂ͈ȉ̔ԒnQƂΗǂB
@@@int_table̐擪AhX{i݃nhԍ~Sj

@ۂ̊ݗvƊ݃nhԍ̑Ή֌W̓Cve[V
@ˑŒ`A[U[̃hLgɖL邱ƁB
@@PROC_ICU}Nł́ACꃋ[`ĂяoOɗvꂽ݂
@΂銄݃nho^Ă邩`FbNAo^̏ꍇ̓f
@tHg̃G[sBiȂ0Ԓnɕ򂵂Ă܂Bj

@݃nho^ĂȂ݂ɂĂ̓X^[gAbv[`
@Ŋ݋[xN^e[u0ŏĂB̂߁A[xN
@^e[uQƂ΁A݃nh̓o^^o^̔ʂs
@łB
@iMPC860Tłł͐p̊֐ĂяoASIU݁^CPM݂̋敪
@@ъݔԍOo͂ĂBj

@̃}N͏i݂̊Ƒd݂̏ꍇ2œWJB
@}Nŕ򖽗߂gpꍇÂ܂܂ł2ɓWJꂽ}
@NŃV{Փ˂Aꂼ̕ʂłȂȂ鋰ꂪ
@B̖邽߁APowerPCʕ͓WJꏊƂɈ
@Ȃ}NlabelnBWJ̃V{̈ꕔɗp
@邱Ƃɂ2̓WJŃV{̏Փ˂hƂłB
  
ylz
@r1,r2,r13`r31j󂵂Ă͂ȂB
@iX^bN|C^͂̃}NIɌ̒lɕĂOKj
@PROC_ICUŃX^bNɃf[^ςޏꍇAȉ̓_ɒӂKv
@Bĩ}N͊݃Rg[IPMޔꂽԂŎs
@邽߁AȊÕf[^Cve[VˑɃX^bNɑޔ
@Ȃ̂ł΁AYȂBj

@Cꃋ[`ĂяoۂPowerPC̃R[OERxVɂ
@(sp+4)`(sp+7)Ԓn̓f[^܂̂ŁAX^bNɂ̗̈
@f[^j󂳂B
@iu7.6 ̒ӁvQƁj

@Ⴆ΁AMPC860TłCꃋ[`߂ĂɊݗvNA
@邽߂ɊݔԍiMPC860TˑƎɁjX^bNɐςł邽
@߁AӂKvȃP[XɊYB̊ݔԍX^bNɐςނƂ
@ɏL̗\̈󂯂悤ɔzuĂB
@
@X^bNɊmۂׂ}[W̃TCYcpu_config.hɃ}N
@STACK_MARGINƂĒ`ĂB
@
@l
@@64rbg̍ۂɂ͒ӂKvłB

ydl̗Rz
@PROC_ICU}N̊eeʂɒ`PowerPCʕKX
@яoACꃋ[`̌ĂяoPowerPCʕōs@l
@邪AICŨA[LeN`GȏꍇiFICŨJXP[hڑ
@ĂꍇjAݗṽNAIȌ`ŎłȂ߁A
@ׂĂ̏$SYSfBNgŒ`jƂB


(6) define_ipmFݎtIPM̒`iIvVj

yCAPIz
	void define_ipm(INHNO inhno, IPM ipm);

yp[^z
	INHNO inhno	݃nhԍ
	IPM ipm		ݎtɐݒ肷IPM̒l

y^[p[^z
	Ȃ

y@\z
@݃nhԍinhno݂̊󂯕tƂɊ݃Rg[
@IPMɐݒ肷l`B
@
ylz
@݃Rg[d݂̃xn[hEFAŃT|[g
@Ă΁A\tgEFAł̂悤ȏKv͂ȂB
@̃}N̓foCXhCȍŎgp邱Ƃz肵Ă
@B

@Ripm_talbe[]K{ł͂ȂA$CPUfBNgƂ̃C^[
@tF[Xɂ͊܂܂ĂȂB
@idefine_ipm()PROC_ICUɂāAipm_talbe[]PowerPCʕB
@@ĂBj


ȉ̂R̃}NSUPPORT_CHG_IPM`Ăꍇ̂ݕKvƂȂB
  

(7) CHECK_IPM}NFIPM͈̔̓`FbN

yCAPIz
	CHECK_IPM(IPM ipm);

yp[^z
	IPM ipm		`FbNׂIPM̒l

y@\z
@chg_ipm()ɂipm͈̔̓`FbNsB
@CŋLqB
@ipm̒lsȂ΁AercdE_PARchg_ipm()̃xexit
@WvB
@̓Iɂ͈ȉ̋LqƓ̏sB
@
@if (ipm̒ls) {
	ercd = E_PAR;
	goto exit;
  }
@
  `t@CFsys_config.h
@
(8) CHG_IPM}NFIPM̕ύX
yCAPIz
	CHG_IPM(IPM ipm);

yp[^z
	IPM ipm		ݒ肷IPM̒l

y@\z
@chg_ipm()ɂipm݃Rg[̊݃}XNɏށB
@CŋLqB
  `t@CFsys_config.h

(9) GET_IPM}NFIPM̎擾
yCAPIz
	GET_IPM(IPM *p_ipm);

yp[^z
	IPM *p_ipm	IPMi[̈ւ̃|C^

y@\z
@get_ipm()ɂĊ݃Rg[̊݃}XNǂݏoAp_ipm
@ẅɏށB
@CŋLqB
  `t@CFsys_config.h

7.5.3 foCXhCo֘A
@jsp-1.4foCXhCóuITRONfoCXhCo݌vKChC
@vɏč쐬ĂB
@uITRONfoCXhCo݌vKChCv͉LURL_E[h
@łB
@@http://www.ertl.jp/ITRON/GUIDE/device-j.html
@@
@SIL(System Interface Layer)APDIC(Primitive Device Interface 
@Compornet)AGDIC(General Device Interface Compornet)̗p
@uITRONfoCXhCo݌vKChCvQƁB
@ȒPɏqׂPDIC͏]hw_timer.hAhw_serial.h
@@E݃Rg[ˑ
@@ECPUˑ
@@E{[hˑ
@foCXˑɑΉAGDIC͂̏ʃCɂ鋤ʕ
@serial.cɑΉB

yMPC860TŗLz
@MPC860Tˑł͎ۂ̃foCXhCoł悭gANZX֐
@sil_mpc860t.hŒ`Ă̂ŁAfoCXhCo삷ꍇ
@pĂǂB
@ifoCX݌vKChCł͊{Iȃ[h^Cg̃ANZX֐
@̂ݒ`ĂBj


J[l𓮍삳̂ɍŒKvȃfoCXhCo֘A̍ڂȉ
ɎB

(1) SIL_ENDIAN}NFvZbT̃GfBA̒`
@`t@CFuser_config.h
@rbOGfBȀꍇFSIL_ENDIAN_BIG
@gGfBȀꍇFSIL_ENDIAN_LITTLE
@@
(2) ^C}EhCo
@hw_timer.hƂĂяoPDIC$SYSfBNgŗpӂB
@ڂjsp/doc/config.txtQ
@@
(3) VAEhCo
@hw_serial.hƂĂяoPDICъ݃nh̃RtB
@M[VEt@Chw_serial.cfg$SYSfBNgŗpӂB
@VAfoCXOtfoCXŁAPDIC𑼂̃}CRłpł
@ꍇAPDICjsp/pdic/simple_siofBNgɔzuB
@ڂjsp/doc/config.txtQ


7.5.4 IvṼ}N`

ȉ̃}N`̓IvVłB

(1) SAVE_POWPER}N
@fBXpb`{̂Ŏs\ȃ^XNȂƂɃvZbTȓd
@[hɈڍs鏈
@AZu߂ŋLqB
    E݂߂ĂɊ݋֎~s
    Er0`r4̓ej󂵂Ă͂ȂȂ

ylz
@SUPPORT_POWER_MANAGEMENT}N`Ăꍇ̂ݗLƂȂB
  `t@CFsys_config.h

yӁz
@@u݋vƁuȓd̓[hւ̈ڍsvAg~bNɍsȂv
@@ZbTł́Ã݂^C~OɂẮu݋vƁuȓd
@@̓[hւ̈ڍsv̊ԂŊ݂󂯕tĂ܂AӐ}Ȃ`
@@ȓd̓[hɈڍsĂ܂̂ŒӁB
@@݂ɂĎs\ȃ^XNĂvZbTX[v
@@܂܂ŎsȂȂBiۂɂ̓^C}݂ɂȓd̓[h
@@畜ÂŁA^XN҂鎞Ԃ͍őł^C}ݎ
@@ŉBj

(2) g[XO̐ݒiIvVA̒`t@C͕Kvj
@XAtool_config.hŒ`Ă}N̓A݃Rg[
@__ZjbgɈˑ鉺L̃}N$SYSfBNg
@sys_tool_config.hɕB̃}N`̂̓IvVł邪A
@sys_tool_config.ht@Ĉ͋łpӂKvB
@`t@CFsys_tool_config.h

@@@LOG_INH_ENTER(inhno)
@@@LOG_INH_LEAVE(inhno)
@@@LOG_ISR_ENTER(intno)
@@@LOG_ISR_LEAVE(intno)

@@@LOG_CHG_IPM_ENTER(ipm)
@@@LOG_CHG_IPM_LEAVE(ercd)		/*  Ô߁AĂ  */
@@@LOG_GET_IPM_ENTER(p_ipm)
@@@LOG_GET_IPM_LEAVE(ercd, ipm)

@@@LOG_DSP_ENTER(tcb)
@@@LOG_DSP_LEAVE(tcb)

7.5.5 Makefile֘A

$SYS/Makefile.configŒ`KvȍڂȉɏqׂB

(1) ^[QbgiRpCj
@powerpc-elf-gccȊÕRpCpꍇ͕ϐTARGET`B
@`ĂȂꍇ́AftHgTARGETpowerpc-eabi-elfݒ肳
@B

(2) RpCIvV
@ɃfobÕIvVgcc̃o[WgpfobOc[
@Ɉˑ̂ŁAϐCOPTSŒ`B
@@
(3) NΏۂƂȂIuWFNgt@C
@$SYSfBNgɃ\[Xt@ĈɂĂ͕ϐ
@KERNEL_ASMOBJSiAZujAKERNEL_COBJSiCjɃIuWFNg
@t@C`B
@
(4) NXNvg
@ϐLDSCRIPTŃt@Cw肷B

(5) textdataZNV̐擪AhX
@NXNvgɋLqĂǂB

----------------------------------------------------------------------
7.5.6 IBMnPowerPCΉɂ

PowerPCA[LeN`͑傫āAȉ2ɕނB
@(1) IWiPowerPCA[LeN`
@@@Eg[ MPCt@~
@@@EIBM PowerPC6xx/700t@~
@(2) The IBM PowerPC Embedded EnvironmentA[LeN`
@@@EIBM PowerPC40xt@~
@(3) The PowerPC Book-EA[LeN`
@@ithe Enhanced PowerPCA[LeN`j
@@@EIBM PowerPC440t@~

܂APowerPCA[LeN`̒`̓AvP[Vx
J[lEx܂3̃xĂAL3
A[LeN`rUISA͋ʂAVEAOEA͈قȂ
`ɂȂĂB
@EUISAFUser Instruction Set Architechture
@@@E[U[߃ZbgA[LeN`
@@@@@E[U[x߃Zbg
@@@@@E[U[xEWX^
@@@@@Ef[^^Cv
@@@@@EAhbVOE[h
@EVEAF Virtual Environment Architechture
@@@EzA[LeN`
@@@@@Ef
@@@@@@@LbV܂
@EOEAF Opareting Environment Architechture
@@@EA[LeN`
@@@@@EǗ
@@@@@EX[p[oCUExEWX^
@@@@@EOf

{ł(1),(2)̃A[LeN`ɑΉł悤ɂȂĂA
҂̐؂ւIBM_PPC_EMB_ENV}N̒`̗Lɂ
RpCsĂB
܂A҂̈Ⴂz邽߁AVEAOEAɊւLq͊eA[
LeN`Ƀwb_[t@C𕪂ĂB
@@Evea_oea.hFIWiPowerPCA[LeN`p
@@Evea_oea_emb.hFThe IBM PowerPC Embedded EnvironmentA[LeN`p

ȂAThe PowerPC Book-EA[LeN`ɂ͖ΉłB
̃A[LeN`ւ̈ڐA]͑kꂽB

ȉA$SYSfBNgŊeA[LeN`ɐݒ肷ׂeqׂB

(1) IWiPowerPCA[LeN`ŗL̐ݒe

IMPLEMENT_EXCEPTION_01000_PROC}NiIvVj
@Cve[VŗL̗O0x01000̏e`}N
@
@e̓vZbT̃Cve[VŗL̂̂Ȃ̂ŁA
@J[lɂo͑}ꂸÃ}NŒ`e
@ڌĂяoBi܂AJ[l̊ǗOj
@̂߁ȀŃJ[l̋@\Ăяoꍇ͖̓`
@B
@
@ItZbg0x01000ȍ~ɔzuOv͂PƂ͌ȂB2ȏ
@̗OxN^zuꍇAItZbg̎w@ɒӂ邱ƁB
@̓Iɂ
@    .org ItZbg - EXCEPTION_VECTOR_BASE
@̂悤Ɏw肷Bڂcpu_support.S̊YQƁB
@
  `t@CFsys_config.h


(2) The IBM PowerPC Embedded EnvironmentA[LeN`ŗL̐ݒe

`D}N

A-1 RpCp}N

  @ȉ̃}N`$SYS/Makefile.config̒ŃRpCE
  @IvVƂė^

IBM_PPC_EMB_ENV
  @̃}N`ĂꍇAThe IBM PowerPC Embedded 
  @EnvironmentA[LeN`ł邱ƂB

A-2 O[`̒`
@@݌vj
@@@{IɈȉ̗OŃT[rXR[gp
@@@P[X͑z肵ĂȂBiJ[lǗOj
  @@O[`ŃT[rXR[ĂяoƂ
  @@͕ۏ؂ȂB
@@ӓ_P
@@@e̓AZuŋLqB
@@@iCł̋Lqz肵ĂȂ̂ŁAL̂悤
@@@@݌vjƂȂBj
@@ӓ_Q
@@@A[LeN`A0x10oCg̈悪蓖Ă
@@@ȂOvɂẮA򖽗߂gĕʂ̏ꏊ
@@@[`zu邱
@@ӓ_R
@@@ONXCritical̗Oł͒ʏ̗OƈقȂA
  @@^[߂rfcipB
  @@(rfciFReturn From Critical Interrupt) 
  @@ȉ̂S̗OvYB
  @@@ECritical Input
  @@@EMachine Check
  @@@EWatchdoc Timer
  @@@EDebug

ȉ̃}N͂sys_config.h܂͂CN[h
wb_[t@CŒ`邱ƁB

ȉ̗O̒`͕K{łB

CRITICAL_INTERRUPT_EXCEPTION_PROC
@Critical InterruptȌ
@OxN^0x100
@ONXFCritical
  @@ʏ̗OƈقȂA^[߂rfcipB
  @@(rfciFReturn From Critical Interrupt) 
  Critical Interrupt̓Cve[VˑȂ̂
  e̓}N`ĂB
@0x100oCg̈悪蓖ĂĂȂ̂Œ
  ͈̔͂𒴂ꍇ͎c̕ʂ̏ꏊɔzuāA
  ɕ򂷂邱

 @ӓ_P
 @@@Critical Interrupt̓J[lǗO̗OƂB
 @@@ȉ[`ŃT[rXR[gpȂBj

MACHINE_CHECK_PROC
@Machine CheckȌ
@OxN^0x200
@ONXFCritical
  @@ʏ̗OƈقȂA^[߂rfcipB
  @@(rfciFReturn From Critical Interrupt) 
@0x100oCg̈悪蓖ĂĂȂ̂Œ
  ͈̔͂𒴂ꍇ͎c̕ʂ̏ꏊɔzuāA
  ɕ򂷂邱

 @ӓ_P
 @@@Machine Check̓J[lǗO̗OƂB
 @@@ȉ[`ŃT[rXR[gpȂBj

PROGRAMMABLE_INTERVAL_TIMER_PROC
@Programmable Interval timerȌ
@OxN^0x1000
@0x10oCg̈悪蓖ĂĂȂ̂Œ
  ͈̔͂𒴂ꍇ͎c̕ʂ̏ꏊɔzuāA
  ɕ򂷂邱
 iȉ̃}Nlj

FIXED_INTERVAL_TIMER_PROC
@Fixed Interval timerȌ
@OxN^0x1010
@0x10oCg̈悪蓖ĂĂȂ̂Œ

WATCHDOG_TIMER_PROC
@Watchdog timerȌ
@OxN^0x1020
@ONXFCritical
  @@ʏ̗OƈقȂA^[߂rfcipB
  @@(rfciFReturn From Critical Interrupt) 
@0x10oCg̈悪蓖ĂĂȂ̂Œ

DATA_TLB_MISS_PROC
@Data TLB missȌ
@OxN^0x1100
@0x10oCg̈悪蓖ĂĂȂ̂Œ

INSTRUCTION_TLB_MISS_PROC
@Instruction TLB missȌ
@OxN^0x1200
@0x10oCg̈悪蓖ĂĂȂ̂Œ

DEBUG_PROC
@DebugȌ
@OxN^0x2000
@0x10oCg̈悪蓖ĂĂȂ̂Œ
@v͈ȉ7
@@Trap
@@Instruction address compare
@@Data address compare
@@Instruction complete
@@Branch taken
@@Exception
@@Unconditional debug event


ȉ̗O̒`̓IvVłB

IMPLEMENT_EXCEPTION_D00_PROCiIvVj
  Cve[Vp̏ 
  @ItZbgF0xd00-0xff0
    Cve[VŗL̗OxN^iPƂ͌Ȃj
    ̗prɎgpB

 @ ItZbg̎w@ɒӂ邱ƁB
  @̓Iɂ
       .org ItZbg - EXCEPTION_VECTOR_BASE
 @ ̂悤Ɏw肷Bڂ̗͑Ov̊YQƁB
    Ⴆ΁APowerPC405ł̓ItZbg0xf20
    APU UnavailableȌzuB

IMPLEMENT_EXCEPTION_02010_PROCiIvVj
  Cve[Vp̏ 
  @ItZbgF0x2010-0x2ff0
    Cve[VŗL̗OxN^iPƂ͌Ȃj
    ̗prɎgp

 @ ItZbg̎w@ɒӂ邱ƁB
  @̓Iɂ
       .org ItZbg - EXCEPTION_VECTOR_BASE
 @ ̂悤Ɏw肷Bڂ̗͑Ov̊YQƁB


aDNXNvg

ZbgxN^0xffff,fffcԒnɌŒ肳ĂB
Zbgpreset_vectorZNV`ĂB
NXNvgł̃ZNV0xffff,ffecԒn
(0xffff,fffc - 4oCg~4)ɔzuB
ڂcpu_support.S̃ZbgxN^̋LqQ

l
@EVPRWX^̐ݒ̓Rg[̏̌ɍsׂȂ̂
@ftHg̃X^[gAbv[`ł͍s킸Ahardware_init_hook
@[`ōs@WƂB

----------------------------------------------------------------------

7.6 ̒

(1) hardware_init_hook̖߂Ԓnɂ
@X^[gAbv[`hardware_init_hook̖߂ԒnNWX^
@LRɕۑĂ̂ŁAj󂵂Ă͂ȂB
@ihardware_init_hook߂ƂɃNWX^LR𗘗pɒڃ
@xstart_1ɃWvĂOKj

(2) AZu[`Cꃋ[`ďoɂ
@PowerPC EABIŋK肳ĂR[OERxVł͊֐Ăяo
@̃t[X^bN|C^wĂ8oCg(sp+4)`(sp+7)
@nɌĂ΂ꂽ̏񂪑ҔB̂߁AAZu[`C
@ꃋ[`ĂяoӏiɊ݃Rg[ˑjł͒ӂ
@KvłB
@̓Iɂ͈ȉ̉ӏYB
 @(1) X^[gAbv[`
 @(2) ^XNN
 @  (2-1) ^XNO[`N
 @(3) ݃nhN
 @(4) CPUO[`N

@@@@@@@@@@@@X^bNLт
@@@@@@@@@@@@@@@@
 ֐ĂяoOsp  ---------------------- 
 @@@@@           |                      |
@@@@@         +4  ----------------------@
@@@@@            |                      |Cꃋ[`̌Ăяo
@@@@@         +8  ----------------------   ɂ菑܂

@X^bNɊmۂׂ}[W̃TCYcpu_config.hɃ}N
@STACK_MARGINƂĒ`ĂB


ύX

2004N109@Release1.4.1
E
   + [U[ύXłӏuser_config.hƂĕB

2004N514@
E
   + The IBM PowerPC Embedded EnvironmentA[LeN`Ɋւ
@@ Lqǉ
@@ @EIWiPowerPCA[LeN`
@@ @EThe IBM PowerPC Embedded EnvironmentA[LeN`
@@ ̗ΉƂ邽߁A
@@ @EUISAF[U[߃ZbgA[LeN`
@@ @EVEAFzA[LeN`
@@ @EOEAFA[LeN`
@@ ̊e`̃t@C\

2004N220@JSPJ[l Release1.4 Ή
     PowerPC32ł̃T|[gJn
