                TOPPERS/JSPͥ 桼ޥ˥奢 
                  H8åȰ¸ (H8C(HEW)б)
   
               Release 1.4.3бǽ: 08-Mar-2007
   
   ------------------------------------------------------------------------ 
    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-2007 by Industrial Technology Institute,
                                Miyagi Prefectural Government, JAPAN
    Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
                     Tomakomai National College of Technology, JAPAN
    Copyright (C) 2001-2004 by Kunihiko Ohnaka
    Copyright (C) 2004 by Katsuhiro Amano
   
    嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 

    ˤäƸɽƤ GNU General Public License  Version 2 ˵
    ҤƤ˸¤ꡤܥեȥܥեȥ
    ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
    ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
    (1) ܥեȥ򥽡ɤηѤˤϡ嵭
        ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
        ˴ޤޤƤ뤳ȡ
    (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
        ѤǤǺۤˤϡۤȼɥȡ
        ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
        ̵ݾڵǺܤ뤳ȡ
    (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
        ѤǤʤǺۤˤϡΤ줫ξ
        ȡ
      (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
          ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
      (b) ۤη֤̤ˡˤäơTOPPERSץȤ
          𤹤뤳ȡ
    (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
        ⡤嵭ԤTOPPERSץȤդ뤳ȡ
   
    ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥ
    TOPPERSץȤϡܥեȥ˴ؤơŬѲǽ
    ޤơʤݾڤԤʤޤܥեȥѤˤľ
    ŪޤϴŪʤ»˴ؤƤ⡤Ǥʤ
   
    @(#) $Id: h8-renesas.txt,v 1.9 2007/03/23 07:27:55 honda Exp $

   ------------------------------------------------------------------------
1.  H8åȰ¸γ

1. 1  åȥƥȳȯĶ

Release1.4.1ޤǤΥС򤪻Ȥ
Release1.4.2ߤΰѹƤ뤿ᡢС
򤴻Ѥϡ2.2.1 ߥϥɥϿˡפ򻲾Ȥ줿

ܼgccбäH8¸()ͥ 塼γȯ
ĶH8C(HEW)бΤǤ롣

  H8 ץåΥåȥƥϡH8/3048F-ONEܤʲ
ܡɤǤ롣

   ()Ż H8/3048F-ONEåȡʷHSB8F3048BF25

ʤ⤷ʤ 1 ĤκǾǤ⡢ɬפ RAM ̤ H8 ¢
RAM̤Ķ롣 Τᡢɥ쥹֤ͭˤɬפ롣
CPU⡼ɤϥɥХ󥹥ɥ⡼ɤǻѤ뤳ȤȤƤ롣Ρޥ
⡼ɤǻѤϡ֥ʬɬפ롣

1. 2  ݡȤ뵡ǽγ

  ǽɾѥƥﻲȵǽ (vxget_tim)ߥޥѹ
 (chg_ipm get_ipm)򥵥ݡȤƤ뤬 ߤζػߤȵ
(dis_intena_int) ϥݡȤƤʤ

1. 3  ¾ΥåȤؤΥݡƥ

  H8/300H ꡼ǤСݡƥ󥰤ưפ˽Ȼפ롣

1. 4  ꥢݡ (SCI)

  H8/3048FˤSCI0SCI12ܤΥꥢݡȤꡢuser_config.h
ƤTNUM_PORTˤ겿ܻѤ뤫Ǥ롣
ߤμǤ2ܤޤǻѤǤ롣 JSP ͥΥѤˤSCI0
ѤƤ롣 ꥢݡȤʲ˼ 

   ܡ졼ȡ38400[bps]
   ǡĹ8ӥå
   ȥåץӥåȡ1ӥå
   ѥƥʤ

2.  H8 ץå¸εǽ

  ͥȥƥॵӥǽǡH8¸ʬˤĤƲ⤹롣

2. 1  ǡ

  intunsigned intΥ 16ӥåȤǤ롣ޤϤ
顢64ӥåϥݡȤƤʤ

2. 2  ߴǽȳߥϥɥ

ͥγߤNMIΤߤǤ롥äơCPUå֤
롼ǤϡNMIʳγߤϤ٤ƶػߤƤ롥ŪˤϡCPU
å֤ǤCCR쥸IӥåȤUIӥåȤ򥻥åȤ˥ͥ
Υե饰ѿ򥻥åȤƤ롣
ܼǤSYSCR쥸UEӥåȤ򥯥ꥢCCR쥸IӥåȤ
UIӥåȤߥޥIPMInterrupt Priority MaskˤȤƻѤƤ
롣ʥ٥0ȥ٥1γߤѤǤ롣

DEF_INHǻꤹߥϥɥֹinhnoˤϡH8Ǥ㳰٥ֹ
ɽΥǡINHNOˤunsigned intƤ롥
DEF_INHǡ㳰٥ֹȤͭǤʤͤ䡤ߤбʤ
ֹꤷưݾڤʤ

2.2.1 ߥϥɥϿˡ

jsp-1.4.1 H8¸gccǡˤߥϥɥϿˡѹƤ롣
ѹϰʲ̤ꡣ
1ͥ򥵥ݡ
ߥץ饤ƥ٥0
ߥץ饤ƥ٥1
2ߥ٥2ǹԤ
(1) ׵ѥץ饤ƥ٥
ǥХߥȥ׵᤹ߥ٥
ƥǥХɥ饤ФνˤIPRAIPRB쥸
Ԥ
(2) ߵĻѥץ饤ƥ٥
ߥϥɥƤӽФ˳ߥޥꤹ
¾γ׵֥å뤿

3ǥХɥ饤Фνǡߥ٥Ԥ
define_int_plevel( )Ѥ롣
4cpu_support.SǹԤäƤʲεҤפˤʤä
ʳߥ٥Ԥä
ϡɥߵġ_xxxxx_enable_int
ϡɥ߶ػߡ_xxxxx_disable_int
gccǤǤϡ׵򥯥ꥢ_xxxxx_disable_int
ҤƤrenesasǤǤϳߥϥɥC롼
ޤϤƤФؿ˵ҤˡɸȤ롣
5桼Խ٤ʬ̥եʬΥƤ롣
ƥ¸intmask.inc
6ߥ٥ơ֥μư
ե졼DEF_INH( )ΰ鼫ư롣

ߥϥɥϿȼ
޳ߤ롣

(1) ߥϥɥε

ǤǤϡ׵򥯥ꥢɬפʾ
_xxxxx_disable_int˵ҤƤǤǤϳߥϥɥC
롼󡢤ޤϤƤФؿ˵Ҥˡɸ
롣

޳ߤǤε㡧
jsp/systask/timer.c
   timer_handler( )ƤӽФhw_timer_int_clear( )
jsp/config/h8-renesas/hw_timer.h


(2) ե졼󡦥եε

ե졼󡦥եεˡ¾ΥץåƱ
Ǥ롣
٥ֹjsp/config/h8-renesas/h8_3048f.hǥޥƤ롣
DEF_INH( )1γߥϥɥֹϥץץ
ˤʤäƤʤФʤʤʼưդбͥѥ᡼
٥ơ֥뼫ư⤽ꤷƤ롣

޳ߤǤε㡧
jsp/systask/timer.cfg
  DEF_INH(INHNO_TIMER, { TA_HLNG, timer_handler });


(3) ߥץ饤ƥ٥

IPRA,IPRBꤹ׵Υץ饤ƥ٥ȡ
ϥɥƤӽФ˳ߥޥꤹץ饤ƥ٥
ΣĤװꤹ롣

(3)-1 ׵ѥץ饤ƥ٥

cpu_initialize( )Ǥ٤Ƥγߤ٥0˽
Ƥ롣
ǥХɥ饤ФνǳװΥץ饤ƥ
ꤹ뤿δؿѰդƤ롣

CAPI
void define_int_plevel(const IRC *irc);

IRCInterrupt Request Controller
ߥȥ

ڥѥ᡼
const IRC *ircǡǼΰƬɥ쥹
   UB *iprꤹIPR쥸
   IPRAޤIPRB쥸
   UB bit IPR쥸γӥåֹ
   IPM ipmꤹߥ٥
   IPM_LEVEL0,IPM_LEVEL1Τ줫

ڥ꥿ѥ᡼
ʤ

ڵǽ
ircؤΰΥǡѤơǥХγߤ
ץ饤ƥ٥ꤹ롣
δؿƤӽФh8_sil.h򥤥󥯥롼ɤɬפ롣

ڥ޳ߤǤε

jsp/config/h8-renesas/cpu_config.c
const IRC TIMER_IRC = {(UB*)SYSTEM_TIMER_IPR,
                        SYSTEM_TIMER_IP_BIT,
                        SYSTEM_TIMER_IPM
                      };

jsp/config/h8-renesas/hw_timer.h
hw_timer_initialize( )
    define_int_plevel(&TIMER_IRC);

ѤͤϥޥƤ롣

IPRAIPRB쥸Υɥ쥹
jsp/config/h8-renesas/h8_3048f.h
      #define H8IPRA                  0xfffff8ul
      #define H8IPRB                  0xfffff9ul


IPRAIPRB쥸Υӥåֹ
jsp/config/h8-renesas/h8_3048f.h
IPRA
#define H8IPR_IRQ0_BIT          7u       /* IRQ0         */
#define H8IPR_IRQ1_BIT          6u       /* IRQ1         */
#define H8IPR_IRQ2_BIT          5u       /* IRQ2         */
#define H8IPR_IRQ3_BIT          5u       /* IRQ3         */
#define H8IPR_IRQ4_BIT          4u       /* IRQ4         */
#define H8IPR_IRQ5_BIT          4u       /* IRQ5         */
#define H8IPR_WDT_BIT           3u       /* WDT          */
#define H8IPR_CMI_BIT           3u       /* CMI          */
#define H8IPR_ITU0_BIT          2u       /* ITU0         */
#define H8IPR_ITU1_BIT          1u       /* ITU1         */
#define H8IPR_ITU2_BIT          0u       /* ITU2         */


IPRB
#define H8IPR_ITU3_BIT          7u       /* ITU3         */
#define H8IPR_ITU4_BIT          6u       /* ITU4         */
#define H8IPR_DMAC_BIT          5u       /* DMAC (CH0,1) */
#define H8IPR_SCI0_BIT          3u       /* SCI0         */
#define H8IPR_SCI1_BIT          2u       /* SCI1         */
#define H8IPR_AD_BIT            1u       /* A/D          */


(3)-2 ߵĻѥץ饤ƥ٥

****_intmaskޥ
H8¸ǤϡŪAPI DEF_INH( )ǳߥϥɥȡ
ͥ륳ե졼ˤꡢߤ
vector.src˼ư롣
ǤϡC롼****ƤӽФľγߵĻ
˳ߥޥꤹͤȤơޥ****_intmask
ȲꤷƤΤǡװIPM_LEVEL1IPM_LEVEL2Τ
줫뤳ȡ
ʬƱ٥γߤޥ뤿ᡢIPMˤϣľΥ٥
ꤹɬפΤǡդɬפǤ롣
intmask.incΤɸȤ롣

ڥ޳ߤǤε
jsp/config/h8-renesas/hsb8f3048bf25/intmask.inc

timer_handler_intmask:         .DEFINE         "IPM_LEVEL2"


2.2.2 ߥޥѹ

H8¸εǽȤơCCR쥸IPMͤѹ뤿Υӥ
chg_ipmȡȤ뤿Υӥget_ipm򥵥ݡȤƤ롥
ʤIPMͤɽǡIPMϡunsigned charƤ롥

ΥӥϡƥȤCPUå֤ξ
ˤΤ߸ƤӽФȤǤ롥chg_ipmˤIPM٥0ʳʤʤ
餫γߤػߤƤ֡ˤˤǤ⡤ǥѥå϶ػ
줺chg_ipmˤѹIPMͤϡǥѥåΥ˰
롥
㤨С륿IPM٥1ѹ塤餫γߤˤ̤
ڤؤȡڤؤäΥǤIPMϥ٥1ˤʤ롥

chg_ipm򥵥ݡȤ뤿ˡߥϥɥνʤɤ˥
إåɤƤ롥ǡSUPPORT_CHG_IPMȤޥˤꡤ
Υӥ򥵥ݡȤ뤫ɤڤؤ褦ˤƤ롥
SUPPORT_CHG_IPMϡuser_config.huser_config_asm.incǥޥ
Ƥ롥

H8¸γߥޥѹȤΤΥӥλͤϼ̤ꡥ

(1) chg_ipm			ߥޥѹ

CAPI
	ER ercd = chg_ipm(IPM ipm);

ڥѥ᡼
	IPM	ipm		ꤹ٤ IPM 

ڥ꥿ѥ᡼
	ER	ercd		顼

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

ڵǽ

IPMInterrupt Priority Maskˤ ipm ǻꤵ줿ͤꤹ롥
IPMѤͤȤơʲΥޥѰդƤ롣
IPM_LEVEL0٥룰٤Ƥγߤդ
IPM_LEVEL1٥룱NMIӥץ饤ƥ٥룱γߤΤߤ
դ
IPM_LEVEL2٥룲NMIʳγߤդʤ


IPM˻ꤷͤ嵭Υޥʳξ硤E_PAR顼Ȥʤ롥IPM 
IPM_LEVEL0ʳꤷǤ⡤ǥѥå϶ػߤʤޤ
ꤷIPMͤϡǥѥåѤ롥ǥѥåػߤ
ˤϡdis_dspʻѤФ褤

ʤΥӥѤơIPMIPM_LEVEL2NMIʳγߤ
ߡˤꤷƤCPUå֤Ȥ϶̤롣ʥǥѥåػߤ
ʤ

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

(2) get_ipm			ߥޥλ

CAPI
	ER ercd = get_ipm(IPM *p_ipm);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	ER	ercd		顼
	IPM	ipm		ߤ IPM 

ڥ顼ɡ
	E_CTX		ƥȥ顼

ڵǽ

ߤ IPMInterrupt Priority Maskˤͤɤ߽Фipm ֤

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


2. 3  CPU㳰ǽ CPU㳰ϥɥ

H8ץåΤCPU㳰򰷤ǽäƤʤᡢͥH8
¸CPU㳰򥵥ݡȤƤʤäơCPU 㳰ϥɥ
 define_exc( )ϲ⤷ʤؿǤ롣
¾ȤθߴΤᡢCPU㳰ϥɥֹΥǡ (EXCNO)  
unsigned intƤ롣

2. 4  ȥåץ⥸塼

  H8¸Υȥåץ⥸塼 (start.src) ϼ˼¹Ԥ
塢ͥ (kernel_start) ư롣 kernel_start 
Ƥ뤳ȤꤷƤʤ

   (1)   åݥ󥿤

   (2)   ϡɥ¸νθƽФ
HARDWARE_INIT_HOOKޥƤСϡɥ
¸νƽФδؿϥͥưˡ
åȰ¸ΥϡɥŪʽԤѰդ
δؿ̾HARDWARE_INIT_HOOKޥȤ롣
ܼǤϡ֤ͭ¾ˤ⡢SYSCR쥸
UEӥåȤΥꥢͥ쥸(IPRAIPRB)θ̳
ߤͥ٤ԤäƤ롣
HARDWARE_INIT_HOOKޥsys_config_asm.incǹԤΤ
ɸȤ롣

   (3)   Bν
           Bΰ 0 ꥢ롣

   (4)   Dν
           D RAM ž롣

   (5)   եȥĶ¸νθƽФ
SOFTWARE_INIT_HOOKޥƤСեȥ
¸νƽФδؿϥͥưˡ
եȥĶ(饤֥)¸νԤѰդ
롣㤨С饤֥νʤɤǤ롣
δؿ̾SOFTWARE_INIT_HOOKޥȤ롣
SOFTWARE_INIT_HOOKޥsys_config_asm.incǹԤΤ
ɸȤ롣

2. 5  ȯΥå̤ˤĤ

  ƥȼ¹Ի˳ߤȯη̡å
硢åˤϰʲξѤޤ뤿ᡢ32Х
ĥåΰ;ʬ˳ݤɬפ롣
ʤθ塢ΥäƤݤˡ㳰롼󤬵ư
Ϥ˥åΰ褬ɬפˤʤ롣

  åѤޤ
  
  CCR쥸
  er0er6

3.  ƥ¸εǽ

3. 1  ƥ९åɥ饤

  ƥ९åɥ饤Ф isig_tim ƽФϡ user_config.h
TIC_NUME  TIC_DENO ƤꡢǥեȤ 1[ms] Ǥ
롣
ѹ뤳Ȥǡisig_tim ƽФѹǤ롣 
٤ñ̤üˤʤͤꤹȡ isig_tim θƽФ˸
ȯ롣

H8/3048F-ONEåȡ
ޤ˶뤵Ƥ륯åȿ3072[kHz]Ǥ
ʥå24.576[MHz]8ʬˡ٤
(1000000/3072)[nsec]0.326[sec]
Ǥ롣
ǥեȤΥåǥХȤơH8/3048F-ONEǤITU0Ѥ
롣


3. 2  ǽɾѥƥﻲȵǽ

  H8Ǥϡǽɾѥƥﻲȵǽ (vxget_tim) 򥵥ݡȤƤ
롣

CAPI
ER vxget_tim(SYSUTIM *p_sysutim);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	SYSUTIM sysutimꥻåȤηв֡ʦsecñ̡

ڥ顼ɡ
	E_CTX󥿥ƥȤƤӽФ

ڵǽ
ꥻåȤηв֤secñ̤Ƿ¬¹ǽη¬ǽ󶡤
롣SYSUTIM UW(32 ӥåʤ)Ǥ뤿ᡢsecñ̤Ǵ
ȥꥻåȤ71ʬ˥Сեơ롣2
μ¹Ի֤¬ȤˤΥСեȯƤʤդɬ
פǤ롣

H8/3048F-ONEåȡ
޼Τ٤0.326[sec]Ǥꡢ1secñ̤ޤͭǤ롣

3. 3  ꥢ륤󥿥եɥ饤

  H8/3048F-ONEˤ SCI0  SCI1  2 ܤΥꥢݡȤꡢ
user_config.h Ƥ TNUM_PORT ˤ겿ܻѤ뤫Ǥ롣
ߤμǤ 2 ܤޤǻѤǤ롣 JSP ͥΥѤˤ SCI0
ѤƤ롣

3. 4  ޥå

3. 4. 1  H8/3048F-ONEåȤΥޥå

  ⡼6˸ꤵƤ롣

         0x00,0000 - 0x01,ffff  ¢ROM 128KB
         ٥ơ֥롢P,C,D
         0x20,0000 - 0x27,ffff  RAM 512KB
         R(D),B
         0xff,ef10 - 0xff,efff  ¢RAM 4KB
         󥿥ƥѥåꥢ


4.  ץץμ¹Լ

4. 1  ȯĶ

  ȯĶϡWindows 2000ǡ()ͥ 塼γȯ
ĶѤ
ܳȯѤġΥСʲ˼ 

   ѥ顢֥顢Ŭ󥱡ǥ
   ֡R0C40008XSW06R
   СV.6.1.2
   糫ȯĶ HEW4.02.00.022
   ǥХåE10T-USB Emulator
   źեեȥΥС:2.01.00

ޤ¾ˤⲼΥġ뤬ɬפˤʤ롣
   Visual C++6.0ޤVisual C++ .NET
   ե졼ӥɤ뤿ɬפȤʤ롣

   WindowsΥޥɡץץȤưPerl
   4.3 (1)κȤǻѤ롣
   Active Perl v5.8.8
       ۸http://www.ActiveState.com

4. 2  ե졼Υӥ

jsp/cfgǥ쥯ȥʲΤˤ륳ե졼ӥɤ롣
ӥˡ
jsp/cfg/vc_project/make.vbs¹Ԥ롣
Visual C++ѤCygwinѤ褬ΤǡVisual C++Ѥ
򤹤롣

ܤjsp/doc/windows.txt򻲾ȡ

4. 3  ץץΥӥ

(1) HEWǤΥӥ

ڡե򳫤
jsp/tools/H8-RENESAS/H8-RENESAS.hws
ڡȥǥ쥯ȥ꤬ۤʤݤηٹ𤬽Ф뤬̵뤹롣

 ġΥС󤬰ۤʤݤηٹ𤬽Ф
嵭ΥСŤġǤư̤ǧǤ롣

Υڡˤ4ĤΥץȤϿƤ롣
genoffsetTCB¤ΥեåȤ롣
libkernelͥ롦饤֥ΥӥɤԤ
configurationͥ롦ե졼󡢥٥ơ֥
ưԤ
sampleץ롦ץꥱΥӥɤԤ

ץȤΰ¸طΤᡢʲν֤ǥӥɤ롣
libkernelץȤ򥢥ƥ֥ץȤꤹ
libkernelץȤӥɤ
sampleץȤ򥢥ƥ֥ץȤꤹ
sampleץȤӥɤ

12Ϻǽ1ΤߤǤ褯ץꥱʬΤߥ
ɤѹϥӥɤɬפϤʤ
configurationץȤoffsetץȤϰ¸ץ
ȤȤƼưŪ˥ӥɤ롣

sampleץȤΥӥɤȡ
¹ԥե롡sample1.abs
S쥳ɥե롡sample1.mot
褦ꤷƤ롣

ա
libkernelΥӥɤgenoffsetץȤӥɤɬפ
뤬ץȴ֤ΰ¸طꤷƤsampleץȤ
ʰ¸طͥȤƤˤǼ¹ԤʤΤǡ
ưlibkernelץȤͽӥɤƤ


ReleaseӥɤDebugӥɤؤHEWΥӥɡե졼
ˤäƹԤӥɡե졼ѹȡե
¸å˼Ԥ礬롣
ʥ󥯥롼ɥե뤬Ĥʤˡ
ξϡʲμǲǤ롣
WindowsΥޥɡץץȡDOSˤ򳫤ơ
jsp/tools/H8-RENESAS/libkernelǥ쥯ȥclean.bat¹Ԥ롣
HEWΡ֥ӥɡסݡ֤٤Ƥӥɡץޥɤ¹Ԥ롣


(2) åȡܡɤΥ

ܡɤǥХåġΥޥ˥奢򻲾ȡ

4. 4  褯Ȳ

Q.genoffsetlibkernel, configurationsampleΤ褦˥ե
եȤ򥳥ѥ뤹եۤʤץ
˳ƤƤΤϲͳΤǤ礦

A.ǽƱץեȥѥե
褦ȤΤǤHEWϥץȤΥӥɤ򳫻Ϥ
ݤ˥եΰ¸ط򥹥󤷡ɬפʥե뤬
äƤʤӥɤߤޤäƤޤᡢߤΤ褦ʷʬ
ޤ
եν֤ĴǤޤ¸طΥ
ߥ󥰤Ѥʤ褦Ǥ

5.  ե빽

5. 1  ǥ쥯ȥꡦե빽

   (1)   config/h8-renesas/

            cpu_config.c     H8ץå¸Cؿ
            cpu_config.h     H8ץå¸ι
            cpu_config_asm.inc嵭Υ֥
            cpu_context.h    H8ץå¸Υƥ
            cpu_defs.h       H8ץå¸Υץꥱ
            cpu_insn.h       H8ץåü̿δؿ
            cpu_support.src  H8ץåΥ֥ؿ
            cpu_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            cpu_unrename.h   ͥ̾Υ͡
            cpu_rename.h     ͥ̾Υ͡
            cpu_rename_asm.inc 嵭Υ֥
            h8.h             H8/300Hץåζ
            makeoffset.c     offset.hݡѥե
            start.src        ȥåץ⥸塼
            tool_config.h    H8ץåγȯĶ¸⥸塼
            tool_defs.h      H8ץåγȯĶ¸
            vector_header.src ߥ٥ơ֥Υإåʬ
            h8_sil.c     SILH8ĥ Cؿ
            h8_sil.h     SILH8ĥ 
            
            h8_3048f.h       H8/3048Fץå
            H8/3048FH8/3048F-ONE
            h8_3048f_asm.inc 嵭Υ֥
            util.h       ӥåֹʤɤ
            util_asm.inc 嵭Υ֥

            hw_serial.c      SCI ѿȴؿ
            hw_serial.cfg    SCI Υե졼ե
            hw_serial.h      SCI 
            hw_timer.h       ITU 

   (2)   config/h8-renesas/hsb8f3048bf25/
           ()ŻH8/3048F-ONEåȡʷHSB8F3048BF25
           ܡɤΰ¸ʬ

            sys_config.c     HSB8F3048BF25ܡɰ¸Cؿ
            sys_config.h     HSB8F3048BF25ܡɰ¸ι
            sys_config_asm.inc嵭Υ֥
            sys_defs.h       HSB8F3048BF25ܡɰ¸Υץꥱ
             
            sys_support.src  HSB8F3048BF25ܡɰ¸Υ֥ؿ
            sys_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            sys_rename.h     ͥ̾Υ͡
            sys_unrename.h   ͥ̾Υ͡
            
            ʲϡ桼Խɬפե
            user_config.h桼ե졼
            user_config_asm.inc嵭Υ֥
            intmask.incߥޥ

   (3)   utils/
   ӥɤɬפʥ桼ƥƥ

          h8/  gccǤȶ̤Υץ
            grep_def_inh.plPerlץѥե륿
           
          h8-renesas/H8C¸Υץ
            copy_kernel_source.bat
             ͥΥɤAPI˥ԡ
             Хåե
            genoffsetTCB¤ΥեåȤ򻻽Фperlץ
            genvector.pl ٥ơ֥ѥץ
            gen_intentry.plѥץ
            

   (4)   tools/H8-RENESAS/
           HEW4.0ѤΥڡǥ쥯ȥ
           ()ŻH8/3048F-ONEåȡʷHSB8F3048BF25

            readme.txt
            ӥɼ򼨤readmeե
            H8-RENESAS.hws
            ڡե
            sample1.cfg
            ץ롦ץꥱΥե졼
            ե
            sample1.c
            ץ롦ץꥱC쥽ե
            sample1.h
            ץ롦ץꥱΥ󥯥롼ɡե

   (5)   tools/H8-RENESAS/genoffset/
   ʲνԤץȡǥ쥯ȥ
   ͥ롦ɤAPI˥ԡ
   TCB¤ΥեåȻ
   
           call_copy_kernel_source.bat
           copy_kernel_source.batƤӽФΥХåե

           call_genoffset.bat
           genoffsetץȤƤӽФΥХåե

   Debug/     ǥХåѥӥɥǥ쥯ȥ
   offset.incTCB¤Υեåե

   Release/   ǥХåѥӥɥǥ쥯ȥ
   offset.incTCB¤Υեåե

   (6)   tools/H8-RENESAS/libkernel
   ͥ롦饤֥ΥӥɤԤץȡǥ쥯ȥ
   
   kernel_source/ ֥եǼǥ쥯ȥ
   clean.bat֥ե뤿ΥХåե 

   (7)   tools/H8-RENESAS/configuration
   ͥ롦ե졼Ԥץȡǥ쥯ȥ
   
           call_configuration.bat
            ե졼ȥ٥ơ֥
            ץȤθƤӽФ

   Debug/     ǥХåѥӥɥǥ쥯ȥ
   kernel_id.h   IDưդե
   debug_kernel_cfg.c  ե졼νϷ
   debug_vector.src    ư줿ߥ٥ơ֥

   Release/   ǥХåѥӥɥǥ쥯ȥ
   kernel_id.h   IDưդե
   relase_kernel_cfg.c ե졼νϷ
   release_vector.src  ư줿ߥ٥ơ֥
   

   (7)   tools/H8-RENESAS/sample
   ץ롦ץꥱΥӥɤԤץȡǥ쥯ȥ
   
   set_sp.hdc ǥХåǥåݥ󥿤뤿
    Хåե


6. ץꥱȯԸξ

ץꥱȯԤͭפȻפˤĤƽҤ٤롣

6.1 ͥѹˡ

H8¸Ǥϡ͡ѹưפˤǤ褦սʲΣ
ΥեˤޤȤƤ롣
user_config.hCե
user_config_asm.inc֥ե

桼ϤΣĤΥեΥޥѹǡͥ
եɤޤʤƤ⤢٤ޤǥͥѹǤ롣
ܤˤäƤCѤȥ֥Ѥξɬפˤʤ
ա

ʲեγƥޥΰ̣Ҥ٤롣

Ū

(1) SUPPORT_CHG_IPM
chg_ipm򥵥ݡȤ뤫ɤ
ե롧user_config.huser_config_asm.inc

(2) SUPPORT_VXGET_TIM
vxget_tim򥵥ݡȤ뤫ɤ
ѹϡեʬٹԤɬפ롣
ե롧user_config.h

(3) CPU_CLOCK
ץå˶뤵륯åȿ [Hz]
ե롧user_config.huser_config_asm.inc

(4) STACKTOP
󥿥ƥѥåݥ󥿤ν
ե롧user_config_asm.inc

(5) E10T
E10T-USB EmulatorǥǥХåϤΥޥ롣
E10Tѻɬפʽ򥹥ȥåץ롼ǹԤ
ꡧ֥ΥץȤͿ롣
HEWΥӥɥץ


ꥢݡȴϢ

(1) TNUM_PORT
ݡȤ륷ꥢǥХοʺ 2
ե롧user_config.huser_config_asm.inc

ʲݡ2TNUM_PORT2ꤷΤͭǤ롣

(2) SYSTEM_PORTIDUSER_PORTID
ƥݡȡ桼ݡȤΥݡֹ
USER_PORTIDTNUM_PORT2ꤷΤͭǤ롣
ե롧user_config.h

(3) SCI_LOW_PORTID
ݡ󥰤ˤ٥ϤѤ륷ꥢݡȤΥݡֹ
ե롧user_config.h

(4) SCI_PORT1_BAUD_RATESCI_PORT2_BAUD_RATE
ݡ1,2Υܡ졼 [bps]
ե롧user_config.h

(5) SCI_PORT1_IPMSCI_PORT2_IPM
ݡ1,2γߥץ饤ƥ٥
ʳȯIRCؤ׵٥
ե롧user_config.h

(6) H8_CFG_SCI_ERR_HANDLER
ꥢ顼ߤ̾μߤȤ̤ΥϥɥƤ
ɤ
ե롧user_config.huser_config_asm.inc

޴Ϣ

(1) TIC_NUMETIC_DENO
ƥåμʬҡʬ
ե롧user_config.h

(2) TIMER_CLOCK
ޤ˶뤵륯åȿ[kHz]
ե롧user_config.h

(3) SYSTEM_TIMER_IPM
޳ߤΥץ饤ƥ٥
ʳȯIRCؤ׵٥
ե롧user_config.h


6.2 ץꥱ󶡤뵡ǽ

H8¸Ǥϥץꥱȯ䤹뤿ᡢʲεǽ󶡤
Ƥ롣

6.2.1Ԥ

¸sil.hǥץȥƤsil_dly_nseؿϰ
UINTǤꡢint2ХȤǤ뤳νϤǤ65secޤǤɽ
ǤʤĹԤԤᡢUWѹ̴ؿ
sil_dly_nse_longѰդƤ롣ɤnsecñ̤Ԥ֤ꤹ롣
t_services.hs_services.h򥤥󥯥롼ɤ뤳Ȥˤcpu_defs.h
ơѤǤ롣

CAPI
void sil_dly_nse_long(UW dlytim);

ڥѥ᡼
	UW dlytim Ԥ[nsec]

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

եȥ롼פˤԤԤ
Ʊͤεǽ󶡤sil_dly_nseؿϺ65secޤԤ֤
ΤФơsil_dly_nse_longؿ4.3secޤǻǤ롣

6.2.2I/OݡȤDDR쥸ؤΥǽ

H8I/OݡȤΥǡǥ쥯󡦥쥸DDRϽ񤭹ѤǤꡢ
ΤޤޤǤϽ˾ΥӥåȤѹ뤳ȤǤʤ
bset,bclr̿ǤԲġ
ޤͥΥȥåץ롼Ǥ⤤ĤDDR쥸Ф
ԤäƤ뤿ᡢΤޤޤǤϥͥȥץꥱδ֤
ݤĤȤǤʤ
ΤᡢܼǤϡ˥ƥݥѰդơDDRθͤ
ˡΤäƤ롣
ܵǽѤh8_sil.h򥤥󥯥롼ɤɬפ롣
ݡֹIO_PORTȤƤꡢIO_PORT1, IO_PORT2, IO_PORT3, 
IO_PORT4, IO_PORT5, IO_PORT6, IO_PORT8, IO_PORT9, IO_PORTA, IO_PORTB
줫ꤹ롣ʥݡ7ѤΤᡢDDR쥸ʤ
ݡֹȤơʳͤꤷassertʸǥ顼Ȥʤ롣


(1) sil_reb_ddrDDR쥸ɤ߽Ф

CAPI
UB sil_reb_ddr(IO_PORT port);

ڥѥ᡼
	IO_PORT portݡֹ

ڥ꥿ѥ᡼
	DDR쥸

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸ͤɤ߽Ф

(2) sil_wrb_ddrDDR쥸ؤν񤭹

CAPI
void sil_wrb_ddr(IO_PORT port, UB data);

ڥѥ᡼
	IO_PORT port ݡֹ
	UB data񤭹

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸data񤭹ࡣ

(3) sil_anb_ddrDDR쥸AND黻

CAPI
void sil_anb_ddr(IO_PORT port, UB data);

ڥѥ᡼
	IO_PORT port ݡֹ
	UB dataAND黻Ԥ

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸ФơdataȤAND黻
Ԥ

(4) sil_orb_ddrDDR쥸OR黻

CAPI
void sil_orb_ddr(IO_PORT port, UB data);

ڥѥ᡼
	IO_PORT port ݡֹ
	UB dataAND黻Ԥ

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸ФơdataȤOR黻
Ԥ


7. ͥܿԸξ

H8¸¾Υåȡܡɤؤܿݤɬפʾʲ
Ҥ٤롣

7.1 ޥ

(1) SYSCR_SYS
SYSCRν
ܡɰ¸
ӥå6-4 STSХޡ쥯
ӥå2 NMIEGNMIå
ե롧sys_config.h
ĤΥӥåȤCPU¸Ƥ롣

(2) HARDWARE_INIT_HOOK
ȥåץ롼󤫤ϡɥ¸νƤӽФȤϡ
Ƭɥ쥹ޥ롣
GNU ldPROVIDE̿Ʊεǽʤ
ե롧sys_config_asm.inc

(3) SOFTWARE_INIT_HOOK
ȥåץ롼󤫤饽եȥĶä˥饤֥˰¸ν
ƤӽФȤϡƬɥ쥹ޥ롣
ե롧sys_config_asm.inc

(4) WITHOUT_INNER_RAM
¢RAMѤʤϡΥޥ롣
¢RAMѤʤϡRAMͭˤʤʤȥåꥢ
ʤΤᡢϤ򥹥åѤH8ץåδؿƤӽФ
ʥ֥ǤäƤˤΥߥ󥰤ǤϤޤǤʤĤޤꡢ
HARDWARE_INIT_HOOKǼؿ̵ʬ̿äƤ롣
ʥ٥start_1򥨥ݡȤ롣
ե롧sys_config_asm.inc

(5) EXCLUSIVE_BUS
sleep̿ˤäƥեȥХ⡼ɤܤݡХ
׵ζ礬礬롣㤨СH8/3048FΥϡɥޥ˥
6.4.4 եȥХ⡼ɤؤܡ׻ȡ
EXCLUSIVE_BUSޥȡǥѥåsleep̿˥
׵¾椬롣
ե롧sys_config_asm.inc

(6) SOFTWARE_TERM_HOOK
atexit( )ƤӽФƤϡδؿ̾ޥ
롣atexit( )Ǥ
СƤӽФ
  ʤС⤷ʤʶ
ե롧sys_config.h

(7) DDR롼Τ

(a) DDR쥸Υɥ쥹
DDR쥸Υɥ쥹ʲΥޥ̾롣
    H8P1DDR, H8P2DDR, H8P3DDR, H8P4DDR, H8P5DDR, 
    H8P6DDR, H8P8DDR, H8P9DDR, H8PADDR, H8PBDDR
ե롧sys_config.h饤󥯥롼ɤե
h8_30xxf.hΤɸȤ롣

(b) DDR쥸ν
ȥåץ롼¹ľDDR쥸ͤʲΥޥ̾
롣
H8P1DDR0H8P2DDR0H8P3DDR0H8P4DDR0H8P5DDR0
H8P6DDR0H8P8DDR0H8P9DDR0H8PADDR0H8PBDDR0
ե롧sys_config.h

7.2 ӥѤΥץȤˤĤ

(a) jsp/tools/H8-RENESAS/configuration/call_configurator.bat

HEWǤϡʥڡǥ쥯ȥγˤ˳ġХ
ǸƤӽФʤᡢΤ褦ʥХåե𤷤ơ
ե졼
Perlץ
ƤӽФƤ롣
ʲxxxʬܿκݤѹɬפ롣

ƥ¸Υǥ쥯ȥ̾
cfg.exe -s %1 -c -obj -cpu h8 -system xxx
xxxˤϥƥ¸Υǥ쥯ȥ̾롣

٥ơ֥Υ
genvector.pl -s xxx
xxxˤϥ٥ơ֥Υ롣

ޤĶˤäƤPerlΥ󥿥ץ꥿ؤΥѥɬפˤʤǽ
롣

(b) jsp/utils/h8-renesas/genvector.pl

٥ơ֥ΤPerlץgenvector.plλ
  -s n		٥ơ֥Υ
  		nꤷƤꡢʳΰͿ줿
  		ư̤Ǥ롣

(c) vector.srcѤƤޥλ

C롼δؿ̾뤿ΥޥINTHDR_ENTRY
ѰդƤ롣ץgenvector.plϡintmaskͤintmask.inc
****_intmask̾ǥޥƤȲꤷƤ롣

ڥ֥ǤAPI
INTHDR_ENTRY c_routine, intmask

ڥѥ᡼
c_routineC롼δؿ̾
intmaskC롼ƤӽФľγߵĻ˳
 ޥꤹ
 IPM_LEVEL1IPM_LEVEL2Τ줫ˤ뤳ȡ
 ʬƱ٥γߤޥ뤿ᡢIPMˤ
 ľΥ٥ꤹ롣

Ÿ̡
ߤ

ڵǽ
C롼δؿ̾롣


٥ơ֥vector.srcˤޤȤ᤿̡٥
_kernel_****_entryϥХ˸ɬפʤʤäᡢ
٥ȤƤ롣ȼʤcpu_config.hINT_ENTRYޥǤ϶
ȤΥ󥿡ե碌뤿ᡢߡΥ٥̾ѤƤ롣


7.3 ¾
4.3(2)ΥץȹˤĤ
եʬlibkernelץȤΣեȤ
̤ɤʤ뤬ˡǤϡեʬֺǽ˼¹Ԥӥ
ɡեȤƤ⡢եʬԤ˥ѥ롦ե
Υեΰ¸طΥåԤ졢ե뤬ʤݤηٹ
̤ɽƤޤ


8. »

ۥȥޥOS
Windows9xϤϥݡȤʤ

ե졼Υå(chkˤϼƤʤ

HEW󶡤쥸եˤбƤʤ
gccǤȥǥХɥ饤Фͭ뤿

64ӥåϥݡȤʤ
ʽϤ»

ƥǽˤĤ
int2ХȤΤᡢƥǽ(syslog, syslog_n)%d, %u, %x,
 %XˤɽǤ2ХȥǡɽǤʤ2ХȤ礭
ǡɽϡɽǡ2ХȤĤʬ䤷ƥƥ
ǽϤɬפ롣ʥݥ󥿷ɽ%pȤ4ХȤޤɽ
Ǥ롣

л֤ˤĤ
RELTIM2ХȤΤᡢ1msecñ̤Ǵȡл֤65ä
¤롣RELTIM4ХȤˤjsp/include/itron.hˤ
RELTIMѹ롣

ѹtypedef	UINT RELTIM;            /* л */
ѹ塧typedef	UW RELTIM;              /* л */

atexit νȥǥȥ饯μ¹
(tool_config.hcall_atexit())
¾Ǥϥͥ饤֥ΥӥɤԤʤƤ⡢
software_term_hook()СưŪ˸ƤӽФ褦ˤʤäƤ
ʤäƤ뤬h8-renesasǤsoftware_term_hook()ؿ̾
SOFTWARE_TERM_HOOKȤͥ饤֥ӥɤɬ
פ롣
ܤϡ7.1 ޥפΡ(6) SOFTWARE_TERM_HOOKפ򻲾ȡ


9. gccǡjsp-1.4.1 H8¸ˤѹ

ߥϥɥϿˡѹ2.2Ỳȡ
ͥΥݡ
2٥
ȼߥޥѹȵǽ򥵥ݡ
Ԥ򥵥ݡ
DDR쥸롼ο
桼ܤ


ѹ

'05/05/10 ݡȳ

'05/12/28 Release1.4.2

ߥ٥ơ֥
ư褦ѹ
perlץȤΥҥɥȤϻʸԶ
ʸȾʸѹ
ߥޥˡ
桼ϳߥޥԤкѤ褦˻ѹ
Хä_kernel_xxxx_entry٥ϥ٥ѹ
ߤvector.src˽񤭽Ф褦ѹ
TCB¤ΤΥեåȻ
MOV.B  #8:8,R0LΤ褦Υӥå줿Ȥ˥ѡ
ǤʤԶ
եåͤ16ʿξб
makefile.makΥѥǡ֥ڡޤ󥰥͡פˤ
ƤεҤɲ
ϿƤʤߤΰ
cpu_experr( )
ȯľΥåݥ󥿤͡ʥեå͡ˤ
syslog( )4Хȥǡɽ뤿ᡢ%pʥݥ󥿷
Ѥ褦ѹ
%xˤǤ2ХȤɽǤʤ
no_reg_exception()
åФpcccrʬΥƤʤäԶ

syslogؿ4Хȥǡ򤽤ΤޤްˤƤԶ

intʡ2ХȡˤΰϤʤ
֥롼߷׸ľ
CPUåե饰Υꥢ֤θľ
ߤνи
¹Ԥ٤ʤγԤ
ʬ̿ľפor̿
ʤmov̿ǽʬ
DDR롼
sil_reb_ddr(), sil_wrb_ddr()
assertʸΰåϰϥߥ
ӥɼ
Releaseӥɻ˥⥸塼ֺŬѶŪŬѤ褦
ѹ
ƥǽ
ɽǤǡˤĤ»ɵ

'07/03/xx Release1.4.3
٥ơ֥뼫ư
perlץȤgccǤȴ˶̲
0٥б
٥ΰåɲ
ֹuĤƤνɲ
ܿθơgenvector.plν򣲤Ĥʬ
genvector.pl٥ơ֥H8SǤȶ̲
gen_intentry.plߤINTENTRYˤ
ȼʤgrep_def_inh.plȤΥ󥿡եѹ
βԥɤΰ㤤б
DEF_INHʸǲԤȥѡ˼Ԥ
filter1.plfilter2.pl򣱤ĤˤޤȤᡢgrep_def_inh.pl˲̾
gccǤHEWǤǸ̤filter2.plѰդɬפʤʤä
ߥ٥
h8_sil.hdefine_int_plevel()
cpu_insh.h򥤥󥯥롼ɤʤǡbitset(),bitclr()Ƥ
ФƤԶ
bitset, bitclr
ʥ֥ǵҤ˴ؿƤӽФޥѹ
ؿƤӽФΥСإåɤ̵
ӥɼ
DebugReleaseǥͥ륳ե졼̡̤
Ƥ褦ˡӥɼѹ
APIΥե륳ԡ˥ХåեѤ
̵Ѥʥå̤ɽ뤿ᡢperlǽ
褦ѹ
H8SǤȤ
ӥɤhmakeƤӽФХåեΤߤ
褦ӥɼѹ
ˤꡢ
hmakeؤΥѥ꤬פˤʤ롣
ʥץȥեβ
ӥǹԤäƤץץפˤʤΤ
֤û
ü쥸ϽΥ饤֥ѹ
DDRؿ
ݡֹηINTIO_PORTѹ
SILΥ֥ؿ򵡼¸
ѥηٹ򤹤뤿
ץץ
user_config.hTASK_PORTID
