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

	    Release 1.2бǽ: 14-Nov-2001

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

 Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2001 by Industrial Technology Institute,
                             Miyagi Prefectural Government, JAPAN

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

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

 @(#) $Id: sh1.txt,v 1.7 2001/11/14 06:31:16 imai Exp $
------------------------------------------------------------------------


SH1 åȰ¸γ

1.1 åȥƥȳȯĶ

SH1åΥåȥƥȤƤϡSH7032ܤʲΥܡ
򥵥ݡȤƤ롣

ԥޥԥ塼()KZ-SH1-01(CPU: HD6417032F20)
CQ()RISCɾå SH-1(CPU: HD6417032F20)
()׾SH7032ѥCPUܡSH1/CPUB(CPU: HD6417032F20)

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

1.2 ݡȤ뵡ǽγ

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

1.3 ¾ΥåȤؤΥݡƥ

СǤϡSH7032򥵥ݡȤƤ롣SH꡼SH1,SH2SH3
ߤǤϳߤΰʤۤʤ롣ŪˤSH1SH2ϥ٥ơ֥
Ȥơװ̤Ѱդ줿ߥϥɥʬ롣Ф
ơSH3SH4Ǥϳװˤ餺1Ʊγߥϥɥʬ
塢װåȤ줿쥸򻲾Ȥƺ١ʬ롣
SH2ؤΥݡƥ󥰤̳ƻΩȻ줬ԤʲURLǸƤ롣
http://www.hokkaido-iri.go.jp/denshi/OpenSource/Toppers/SH2JSP.html

1.4 GDB 

TOPPERS/JSP ͥ SH1ǤGDB֤󶡤ROMΤߤ򥵥ݡȤ
Ƥ롣ŪGDB֤Ȥ߹碌ƻѤ뤳Ȥθơ¿
ǤJSPͥƱͤˡ˥ޥWITH_STUBˤ拾
ѥԤäƤ롣
SH1ѤGDB֤ϸߡȯǤꡢˤϥͥƱͤ˸ͽ
Ǥ롣

1.5 ꥢݡ

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


SH1ץå¸εǽ

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

2.1 ǡ

int unsigned intΥ 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 Ƥ롣
֤Ȥ 14 ˥֤Ȥʤ 15 ꤷƤ롣

SH1¸εǽȤơ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 Ƥ롣

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

(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)ϡSH1 Ǥ ٥ơ֥
Υ٥ֹɽΥǡ(EXCNO) unsigned intƤ
롣DEF_EXC ǡ٥ֹȤͭǤʤͤ䡢CPU㳰бʤ
ꤷưݾڤʤ

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


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

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

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



2.4 ȥåץ⥸塼

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

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

ߥޥ 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 ȯΥå̤ˤĤ

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

JSPͥǤϥå¾˳ߥåѰդ󥿥
ƥȤϳߥåǼ¹Ԥ롣
SH1㳰/߼ջ˳߶ػߤˤʤ뵡ϡɥѰդ
ʤΤᡢߤǥեȥˤäƳ߶ػߤˤ
ɬפ롣Ǥϳ߶ػߤ˰ܹԤ뤿ˡʳߵĤξ
ǡ˥år0,r1򤹤롣SR(Status Register)PC(Program
Counter)ϳ߼դ˥ϡɥưŪԤ
ΤȤ¿ųߤȯȳߥåڤؤƱͤ
ե졼बå롣SH1ϳߥ٥뤬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 ƤӽФϡsys_defs.h 
TIC_NUME  TIC_DENO Ƥ(ǥեȤǤ 10ߥü)
ѹ뤳Ȥǡisig_tim ƤӽФѹ뤳ȤǤ롣
ޤ٤ 1äǤ뤿ᡢ1ñ̤üˤʤͤ
ˤϡisig_tim θƽФ˸뤳Ȥˤʤ롣
ǥեȤǤSH1¢ޤΥͥ0ѤƤ롣

3.2 ǽɾѥƥﻲȵǽ

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

3.3 ꥢ륤󥿥եɥ饤

ꥢ륤󥿥եɥ饤ФϡSH1¢SCISerial Communication
InterfaceˤΥͥ0򥵥ݡȤƤꡢͥΥѤ˻
Ƥ롣


3.4 ޥå

ԥޥԥ塼()KZ-SH1-01
CQ()RISCɾå SH-1

ΣĤΥܡɤϥޥåԥ󥰤ƱʤΤǡ¸Υɤ
̤Ǥ롣CQǤΥܡɤϲΡաפι򻲾ȡ
¸Ǥϡΰ 0x0000,0000  0x0003,ffff256KBǡΰ
0x0a00,0000  256KB󥿥ƥѤΥåΰ 
0x0a03,ffff ˳ݤƤ롣


CQǤΥܡɤϥǥեȤ8ӥåȥХROM1ġˤǤϡ
ɥ쥹Х³եȤƤ롣ΤᡢROMΥɥ쥹
¥ɥ쥹פʤ
°ROM˥ʳΥ桼ץROMϡ
ɥ쥹Х16ӥåȡROM2ġˤѹɬפ롣
CQǤΥޥ˥奢p17򻲾ȡ

()׾SH7032ѥCPUܡSH1/CPUB
¸Ǥϡΰ 0x0000,0000  0x0003,ffff256KBǡΰ
0x0f00,0000  8KB󥿥ƥѤΥåΰ 
0x0f00,1fff ˳ݤƤ롣SH1¢RAMѡ


ȯĶι

ȯĶιˡˤĤƤϡGNUȯĶۥޥ˥奢򻲾Ȥ뤳ȡ
ȯˤLinux(Red Hat Linux release 6.2 Kernel 2.2.14-5.0ˤѤ
ưǧġΥСϰʲ̤Ǥ롥
    BINUTILS : 2.10
    GCC-CORE : 2.95.2
    NEWLIB   : 1.8.1

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

¾

5.1 ǥ쥯ȥꡦե빽

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

    config/sh1/
	Makefile.config	MakefileSH1¸
	cpu_defs.h	ץå¸Υץꥱ
	cpu_config.h	ץå¸ι
	cpu_config.c	ץå¸δؿ
	cpu_support.S	ץå¸Υ֥롼
	cpu_context.h	ƥ
	makeoffset.c	offset.h ݡȥץ
	cpu_insn.h	٥Υץå롼
	start.S		ȥåץ⥸塼
	shelf.ld	󥫥ץ
	hw_timer.h      롼
	hw_serial.h     ꥢݡ롼
	sh1.h		SH1


    config/sh1/kz_sh1/
    	ԥޥԥ塼KZ-SH1-01Υܡɰ¸ʬ
    	CQRISCɾåSH1Ǥưǽ

	Makefile.config	MakefileKZ-SH1-01ܡɰ¸
	kz_sh1.h   	KZ-SH1-01ϡɥ
	sys_config.c	ƥ¸δؿ
	sys_config.h	ƥ¸ι
	sys_defs.h  	ƥ¸Υץꥱ
	sys_support.S	ƥ¸Υ֥롼


    config/sh1/tokiwa_sh1/
	Makefile.config	Makefileξ׾SH1/CPUBܡɰ¸
	tokiwaw_sh1.h   ׾ԤSH1/CPUBϡɥ
	sys_config.c	ƥ¸δؿ
	sys_config.h	ƥ¸ι
	sys_defs.h      ƥ¸Υץꥱ
	sys_support.S	ƥ¸Υ֥롼

