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

	    Release 1.4.1 бǽ: 07-Oct-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) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡢嵭Ԥդ뤳ȡ

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

. PowerPC32 åȰ¸γ

1.1 åȥƥȳȯĶ

PowerPC32ץåΥåȥƥȤƤϡʲΥץå
ݡȤƤ롣

MPC860T (ȥ)

ݡȤƤܡɤϡʲ̤Ǥ롣

()Хå TB6102S(CPU:MPC860T)

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

ǥ쥯ȥ깽ʲ˼PowerPCǤǤϥƥ¸ǰץ
å¸ʼ˳ߥȥ¸˹ԤäƤ롣Τᡢץ
¸ȥƥ¸Ȥɽϸ򾷤䤹Τǡʸ塢$CPU
ǥ쥯ȥ$SYSǥ쥯ȥȤɽѤ롣

$CPU=powerpc32ǥ쥯ȥ
PowerPC
PowerPCƥˤäƵꤵƤϰ
Ǥʬ
٤ƤPowerPCϥץåǶ̤˻ѤǤ롣

$SYSǥ쥯ȥ
Υܡɰ¸ʥƥ¸
ߥȥ¸
ޥɥ饤
ꥢɥ饤

ޤThe IBM PowerPC Embedded EnvironmentƥΥƥ
¸Υץ륳ɤեѤ˴ޤǤ뤬ưǧ
ƤʤʥǥХ¸Ŭɲäɬפ롣

1.2 ݡȤ뵡ǽγ

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

1.3 ¾ΥåȤؤΥݡƥ

PowerPCƥϥץåʬΤߤꤵƤꡢ
ΥѤץåȾƳΥ᡼ʲƤ롣
ȥλͤƥץơ˰ۤʤäƤ뤿ᡢ
ߥȥ¸ν$SYSǥ쥯ȥʥƥ¸ˤʬΥ
Ƥ롣¾PowerPCƥ㡦ץåإݡƥ󥰤
$SYSǥ쥯ȥʲФ褤
ݡƥ󥰤ιϳߥȥΥƥ˰¸롣
ʶŪʽܤϡ7. ͥܿԸξפ򻲾ȡ

ʤPowerPC 32ӥåȥƥоݤ˥ͥμԤ


1.4 GDB 

ߤ TOPPERS/JSPͥ PowerPC32ǤROMΤߤ򥵥ݡȤƤ롣
衢GDB֤Ȥ߹碌ƻѤ뤳Ȥθơ¾ǤJSP
ͥƱͤ˥GDB_STUBޥˤ拾ѥ
ԤäƤ롣

1.5 ꥢݡ

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

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

1.6 ǥ

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

 $SYSǥ쥯ȥ Makefile.config 
    ѥ륪ץ
    -mbigӥåǥ
    -mlittleȥ롦ǥ

 ƥuser_config.h
    SIL_ENDIAN
    SIL_ENDIAN_BIGӥåǥ
    SIL_ENDIAN_LITTLEȥ롦ǥ
    
  
  ȥ롦ǥǤưǧϹԤäƤʤ


. PowerPC32åȰ¸εǽ

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

2.1 ǡ

int unsigned intΥ 32ӥåȤǤ롣

2.2 ץơ¸εˡˤĤ

PowerPC32ƥϳߥȥꤷƤʤᡢƥ
ץơˤäƳ߽ۤʤ롣PowerPC32¸
μǤϡ$CPUǥ쥯ȥľˤPowerPC32ƥǵꤵ
ƤƤΤߤ򵭽Ҥץơ¸ä˳ߥ
¸ˤν$SYSǥ쥯ȥƤ롣
ѤåȰʳ˰ܿ뤿γ߽˴ؤ륤
եϡʸκǸˡ7. ͥܿԸξפȤ
ޤȤƵܤƤΤǻȤΤȡ

2.3 ߴǽ

ͥγߤȤƤϡ NMI롣äơCPUå֤
롼ǤϡNMI ʳγߤϤ٤ƶػߤƤ롣Ūˤϡ
MSR(Machine Status Register)EEӥåȤ0ꤵ롣

DEF_INH ǻꤹߥϥɥֹ(inhno)ϡץåΥϡɥ
ɽ˹碌뤳Ȥ§Ȥ롣

ߥޥͥΤΡAPIϰʲ̤Ǥ롣

(1) IPM
ߥȥγߥޥ򰷤ηǤ롣
(sys_defs.h)

(2) define_ipm         	߼ջγߥޥ
ʥץ
CAPI
        define_ipm(INHNO inhno, IPM ipm);

ڥѥ᡼
	INHNO inhno		ߥϥɥֹ
	IPM ipm			ߥޥ

ڥ꥿ѥ᡼
	ʤ

ڵǽ
ߥϥɥֹinhnoγߤդȤ˳
ȥIPMꤹͤ롣ߥȥ
¿ųߤΥ٥ϡɥǥݡȤƤС
եȥǤΤ褦ʽ򤹤ɬפϤʤ
ǥХɥ饤ФνǻѤ뤳ȤꤷƤ
  (sys_config.h)

2.4 chg_ipmΥݡȤˤĤ

PowerPC32ƥ¸εǽȤơߥȥγ
ޥͤѹ뤿Υӥ chg_ipm ȡȤ뤿
ӥ get_ipm 򥵥ݡȤƤ롣ʤߥޥӥå
ͤɽǡ IPM ϡ$SYSǥ쥯ȥˤƤ롣

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

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

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

(1) chg_ipm			ߥޥѹ

CAPI
	ER ercd = chg_ipm(IPM ipm);

ڥѥ᡼
	IPM	ipm		ꤹ٤ IPM 

ڥ꥿ѥ᡼
	ER	ercd		顼

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

ڵǽ

ߥޥ ipm ǻꤵ줿ͤꤹ롣ꤷͤߥ
ȥγߥޥϰäƤʤˤE_PAR顼

ޤꤷIPMͤϡǥѥåѤ롣

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

(2) get_ipm			ߥޥλ

CAPI
	ER ercd = get_ipm(IPM *p_ipm);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	ER	ercd		顼
	IPM	*p_ipm		ߤ IPM 

ڥ顼ɡ
	E_CTX			ƥȥ顼

ڵǽ

ߤ ߥޥͤɤ߽Фp_ipmؤΰ˽񤭹ࡣ

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

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


2.5 ץơ¸

2.5.1 MPC860T¸

(1) ֹ
     mpc860t.hƤ롣
     
                       SIUߥ
        ֹ        ޥ̾      װ 
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
             0x0        INTNO_IRQ0      IRQ0
             0x1        INTNO_LVL0      ٥0
             0x2        INTNO_IRQ1      IRQ1
             0x3        INTNO_LVL1      ٥1
             0x4        INTNO_IRQ2      IRQ2
             0x5        INTNO_LVL2      ٥2
             0x6        INTNO_IRQ3      IRQ3
             0x7        INTNO_LVL3      ٥3ʥޤǻѡ
             0x8        INTNO_IRQ4      IRQ4
             0x9        INTNO_LVL4      ٥4CPMǻѡ
             0xa        INTNO_IRQ5      IRQ5
             0xb        INTNO_LVL5      ٥5
             0xc        INTNO_IRQ6      IRQ6
             0xd        INTNO_LVL6      ٥6
             0xe        INTNO_IRQ7      IRQ7
             0xf        INTNO_LVL7      ٥7
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ

                       CPMߥ
        ֹ        ޥ̾      װ 
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ
            0x10        INTNO_ERR       顼
            0x11        INTNO_PC4       ѥI/O PC4
            0x12        INTNO_PC5       ѥI/O PC
            0x13        INTNO_SMC2      SMC2/PIP
            0x14        INTNO_SMC1      SMC1
            0x15        INTNO_SPI       SPI
            0x16        INTNO_PC6       ѥI/O PC6
            0x17        INTNO_TIMER4    4
            0x18                        ͽѤ
            0x19        INTNO_PC7       ѥI/O PC7
            0x1a        INTNO_PC8       ѥI/O PC8
            0x1b        INTNO_PC9       ѥI/O PC9
            0x1c        INTNO_TIMER3    3
            0x1d                        ͽѤ
            0x1e        INTNO_PC10      ѥI/O PC10
            0x1f        INTNO_PC11      ѥI/O PC11
            0x20        INTNO_I2C       I2C
            0x21        INTNO_RISC      RISCޥơ֥
            0x22        INTNO_TIMER2    2
            0x23                        ͽѤ
            0x24        INTNO_IDMA2     IDMA2
            0x25        INTNO_IDMA1     IDMA1
            0x26        INTNO_SDMA      SDMAͥХ顼
            0x27        INTNO_PC12      ѥI/O PC12
            0x28        INTNO_PC13      ѥI/O PC13
            0x29        INTNO_TIMER1    1
            0x2a        INTNO_PC14      ѥI/O PC14
            0x2b        INTNO_SCC4      SCC4
            0x2c        INTNO_SCC3      SCC3
            0x2d        INTNO_SCC2      SCC2
            0x2e        INTNO_SCC1      SCC1
            0x2f        INTNO_PC15      ѥI/O PC15
      ݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡݡ

SIUSystem Interface Unit
CPMCommunication Processor Module

(2) ߥȥγߥޥ

MPC860TǤϥץå¢Υƥࡦ󥿡ե˥åSIU
̿ץå⥸塼CPM줾ߥȥäƤꡢ
2Ĥγߥȥ餬³Ƥ롣
μǤϡSIUγߥޥSIUߥޥ쥸SIMASKˤΤ
ͥǴƤ롣CPMˤĤƤϳߥȥ餬¿ųߤ
٥ϡɥǥݡȤƤᡢͥǤCPMߥޥ
Ƥʤ
IPM
typedef UH IPM;
Ǥ롣sys_defs.h
ޤCPMSIUؤγ׵٥4ꤵƤ롣
user_config.hΥޥCPM_INT_LEVEL

(3) ͥǻѤƤǥХʳװ
MPC860T¢μߥPIT٥3
MPC860T¢ꥢ롦ޥ͡ȥȥSMC1
CPMߤΰʤΤǡ٥4

(4) ƥǥХγͥ
  ͥ : () ꥢSMC1ʥ٥4 > PITʥ٥3 ()



2.5 CPU㳰ǽCPU㳰ϥɥ

DEF_EXCǻꤹCPU㳰װֹ(excno)ϡPowerPCƥǵ
CPU㳰װֹȰабƤ롣
Υǡ(EXCNO) UINTƤ롣

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

CPU㳰װֹ桢ޥ̾CPU㳰װбطʲ˼

 1. EXC_NO_SYSTEM_RESET     ƥꥻå㳰
 2. EXC_NO_MACHINE_CHECK      ޥ󡦥å㳰
 3. EXC_NO_DSI                DSI㳰
                              ʥǡꡦ 
 4. EXC_NO_ISI                ISI㳰̿եå
 5. EXC_NO_EXTERNAL_INTERRUPT 
 6. EXC_NO_ALIGNMENT          饤㳰
 7. EXC_NO_PROGRAM            ץ㳰
 8. EXC_NO_FLOATING_POINT_UNAVAILABLE 
                              ưԲ
 9. EXC_NO_DECREMENTER        ǥ㳰
10. EXC_NO_IMPLEMENT_EXCEPTION_00A00
                              ץơͭ㳰0x00a00
12. EXC_NO_SYSTEM_CALL        ƥॳ
13. EXC_NO_TRACE              ȥ졼ʥץ
14. EXC_NO_FLOATING_POINT_ASSIST
                              ư

15ְʹߤ˥ץåΥץơͭ㳰0x01000ˤ
Ƥ⤢롣


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

p_excinf -->  --------------------
             |       r0           | 
              --------------------
             |       r3           |
              --------------------
             |       r4           |
              --------------------
             |       r5           |
              --------------------
             |       r6           |
              --------------------
             |       r7           |
              --------------------
             |       r8           |
              --------------------
             |       r9           |
              --------------------
             |       r10          |
              --------------------
             |       r11          |
              --------------------
             |       r12          |
              --------------------
             |       srr0         | /*   쥸0*/
              --------------------
             |       srr1         | /*   쥸1*/
              --------------------
             |       lr           | /*   󥯡쥸 */
              --------------------
             |       ctr          | /*   ȡ쥸 */
              --------------------
             |       cr           | /*   ǥ󡦥쥸 */
              --------------------
             |       xer          | /*   ڥ졼Ρ*/
              --------------------  /*       Ｑ̥쥸  */
             |       exc_no       | /*   㳰װֹ  */
              --------------------
             
(2) ̤ϿCPU㳰ȯν
̤ϿCPU㳰ȯϥͥ뤬ѰդƤǥեȤΥ
顼ԤŪˤCPU㳰ȯΥ쥸ƤCPU㳰װ
Ϥ̵¥롼פ롣


2.6 ư쥸
             
PowerPC32Ǥϡư쥸ץƤ롣
ͥư쥸򥵥ݡȤԤäƤ뤬µǤ
ưƥȤԤäƤʤʥݡƥ󥰤ѤMPC860Tư
Ƥʤ
(cpu_support.S)

2.7 ȥåץ⥸塼

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

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

(A) ץåν

ޥ󥹡ơ쥸ץåư⡼ɤ
롣

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

(B) hardware_init_hook θƽФ

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

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

(C) bssdataν

bss򥼥ꥢ롣

data롣ROMбΤˡROMRAM إԡ


(D) software_init_hook θƽФ

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

(E) ͥεư

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


. ƥ¸εǽ

3.1 ƥ९åɥ饤

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

ǥեȤǤϡΥޤѤƤ롣
(a) MPC860T¸
  MPC860T¢μߥPIT
  ʶ륯åȿ 12.5MHz

3.2 ǽɾѥƥﻲȵǽ

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

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

(a) MPC860T¸
ǽɾѥƥ٤80nsecǤ롣
  ʥޤؤζ륯åȿ 12.5MHz

3.3 ꥢ륤󥿥եɥ饤

(a) MPC860T
ꥢ륤󥿥եɥ饤ФϡMPC860T¢ꥢ롦ޥ͡
ȡȥSMC1򥵥ݡȤƤ롣ꥢΥݡȤݡ
ϸ1chǤꡢuser_config.h TNUM_PORTޥˤƤ
롣

3.4 ޥå

ޥåפ˴ؤϡ󥫥ץȤˤƹԤѥ
Ѥ󥫥ץȤ$SYS/Makefile.configǻꤹ롣

ơΥޥåפϰʲ̤Ǥ롣

(a) MPC860T
()Хå TB6102S

(a-1) ROMξDBGENV = ROMˡmpc860elf.ld
                                             (SDRAM 16Mbyte)
	 0x00000100 - 0x00001fff  㳰٥
         0x00002000 -             ǡΰ
		    - 0x01000000  󥿥ƥѥå

                                             (FLASH ROM 2Mbyte)
         0x10000100 - 0x100001ff  ꥻåȥ٥
         0x10000200 - 0x10001fff  㳰٥θǡ
         0x10002000 -             ΰ
		    - 0x10400000  ѿνͥǡ


ǤСꥻåľ0x00000100Ϥ¹ԤϤȤ
Υܡɤξϰʲ2ĤͳFlash ROMƬ+0x100
ʡ0x10000100ϡˤ¹ԤϤޤ롣
(1) Хơȡȥ餬ޤǤϡ٤ƤΥ
ꡦХ0Flash ROMˤ˥ҥåȤ롣
(2) ꥻåȻ˥ɥ쥹ХA20椬ԳˤʤäƤ롣


(a-2) RAMˤ٤ƥɤ
DBGENV = DOWNLOAD_TO_RAMˡram_mpc860elf.ld

                                             (SDRAM 16Mbyte)
	 0x00000100 - 0x00001fff  㳰٥
         0x00002000 -             ΰ
		    -             ѿνͥǡ
         0x00800000 -             ǡΰ
		    - 0x01000000  󥿥ƥѥå


JTAGǥХåġʤɤǡ˥ǥХåκݤˡץFlash 
RON˽񤭹ǤȺȸΨǥץΥ
֤û뤿ᡢ٤ƤΥץRAM˥ޥåפ󥯥
ץȤѰդƤ롣$SYS/Makefile.configDBGENV = DOWNLOAD_TO_RAM
򤹤ɬפʥޥɲäȶˡ󥯥ץȤ
ram_mpc860elf.ldꤵ롣Хơȥȥν
Flash ROM˽񤭹ǤޤǼ¹Ԥ(*1)ǥץ
ɤ0x100Ϥ¹Ԥ򳫻Ϥ롣

(*1) ROMǥӥɤΤFlash ROM˽񤭹Ǥ
 sys_support.SΥ٥copy_exception_vectorԤޤǼ¹Ԥɤ



. ȯĶι

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

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

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

The IBM PowerPC Embedded EnvironmentƥѤΥƥ¸
Υץ륳ɡʥե󥹼ˤϥ󥯥EDK6.2˴ޤޤ
GNUġ(gcc-2.95.3)ˤƥѥ뤬̤ȤޤǳǧƤ롣
EDK˴ޤޤGNUġCygwinѤˡϲURL򻲾ȡ
http://www.ertl.jp/~honda/microblaze/index.html

. »

64ӥåȡ⡼ɤϥݡȤƤʤ
ʳĥŪưפȻפ롣

ư쥸ϼµƥȤƤʤ
ʥݡƥ󥰤ѤMPC860Tư쥸Ƥʤ

ȥ롦ǥ󡦥⡼ɤǤμµƥȤԤäƤʤ

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

SIL_LOC_INT()ˤĤ
PowerPCǤǤSIL_LOC_INT()μCPUåƱ¸ˡѤƤ
롣ΤᡢSIL_LOC_INT()ǳ߶ػߤƤ֤Ǥϡsns_loc()
ڤvxsns_loc()CPUå֤Ƚ̤Ƥޤ
JSPͥǤϸߥåˤϥӥѤǤʤ
ꤷƤΤǡƶϾʤȻפ롣
jsp/user.txtΡ5.1.1 ߥå֤׻ȡ

.sdata.sbssˤĤ
ȥåץ롼󤪤ӥ󥯥ץȤ.sdata.sbss
бƤʤޤե졼󡦥å
.sdata.sbssΥޥåԥ󥰤бƤʤ

The IBM PowerPC Embedded EnvironmentƥˤĤ
ƥ¸Υץ륳ɤեѤ˴ޤǤ뤬ư
ǧƤʤʥѥ뤬̤ȤޤǤϳǧƤ롣
ºݤưˤϥǥХ¸Ŭɲäɬפ롣

. ¾

6.1 ǥ쥯ȥꡦե빽

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

    config/powerpc32/
        PowerPC32

	Makefile.config		MakefilePowerPC32åȰ¸
	cpu_defs.h		ץå¸Υץꥱ
	cpu_config.h		ץå¸ι
	cpu_config.c		ץå¸δؿ
	cpu_support.S		ץå¸Υ֥롼
	cpu_insn.h		٥Υץå롼
	cpu_context.h		ƥ
	cpu_rename.def		ͥ̾Υ͡
	cpu_rename.h		ͥ̾Υ͡
	cpu_unrename.h		ͥ̾Υ͡
	vea_oea.h		ꥸʥPowerPCƥ
	vea_oea_emb.h		The IBM PowerPC Embedded Environment
				ƥ
	tool_defs.h		ȯĶ¸Υץꥱ
				GNUȯĶѡ
	tool_config.h		ȯĶ¸ιGNUȯĶѡ
	powerpc32.h		PowerPC32Υ쥸̾ʤɤ
	start.S			ȥåס롼
	makeoffset.c		offset.h ݡȥץ

    config/powerpc32/mpc860t/
        MPC860T(ȥ)бƥ¸
          (()Хå TB6102Sб)

	Makefile.config		MakefileTB6102Sƥ¸
	user_config.h		桼
	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ȯĶѡ
	mpc860t.h   		MPC860TΥϡɥ
	mpc860_sil.h   		MPC860Tѥ롼
	tb6102s.h   		TB6102SܡɤΥϡɥ
	hw_timer.h		롼
	mpc860_pit.h		MPC860T¢ߥPIT
				롼
	hw_serial.h		SIOɥ饤
	hw_serial.cfg		SIOɥ饤ФΥե졼ե
	mpc860_smc.h		MPC860T¢ꥢ롦ޥ͡
				ȥSMC1롼
	mpc860_smc.c		Ʊ
	
	mpc860elf.ld		󥫥ץȡROMѡ
	mpc860elf_ram.ld	󥫥ץȡʥǥХåѡ

    config/powerpc32/ibm_ppc_emb_sample/
        The IBM PowerPC Embedded Environmentƥб
        ƥ¸Υץ륳

	Makefile.config		MakefileΥƥ¸
	user_config.h		桼
	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		롼
	pit.h			ޥǥХġ
	hw_serial.h		SIOɥ饤
	hw_serial.cfg		SIOɥ饤ФΥե졼ե
	smc.h			ꥢǥХ롼
	smc.c			Ʊ
	sample_elf.ld		󥫥ץȡROMѡ

6.2 桼

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

6.2.1 Makefile.config

¹ԴĶ
ѿDBGENVˤ¹ԴĶ򤹤롣
DBGENV=ROMROM
DBGENV=GDB_STUBGDB stub̤ݡȡ
DBGENV=DOWNLOAD_TO_RAM
ǥХåѤ˥ץ򤹤٤RAMΰ˥ޥåԥ󥰤
TB6101Sܡɸͭ

ǥ
    ѥ륪ץѿCOPTSˤȤƻꤹ
    -mbigӥåǥ
    -mlittleȥ롦ǥ

  
  ȥ롦ǥǤưǧϹԤäƤʤ

ޥåԥ
TEXT_START_ADDRESStextƬɥ쥹
DATA_START_ADDRESSdataƬɥ쥹

6.2.2 user_config.h

user_config.hǰʲΥޥԤȤˤꡢѹǤ롣

(1) 拾ѥѤΥե饰ȤѤޥ

SUPPORT_CHG_IPM
chg_ipm()ͭˤ롣

SUPPORT_VXGET_TIM
ǽɾѥƥﻲȵǽvxget_tim()ͭˤ롣

SIL_ENDIAN
    SIL_ENDIAN_BIGӥåǥ
    SIL_ENDIAN_LITTLEȥ롦ǥ

SUPPORT_POWER_MANAGEMENT
ץåϥ⡼ɤƤ롣
MSRPOWӥåȤͭ
¹ԲǽʥĤʤԤˤʤȤץå
ϥ⡼ɤ˰ܹԤ롣
ޥSAVE_POWPER򻲾ȡ

USE_MULTIPLE_WORD_LOAD_STORE
쥸ɡȥޥץ̿
Ѥ롣
ץơˤäƤƱνԤɡȥ̿
꤫ä٤ʤΤ

ABSOLUTE_JUMP_EXC_ENTRY
㳰٥֤ˤäƤϡ㳰٥textˤ³
νʬݡb̿ˤPCʬ0x07ff,ffffˤǤ
ʤ礬롣ABSOLUTE_JUMP_EXC_ENTRYޥ
ϤꤷʬڤؤꡢǤ롣

(2) ͤꤹޥ

STACKTOP
󥿥ƥѥåν

SYSTEM_CLOCK
ƥ९å[MHz]

INTLVL_TIMER
ޤγߥ٥

MPC860Tͭ
SIU٥ɽ

TIC_NUME
TIC_DENO
޳ߤˤisig_tim()ƤӽФ[msec]
줾ʬҡʬɽ
config.txt
(3) ƥå
򻲾

INTLVL_SERIAL
ꥢγߥ٥

MPC860Tͭ
ꥢγߥ٥̤Ǥ
CPM_INT_LEVELʸҡˤˤäƷꤹ롣

BAUD_RATE
ꥢ̿Υܡ졼
9600, 19200, 38400[bps]οͤ롣

ꥢݡȿ
TNUM_PORT
GDIC٥ǥݡȤ륷ꥢݡȤο
ʥͥδˤݡȿ
TNUM_SIOP
PDIC٥ǥݡȤ륷ꥢݡȤο
ʥǥХɥ饤С٥Υݡȿ
LOGTASK_PORTID
ƥѤ륷ꥢݡֹ


6.2.2.1ꥸʥPowerPCƥͭ

(1) 拾ѥѤΥե饰ȤѤޥ

SUPPORT_FLOATING_POINT_REG
ץåư쥸Ƥ롣
ǥѥåư쥸Ԥ

ʰܿѤMPC860Tư쥸Ƥʤ
ΥץϼµƥȤԤäƤʤ
ޤ8Хȡ饤Ȥ˹碌٤б
Ƥʤ

ߥ롼CPU㳰롼󤪤ӥ㳰롼
ư쥸Ѥϡƥ롼¦ư
쥸Ԥȡ

IMPLEMENT_EXCEPTION_00A00
ץơͭ㳰0x00a00Ѥ롣
ƤμΤ0xaܤCPU㳰ϥɥȤϿ뤳ȡ


CPU㳰ֹ0xaϥޥEXC_NO_IMPLEMENT_EXCEPTION_00A00
ȤơƤ롣
ϿCPU㳰ϥɥǤϡ̾CPU㳰ϥɥ
Ʊͤ˥ͥεǽѤ뤳ȤǤ롣

6.2.2.2The IBM PowerPC Embedded Environmentƥͭ
  ܺ٤ϡ7.5.6 IBMPowerPCбˤĤơפι򻲾

(1) 拾ѥѤΥե饰ȤѤޥ
SUPPORT_IBM_PPC_EMB_APU
  APUǥХ˼Ƥ뤳Ȥ򼨤
  APUAuxiliary Processor Unit

(2) ͤꤹޥ
NUM_IMPLEMENT_EXCEPTION
ץơͭ줿㳰ܿ
ʥͥϿC롼ܿ

6.2.2.3MPC860Tͭ

(1) 拾ѥѤΥե饰ȤѤޥ
SIL_DEBUG
SILѤȤΥǽͭˤʥǥХåѡ
ŪˤSILͳǥХؤΥ٥ʸ
ϥ롼sys_putc()𤷤ƥѤΥꥢ˵Ͽ롣
BOOLΥХѿsil_debug_onTRUEꤷSIL
ǽͭˤʤ롣sil_mpc860.h򥤥󥯥롼ɤ
sil_debug_onextern롣

SILΥǽǥͥɸΥǽѤƤ뤿ᡢ
ܥǽνϤɤν٤νϤ˳Ƥ뤫դɬפǤ
롣user.txtΡ4.4 ν١׻ȡ
㤨СLOG_EMERGSILΥϤ˳Ƥ硢ץ
ץǤϽLOG_EMERGϳ߶ưΥꥢϤ
٥ʸϤξ˽ϤˤʤäƤΤǡŪ
ȤˤŬʤʥϻˤ˥ȯ
ߤޤʤʤ롣ܵǽͭˤϲΤ褦SILΥ
ǽƤ٤Υ߶ưǥꥢϤʤʤ
褦侩롣

㡧SILΥǽ LOG_EMERG˳Ƥ
vmsk_log(LOG_UPTO(LOG_INFO) & ~LOG_MASK(LOG_EMERG), 
LOG_UPTO(LOG_EMERG));

ޥɥ饤Ѥȥƥ٤⤯ʤꡢۤ
ưʤʤΤ

(2) ͤꤹޥ
CPM_INT_LEVEL
CPMSIUؤγ׵٥
ꥢSMC1γ׵٥⤳Ʊˤʤ


6.3 Ѥߥޥ

֥Ѥ뵿̿Ȥơtool_config.hǰʲΥޥ
ѰդƤ롣

LI32(reg, imm) 32ӥå¨ͥ
ѥ쥸reg32ӥåȤ¨immɤ롣


̿li16ӥå¨ͤΥɤǤ롣

LOAD_VAL32(reg, val)32ӥåѿ
ѥ쥸regѿvalͤɤ롣

ʲΥ롼The IBM PowerPC Embedded Environmentƥˤ
DCRDevice Control Register˥Ѥvea_oea_emb.h
Ƥ롣ϥǥХɥ饤ФǻѤ뤳ȤꤷƤ롣

sil_rew_dcr(reg, val)DCRθͤɽФ
      reg:쥸ֹ
      val:ɤ߽ФͤǼѿUW

sil_wrw_dcr(reg, val)DCRθͤѹ
      reg:쥸ֹ
      val:ꤹͤǼ줿ѿUW

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

. ͥܿԸξ

ϡܥͥ¾ΤPowerPC32ƥ㡦ץåذ
뤿ξˤĤƤޤȤ롣


7.1 Ѹ
ICUInterrup Control Unit
ߥȥ
IPMInterrupt Priority Mask
ICUγߥޥ
ץơ¸
ʲPowerPCϥץåǤΥץåͭʬ
ץơ¸ȸƤ֡

7.2 쥸γ

PowerPCEABI()ˤ구ꤵ쥸
r0zeroޤѥ쥸
r1:åݥ
r2TOCTable of Contents
ŪC򥳥ѥ뤷ɤǤϻѤʤ
UNIXΥץؤǻѤƤ̾
JSPͥǤϤΥ쥸ѤƤʤ
ʳߤ㳰ԤäƤʤ
r3-4
r5-10
r13small data.sdataΥɥ쥹
r14-30ѿ
r31ѿޤenvironment pointer

PowerPC Embedded Application Binary Interface (EABI)Ȥ
PowerPCƥرĤꤷƤ롣


JSPͥPowerPC¸Ƿ᤿쥸
SPRG0ߡCPU㳰ͥȥ
SPRG1int_tableߥ٥Ƭɥ쥹
SPRG2exc_tableCPU㳰٥Ƭɥ쥹


MPC860Tͭ
SPRG3ipm_tableߥϥɥֹIPMбդơ֥Ƭ
ɥ쥹

7.3 OSξȽ̤μ

ƥ
SPRG0쥸ߡCPU㳰ͥȥ󥿤ȤƳƤƤꡢ
ƥȡ󥿥ƥȤȽ̤ԤäƤ롣

CPUå
ޥơ쥸MSREEӥåȤCPUå֤
ɽƤ롣
EE=0:CPUå
EE=1:CPUå

7.4 ǥ쥯ȥ깽
$CPU=powerpc32ǥ쥯ȥ
PowerPC
PowerPCƥˤäƵꤵƤϰ
Ǥʬ
٤ƤPowerPCϥץåǶ̤˻ѤǤ롣

$SYSǥ쥯ȥ
Υܡɰ¸ʥƥ¸
ߥȥ¸
ޥɥ饤
ꥢɥ饤

PowerPCƥǤϳߥȥϵꤵƤ餺ƥץ
å˰ۤʤߥȥ餬ץȤƤ롣ơ
٤ƤγߤƱߥ٥ʥեå0x500ˤʬ롣
PowerPC32¸Ǥϥץơ¸ʼ˳ߥȥ
¸ˤν$SYSǥ쥯ȥʬΥƤ롣ˤꡢ¾
PowerPC32ƥΥץåξ⡢ߥȥ¸
򵭽Ҥܥͥܿ뤳ȤǤ롣ʤ顢ܿ
빩ϳߥȥΥƥ礭¸롣
ʲPowerPC32ƥ㶦ȥץơ¸Υ
󥿥եҤ٤롣

7.5 PowerPC$SYSǥ쥯ȥ֤Υ󥿡ե
ե롧sys_config.hפȤҤϤΥޥ
sys_config.hޤsys_config.h饤󥯥롼ɤإå
ե뤳Ȥ̣롣

7.5.1 PowerPC˴ؤ

INIT_MSRޥMSRν͡ʥץ
  ꥻåľνͤΤޤޤǤ褤ʤƤ褤
  ե롧sys_config.h


7.5.2 ߥȥ¸

(1) TMAX_INTNOޥߥȥ餬̤Ǥװο
㤨Сꥢ̿μߤߤƱߥͥ
ͭƤ硢װȤƤϣĤȿ롣
  ե롧sys_config.h

(2) IPMߥޥΥǡ
ñʤޥǤϤʤtypedefȤä롣
ե롧sys_defs.h

(3) PUSH_ICU_IPMޥߥȥγߥޥ

ڵǽ
ߥȥγߥޥ򡢥å¸롣
֥̿ǵҤߤǻѤ롣

͡
˳ߥȥѤʤƥǤϡ뤳ȡ
r1,r13r31˲ƤϤʤ
IPMΥǡǡˤ餺νǥåݥ󥿤
4Хȶ뤳ȡ
ޤPUSH_ICU_IPMޥPOP_ICU_IPMޥФǼ¹Ԥ줿ϥ
åݥ󥿤뤳ȡ
ե롧sys_config.h
  
(4) POP_ICU_IPMޥߥȥγߥޥ

ڵǽ
ߥȥγߥޥ򡢥å롣
֥̿ǵҤߤνиǻѤ롣

͡
˳ߥȥѤʤƥǤϡ뤳ȡ
r1,r13r31˲ƤϤʤ
IPMΥǡǡˤ餺νǥåݥ󥿤
4Хȶ뤳ȡ
ޤPUSH_ICU_IPMޥPOP_ICU_IPMޥФǼ¹Ԥ줿ϥ
åݥ󥿤뤳ȡ
ե롧sys_config.h

(5) PROC_ICU(label)ޥ߽ICU¸ʬ

ڥѥ᡼
  label		ܥ뼱ѥޥ

ڵǽ
װȽǤŬڤʳߥϥɥƤӽФ
֥̿ǵҤ롣
ե롧sys_config.h


Υޥcpu_support.Sγ߽ǡPowerPCѥ쥸
ΰr0,r3r12ˡü쥸ߥȥIPM
åؤѤ֤ǸƤФ졢ʲνԤ

  ƤӽФȤ
  ʲνѤ֤ǸƤФ
  쥸
  ѥ쥸ΰ r0,r3r12
  ü쥸 SRR0SRR1LRCTRCRXER
  ߥȥIPM
  åؤ
  ƥȡʥ󥿥ˤδ
  
  
  װȽ
  ߥޥ
  ߵ
  C롼ƤӽФ
  ʳߥϥɥ̤ϿξϥǥեȤΥ顼
  ߶ػ
  ɬפǤС˳׵ե饰Υꥢ
  
ߵ٥ơ֥int_table[]PowerPCƤꡢ
Ƭɥ쥹SPRG1˳ǼƤ롣
ʡ7.2 쥸γơ׻ȡס

ŪAPI DEF_IHN줿ߥϥɥˤĤƤϡC롼
Ƭɥ쥹ߵ٥ơ֥Ͽư˶
ƤӽФ뤿(*1)PROC_ICUޥǤϥơ֥ƤϽ
ߤȤѤɤ
(*1) jsp/kernel/interrupt.cinterrupt_initialize()

PROC_ICUޥǤϳߥϥɥֹ򥤥ǥåȤƳߵ
ơ֥뤫C롼Ƭɥ쥹4ХȥǡȤƼ
ФȤǤ롣
ŪˤϰʲϤ򻲾Ȥɤ
int_tableƬɥ쥹ܡʳߥϥɥֹߣ

ºݤγװȳߥϥɥֹбطϥץơ
¸桼ΥɥȤ뤳ȡ
PROC_ICUޥǤϡC롼ƤӽФ׵ᤵ줿ߤ
Фߥϥɥ餬ϿƤ뤫å̤Ͽξϥ
եȤΥ顼Ԥʤʤ0ϤʬƤޤ

ߥϥɥ餬ϿƤʤߤˤĤƤϥȥåץ롼
ǳߵ٥ơ֥뤬0ǽƤ롣Τᡢ٥
ơ֥򻲾ȤСߥϥɥϿ̤ϿȽ̤Ԥ
Ǥ롣
MPC860TǤǤѤδؿƤӽФSIUߡCPMߤζʬ
ӳֹϤƤ롣

ΥޥϽʤγߤ¿ųߤξ2Ÿ롣
ޥʬ̿Ѥ硢ΤޤޤǤ2Ÿ줿
ǥܥ̾ͤ줾ʬ̤Ǥʤʤ붲줬
롣򤹤뤿ᡢPowerPCŸꤴȤ˰
ʤޥlabelϤ롣ŸΥܥ̾ΰѤ
뤳Ȥˤä2Ÿǥܥ̾ξͤɤȤǤ롣
  
͡
r1,r2,r13r31˲ƤϤʤ
ʥåݥ󥿤ϤΥޥλ˸ͤƤOK
PROC_ICUǥå˥ǡѤ硢ʲդɬפ
롣ʤΥޥϳߥȥIPM򤵤줿֤Ǽ¹Ԥ
뤿ᡢʳΥǡ򥤥ץơ¸˥å
ʤΤǤСʤ

C롼ƤӽФݤPowerPCΥ󥰡٥󥷥ˤ
(sp+4)(sp+7)Ϥϥǡ񤭹ޤΤǡåˤΰ
ǡ˲롣
ʡ7.6 աפ򻲾ȡ

㤨СMPC860TǤC롼󤫤äƤ˳׵򥯥ꥢ
뤿˳ֹMPC860T¸ȼˡ˥åѤǤ뤿
ᡢդɬפʥ˳롣γֹ򥹥åѤȤ
˾嵭ͽΰ褦֤Ƥ롣

å˳ݤ٤ޡΥcpu_config.h˥ޥ
STACK_MARGINȤƤ롣


64ӥåȲκݤˤդɬפǤ롣

ڻͷͳ
PROC_ICUޥγƽƤ̤PowerPCŬ
ӽФC롼θƤӽФPowerPCǹԤˡͤ
뤬ICUΥƥ㤬ʣʾ㡧ʣICUΥ³
Ƥˡ׵ΥꥢΨŪʷǼǤʤᡢ
٤Ƥν$SYSǥ쥯ȥˤȤ


(6) define_ipm߼ջIPMʥץ

CAPI
	void define_ipm(INHNO inhno, IPM ipm);

ڥѥ᡼
	INHNO inhno	ߥϥɥֹ
	IPM ipm		߼ջꤹIPM

ڥ꥿ѥ᡼
	ʤ

ڵǽ
ߥϥɥֹinhnoγߤդȤ˳ߥȥ
IPMꤹͤ롣

͡
ߥȥ餬¿ųߤΥ٥ϡɥǥݡȤ
ƤСեȥǤΤ褦ʽ򤹤ɬפϤʤ
ΥޥϥǥХɥ饤ФνǻѤ뤳ȤꤷƤ
롣

Ʊͳipm_talbe[]ɬܤǤϤʤ$CPUǥ쥯ȥȤΥ󥿡
եˤϴޤޤƤʤ
define_ipm()PROC_ICUˤäơipm_talbe[]PowerPC鱣
Ƥ롣


ʲΣĤΥޥSUPPORT_CHG_IPMƤΤɬפȤʤ롣
  

(7) CHECK_IPMޥIPMϰϥå

CAPI
	CHECK_IPM(IPM ipm);

ڥѥ᡼
	IPM ipm		å٤IPM

ڵǽ
chg_ipm()ˤipmϰϥåԤ
CǵҤ롣
ipmͤʤСercdE_PARchg_ipm()Υ٥exit
פ롣
ŪˤϰʲεҤƱνԤ

if (ipmͤ) {
	ercd = E_PAR;
	goto exit;
  }

  ե롧sys_config.h

(8) CHG_IPMޥIPMѹ
CAPI
	CHG_IPM(IPM ipm);

ڥѥ᡼
	IPM ipm		ꤹIPM

ڵǽ
chg_ipm()ˤipmߥȥγߥޥ˽񤭹ࡣ
CǵҤ롣
  ե롧sys_config.h

(9) GET_IPMޥIPMμ
CAPI
	GET_IPM(IPM *p_ipm);

ڥѥ᡼
	IPM *p_ipm	IPMǼΰؤΥݥ

ڵǽ
get_ipm()ˤƳߥȥγߥޥɤ߽Фp_ipm
ؤΰ˽񤭹ࡣ
CǵҤ롣
  ե롧sys_config.h

7.5.3 ǥХɥ饤дϢ
jsp-1.4ǥХɥ饤ФϡITRONǥХɥ饤߷ץɥ饤
פ˽򤷤ƺƤ롣
ITRONǥХɥ饤߷ץɥ饤פϲURL
Ǥ롣
http://www.ertl.jp/ITRON/GUIDE/device-j.html

SIL(System Interface Layer)PDIC(Primitive Device Interface 
Compornet)GDIC(General Device Interface Compornet)Ѹ
ITRONǥХɥ饤߷ץɥ饤פ򻲾ȡ
ñ˽Ҥ٤PDICϽhw_timer.hhw_serial.h
ߥȥ¸
CPU¸
ܡɰ¸
ǥХ¸ʬбGDICϤξ̥쥤ˤ붦
serial.cб롣

MPC860Tͭ
MPC860T¸ǤϼºݤΥǥХɥ饤ФǤ褯Ȥؿ
sil_mpc860t.hƤΤǡǥХɥ饤Ф򼫺
ѤƤɤ
ʥǥХ߷ץɥ饤ǤϴŪʥ꡼ɡ饤ȤΥؿ
ΤƤ롣


ͥưΤ˺ɬפʥǥХɥ饤дϢιܤʲ
˼

(1) SIL_ENDIANޥץåΥǥ
ե롧user_config.h
ӥåǥξ硧SIL_ENDIAN_BIG
ȥ륨ǥξ硧SIL_ENDIAN_LITTLE

(2) ޡɥ饤
hw_timer.hȤƤӽФPDIC$SYSǥ쥯ȥѰդ롣
ܤjsp/doc/config.txt򻲾

(3) ꥢ롦ɥ饤
hw_serial.hȤƤӽФPDICӳߥϥɥΥե
졼󡦥եhw_serial.cfg$SYSǥ쥯ȥѰդ롣
ꥢǥХդǥХǡPDIC¾ΥޥǤήѤǤ
硢PDICjsp/pdic/simple_sioǥ쥯ȥ֤롣
ܤjsp/doc/config.txt򻲾


7.5.4 ץ󰷤Υޥ

ʲΥޥϥץǤ롣

(1) SAVE_POWPERޥ
ǥѥåΤǼ¹ԲǽʥʤȤ˥ץå
⡼ɤ˰ܹԤ
֥̿ǵҤ롣
    ߤäƤ˳߶ػߤԤ
    r0r4Ƥ˲ƤϤʤʤ

͡
SUPPORT_POWER_MANAGEMENTޥƤΤͭȤʤ롣
  ե롧sys_config.h

ա
ֳߵġפȡ־ϥ⡼ɤؤΰܹԡפ򥢥ȥߥå˹Ԥʤ
åǤϡߤΥߥ󥰤ˤäƤϡֳߵġפȡ־
ϥ⡼ɤؤΰܹԡפδ֤ǳߤդƤޤտޤʤ
ϥ⡼ɤ˰ܹԤƤޤΤա
ߤˤäƼ¹ԲǽʥƤץå꡼פ
ޤޤǼ¹Ԥʤʤ롣ʼºݤˤϥ޳ߤˤϥ⡼
ΤǡԤ֤ϺǤ⥿޳߼
ǲ롣

(2) ȥ졼ʥץեɬס
tool_config.hƤޥ⡢ߥȥ
ư黻˥åȤ˰¸벼Υޥ$SYSǥ쥯ȥ
sys_tool_config.hʬΥ롣ΥޥΤϥץǤ뤬
sys_tool_config.hե뼫Τ϶ǤѰդɬפ롣
ե롧sys_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)		/*  ǰΤᡢʬΥƤ  */
LOG_GET_IPM_ENTER(p_ipm)
LOG_GET_IPM_LEAVE(ercd, ipm)

LOG_DSP_ENTER(tcb)
LOG_DSP_LEAVE(tcb)

7.5.5 MakefileϢ

$SYS/Makefile.configɬפʹܤʲ˽Ҥ٤롣

(1) å̾ʥѥ̾
powerpc-elf-gccʳΥѥѤѿTARGET롣
ƤʤϡǥեȤTARGETpowerpc-eabi-elfꤵ
롣

(2) ѥ륪ץ
ä˥ǥХåΥץgccΥСѤǥХåġ
˰¸ΤǡѿCOPTS롣

(3) оݤȤʤ륪֥ȥե
$SYSǥ쥯ȥ˥ե뤬ΤˤĤƤѿ
KERNEL_ASMOBJSʥ֥ˡKERNEL_COBJSCˤ˥֥
ե̾롣

(4) 󥯥ץ
ѿLDSCRIPTǥե̾ꤹ롣

(5) textdataƬɥ쥹
󥯥ץȤ˵ҤƤɤ

----------------------------------------------------------------------
7.5.6 IBMPowerPCбˤĤ

PowerPCƥ礭ʬơʲ2Ĥʬव롣
(1) ꥸʥPowerPCƥ
ȥ MPCեߥ
IBM PowerPC6xx/700եߥ
(2) The IBM PowerPC Embedded Environmentƥ
IBM PowerPC40xեߥ
(3) The PowerPC Book-Eƥ
the Enhanced PowerPCƥ
IBM PowerPC440եߥ

ޤPowerPCƥϥץꥱ٥뤫
饫ͥ롦٥ޤ3ĤΥ٥ʬƤꡢ嵭3Ĥ
ƥӤUISA϶̤VEAOEAϰۤʤ
ˤʤäƤ롣
UISAUser Instruction Set Architechture
桼̿᥻åȥƥ
桼٥̿᥻å
桼٥롦쥸
ǡ
ɥå󥰡⡼
VEA Virtual Environment Architechture
۴Ķƥ
ǥ
åޤ
OEA Opareting Environment Architechture
ưĶƥ

ѡХ٥롦쥸
㳰ǥ

ܼǤ(1),(2)ΥƥбǤ褦ˤʤäƤꡢ
ξԤڤؤIBM_PPC_EMB_ENVޥ̵ͭˤä
拾ѥԤäƤ롣
ޤξԤΰ㤤ۼ뤿ᡢVEAOEA˴ؤ뵭Ҥϳƥ
ƥ˥إåեʬƤ롣
vea_oea.hꥸʥPowerPCƥ
vea_oea_emb.hThe IBM PowerPC Embedded Environmentƥ

ʤThe PowerPC Book-Eƥˤ̤бǤ롣
Υƥؤΰܿ˾̤줿

ʲ$SYSǥ쥯ȥǳƥƥꤹ٤ƤҤ٤롣

(1) ꥸʥPowerPCƥͭ

IMPLEMENT_EXCEPTION_01000_PROCޥʥץ
ץơͭ㳰0x01000νƤޥ

ƤϥץåΥץơͭΤΤʤΤǡ
ͥˤ줺ΥޥƤ
ľܸƤӽФ롣ʤĤޤꡢͥδ
ΤᡢνǥͥεǽƤӽФư̤
롣

եå0x01000ʹߤ֤㳰װϣĤȤϸ¤ʤ2İʾ
㳰٥֤硢եåȤλˡդ뤳ȡ
Ūˤ
    .org եå - EXCEPTION_VECTOR_BASE
Τ褦˻ꤹ롣ܤcpu_support.SγĽ򻲾ȡ

  ե롧sys_config.h


(2) The IBM PowerPC Embedded Environmentƥͭ

ޥ

A-1 拾ѥѥޥ

  ʲΥޥ$SYS/Makefile.configǥѥ顦
  ץȤͿ

IBM_PPC_EMB_ENV
  ΥޥƤ硢The IBM PowerPC Embedded 
  EnvironmentƥǤ뤳Ȥ򼨤

A-2 㳰롼
߷
Ū˰ʲ㳰ǥӥѤ
ꤷƤʤʥͥ
  㳰롼ǥӥƤӽФȤ
  ưݾڤʤ

Ƥϥ֥ǵҤ롣
CǤεҤꤷƤʤΤǡ嵭Τ褦
߷ˤȤʤ롣

ƥ塢0x10ХȤΰ褬Ƥ
ʤ㳰װˤĤƤϡʬ̿Ȥä̤ξ
롼֤뤳

㳰饹Critical㳰Ǥ̾㳰Ȱۤʤꡢ
  ꥿̿rfciѤ롣
  (rfciReturn From Critical Interrupt) 
  ʲΣĤ㳰װ롣
  Critical Input
  Machine Check
  Watchdoc Timer
  Debug

ʲΥޥϤsys_config.hޤϤ饤󥯥롼ɤ
إåե뤳ȡ

ʲ㳰ɬܤǤ롣

CRITICAL_INTERRUPT_EXCEPTION_PROC
Critical Interrupt㳰ν
㳰٥0x100
㳰饹Critical
  ̾㳰Ȱۤʤꡢ꥿̿rfciѤ롣
  (rfciReturn From Critical Interrupt) 
  Critical Interruptϥץơ¸ʤΤ
  ƤϥޥƤ
0x100ХȤΰ褬ƤƤʤΤ
  ϰϤĶϻĤʬ̤ξ֤ơ
  ʬ뤳

 
 Critical Interruptϥͥ㳰Ȥ롣
 ʤν롼ǥӥѤʤ

MACHINE_CHECK_PROC
Machine Check㳰ν
㳰٥0x200
㳰饹Critical
  ̾㳰Ȱۤʤꡢ꥿̿rfciѤ롣
  (rfciReturn From Critical Interrupt) 
0x100ХȤΰ褬ƤƤʤΤ
  ϰϤĶϻĤʬ̤ξ֤ơ
  ʬ뤳

 
 Machine Checkϥͥ㳰Ȥ롣
 ʤν롼ǥӥѤʤ

PROGRAMMABLE_INTERVAL_TIMER_PROC
Programmable Interval timer㳰ν
㳰٥0x1000
0x10ХȤΰ褬ƤƤʤΤ
  ϰϤĶϻĤʬ̤ξ֤ơ
  ʬ뤳
 ʰʲΥޥƱ͡

FIXED_INTERVAL_TIMER_PROC
Fixed Interval timer㳰ν
㳰٥0x1010
0x10ХȤΰ褬ƤƤʤΤ

WATCHDOG_TIMER_PROC
Watchdog timer㳰ν
㳰٥0x1020
㳰饹Critical
  ̾㳰Ȱۤʤꡢ꥿̿rfciѤ롣
  (rfciReturn From Critical Interrupt) 
0x10ХȤΰ褬ƤƤʤΤ

DATA_TLB_MISS_PROC
Data TLB miss㳰ν
㳰٥0x1100
0x10ХȤΰ褬ƤƤʤΤ

INSTRUCTION_TLB_MISS_PROC
Instruction TLB miss㳰ν
㳰٥0x1200
0x10ХȤΰ褬ƤƤʤΤ

DEBUG_PROC
Debug㳰ν
㳰٥0x2000
0x10ХȤΰ褬ƤƤʤΤ
װϰʲ7
Trap
Instruction address compare
Data address compare
Instruction complete
Branch taken
Exception
Unconditional debug event


ʲ㳰ϥץǤ롣

IMPLEMENT_EXCEPTION_D00_PROCʥץ
  ץơѤν 
  եåȡ0xd00-0xff0
    ץơͭ㳰٥ʣĤȤϸ¤ʤˤ
    ¾Ӥ˻Ѥ롣

  եåȤλˡդ뤳ȡ
  Ūˤ
       .org եå - EXCEPTION_VECTOR_BASE
  Τ褦˻ꤹ롣ܤ¾㳰װγĽ򻲾ȡ
    㤨СPowerPC405Ǥϥեå0xf20
    APU Unavailable㳰ν֤롣

IMPLEMENT_EXCEPTION_02010_PROCʥץ
  ץơѤν 
  եåȡ0x2010-0x2ff0
    ץơͭ㳰٥ʣĤȤϸ¤ʤˤ
    ¾Ӥ˻Ѥ

  եåȤλˡդ뤳ȡ
  Ūˤ
       .org եå - EXCEPTION_VECTOR_BASE
  Τ褦˻ꤹ롣ܤ¾㳰װγĽ򻲾ȡ


¡󥯥ץ

ꥻåȥ٥0xffff,fffcϤ˸ꤵƤ롣
ꥻåȽѤreset_vectorƤ롣
󥯥ץȤǤΥ0xffff,ffec
(0xffff,fffc - 4Хȡ4̿)֤롣
ܤcpu_support.SΥꥻåȥ٥εҸĽ򻲾


EVPR쥸ϥꥳȥνθ˹Ԥ٤ʤΤ
ǥեȤΥȥåץ롼ǤϹԤ鷺hardware_init_hook
롼ǹԤˡɸȤ롣

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

7.6 

(1) hardware_init_hookϤˤĤ
ȥåץ롼hardware_init_hookϤ󥯥쥸
LR¸ƤΤǡ˲ƤϤʤ
hardware_init_hookȤ˥󥯥쥸LRѤľܥ
٥start_1˥פƤOK

(2) ֥롼󤫤C롼ƽФˤĤ
PowerPC EABIǵꤵƤ륳󥰡٥󥷥ǤϴؿƤӽ
Υե졼ॹåݥ󥿤ؤƤ8Х(sp+4)(sp+7)
Ϥ˸ƤФ줿¦ξ򤵤롣Τᡢ֥롼󤫤C
롼ƤӽФսä˳ߥȥ¸ˤǤդ
ɬפǤ롣
Ūˤϰʲβս꤬롣
 (1) ȥåץ롼
 (2) ư
   (2-1) 㳰롼ư
 (3) ߥϥɥ鵯ư
 (4) CPU㳰롼ư

åӤ

 ؿƤӽФsp  ---------------------- 
            |                      |
         +4  ----------------------
            |                      |C롼θƤӽФ
         +8  ----------------------   ˤ񤭹ޤ

å˳ݤ٤ޡΥcpu_config.h˥ޥ
STACK_MARGINȤƤ롣


ѹ

2004ǯ109Release1.4.1

   + 桼ѹǤսuser_config.hȤʬΥ

2004ǯ514

   + The IBM PowerPC Embedded Environmentƥ˴ؤ
 Ҥɲ
 ꥸʥPowerPCƥ
 The IBM PowerPC Embedded Environmentƥ
 ξбȤ뤿ᡢ
 UISA桼̿᥻åȥƥ
 VEA۴Ķƥ
 OEAưĶƥ
 γΥե빽ľ

2004ǯ220JSPͥ Release1.4 б
     PowerPC32ǤΥݡȤ򳫻
