                TOPPERS/JSPͥ 桼ޥ˥奢 
                            H8 åȰ¸
   
               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.txt,v 1.21 2007/03/23 07:19:27 honda Exp $

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

1.  H8 åȰ¸γ

Release1.4.1ޤǤΥС򤪻Ȥ
ϤˤĤ
Ż̾ܡ°GNUȯĶϥС󤬸Ťᡢ
ݡȤƤʤʡ4. 1  ȯĶιۡפ򻲾ȡ
ߤΰˤĤ
Release1.4.2ߤΰѹƤ뤿ᡢС
򤴻Ѥϡ2. 2. 2  ߥϥɥϿפ򻲾Ȥ


1. 1  åȥƥȳȯĶ

  H8 ץåΥåȥƥϡH8/3052F H8/3069Fܤ
ʲΥܡɤǤ롣

   () Ż̾ AKI-H8/3052F (AKI-H8-USB ܡȤ)
   () Ż̾ AKI-H8/3069F

ʲΥܡɤϻͼǤꡢưǧϹԤäƤʤ
   () Ż̾ AKI-H8/3048F
   (ͭ) ̿ӥ NKEV-010H8(H8/3069F)

ʤ⤷ʤ 1 ĤκǾǤ⡢H8/3069FʳǤɬפRAM
̤ץå¢RAM ̤ΤĶ롣Τᳰ RAM ߤɬ
ǡɥ쥹֤ͭˤɬפ롣ߤιǤϡH8/3048F 
⡼ 5 ¢ ROMͭĥ 1M Хȥ⡼ɡ H8/3052F ⡼ 6 
¢ ROM ͭĥ 16MХȥ⡼ɡ H8/3069F ⡼ 5 ¢ROMͭ
ĥ 16M Хȥ⡼ɤꤷƤ롣
  ȯĶϡ Windows 2000 cygwin γȯĶѤޤ
Хå⡼ɤȥ꡼⡼ɤǥ⥸塼μ¹ˡۤʤäƤ롣
Хå⡼ɤǤ ()ŵ̾˥ǥХå (ʲ˥)
ޤѾҹزʰץ˥ (ʲ ʰץ˥) H8 ¢
եå ROM ˽񤭹ߡǥХå⥸塼 RAM ˥ɤ
ƥǥХåԤ꡼⡼ɤǤϡǥХåνλ⥸塼
¢եå ROM ˽񤭹ळȤꤷƤ롣 ǥХå⡼ɤȥ꡼
⡼ɤڤؤϡ ǥ쥯ȥ jsp/config/h8/$(SYS) ˤ 
Makefile.config DBGENV ˤ롣
$(SYS)ˤϥܡ̾򼨤
ޤͼȤeCos/RedBoot ץǥХå(ʲRedBoot)
бƤ뤬µƥȤϹԤäƤʤܤϿ򻲾ȡ

  NKEV-010H8GDB STUBˤ⡼ȥǥХåꤷƤ롣ջ
ܤϿ򻲾ȡ


AKI-H8/3052FϡAKI-H8-USBܡȤUSBͥŸ򶡵뤹뤳
Ǥ롣̾DCŸͥŸ򶡵뤹ϡŸͥ
Ϥ񹳤ɲäɬפ롣
AKI-H8/3069FϡåȤȤʹߤǤϳRAMη֤ۤʤäƤ롣
ޤåȤǤϳRAMʬȾդ褦ˤʤäƤΤǡ
ɤ˳Τϥܡɤ°ޥ˥奢򻲾ȤΤȡ

;
(toppers-users 1375) akih8_3069f  ¸νˤĤơ

1. 2  ݡȤ뵡ǽγ

  ǽɾѥƥﻲȵǽ (vxget_tim) ȳߥޥѹ
 (chg_ixx get_ixx)ϥݡȤƤ뤬ߤζػߤȵ
(dis_intena_int) ϥݡȤƤʤ

1. 3  ¾ΥåȤؤΥݡƥ

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

1. 4  ꥢݡ (SCI)

  H8/3048F  H8/3052F ˤ SCI0  SCI1  2 ܡH8/3069F ˤ SCI0 
 SCI2  3 ܤΥꥢݡȤꡢsys_config.h Ƥ 
TNUM_PORT ˤ겿ܻѤ뤫Ǥ롣
ߤμǤ 3ܤޤǻѤǤ롣 JSP ͥΥѤˤ SCI1
ѤƤ롣 ꥢݡȤʲ˼ 

   ܡ쥤ȡ38400[bps]
   ǡĹ8 ӥå
   ȥåץӥåȡ1 ӥå
   ѥƥʤ
   ե桧Xon/Xoff

1. 4. 1  ݡֹγƤˤĤ

ݡIDֹʥޥ̾ˡǥХֹ桡
SYSTEM_PORTIDˡSCI1ƥ
USER_PORTIDˡSCI0桼ץꥱ
USER2_PORTIDˡ SCI2桼ץꥱ

ݡIDΥޥˤĤƤϡ֥ޥˡפ򻲾

2.  H8 ץå¸εǽ

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

2. 1  ǡ

  int  unsigned int Υ 32 ӥåȤǤ롣ޤ64ӥå
ǤDUDѤǤ뤫ݤϽϤƤޥ
__LONG_LONG_MAX__ͤȽ̤Ƥ롣
gcc-2.95.3Ǥϥѥǡ64ӥåϰʤ

2. 2  ߴǽȳߥϥɥ

ͥγߤNMIΤߤǤ롥äơCPUå֤
롼ǤϡNMIʳγߤϤ٤ƶػߤƤ롥ŪˤϡCPU
å֤ǤCCR쥸IӥåȤUIӥåȤ򥻥åȤ˥ͥ
Υե饰ѿ򥻥åȤƤ롣

CPUå֤ɽե饰ѿBOOL iscpulocked
TRUE CPUå
FALSECPUå

ܼǤSYSCR쥸UEӥåȤ򥯥ꥢCCR쥸IӥåȤ
UIӥåȤߥޥIPMInterrupt Priority MaskˤȤƻѤƤ
롣ʥ٥0ȥ٥1γߤѤǤ롣

DEF_INHǻꤹߥϥɥֹinhnoˤϡH8Ǥ㳰٥ֹ
ɽΥǡINHNOˤunsigned intƤ롥
DEF_INHǡ㳰٥ֹȤͭǤʤͤ䡤ߤбʤ
ֹꤷưݾڤʤ
H8 γߥ٥ ROM ΰˤꡢ ưŪƤѹ뤿ˤ
ˡɬפǤ뤿ᡢưŪʥϥɥϿǽϤʤ
äơ ߥϥɥؿ define_inh( )ϲ⤷ʤؿǤ롣

2. 2. 1  ȯΥå̤ˤĤ

  ߥͥȥ٥뤬0ʤĤޤꡢƥȼ¹ˤǳߤ
ȯȡ ƥѥå˥쥸¸塢
ѥåڤؤ뤿ᡢƥåλ̤
  ƥѥåPC+CCRER0424Х
  󥿥ƥѥåER56SP12Х
Ȥʤ롣
¿ųߤȯϤ٤󥿥ƥѥå
뤿ᡢå̤
  󥿥ƥѥåPC+CCRER0632Х
Ǥ롣
ߥͥȿϺ磲ǤΤǡΤΥå̤ϰʲΤ褦ˤ
롣ʳߥϥɥ鼫Ȥˤ륹åʬ

ƥѥå24Х
󥿥ƥѥå
   12Хȡʽʡˡ32Хȡ2ܡˡ44Х

ޤߤνиǥåϡĤΥ쥸ER56
⥿ƥѥå򤹤뤿ᡢȹ碌ƥ
ƥѥå32ХȻѤ롣


2. 2. 2  ߥϥɥϿ

gccH8¸ǤϡߥϥɥϿݡե졼
󡦥եŪAPI DEF_INH( )򵭽ҤǤԽʬǤ롣Ͽ
ʲ˽Ҥ٤롣ʸ****ϿߥϥɥC롼
̾򼨤

ߥϥɥϿˡѹƤ롣
ǡRelease1.4.1ˤѹϰʲ̤ꡣ
1ߥ٥ơ֥μư
DEF_INH()ΰߥ٥ơ֥ư褦
ˤꡢ桼ȤԽɬפʤʤä

2ͥ򥵥ݡ
ߥץ饤ƥ٥0
ߥץ饤ƥ٥1

3ߥץ饤ƥ٥2ǹԤ
(1) ׵ѥץ饤ƥ٥
ǥХߥȥ׵᤹ߥ٥
IPRAIPRB쥸sys_support.SƥǥХ
ɥ饤Фν˰ư
(2) ߵĻѥץ饤ƥ٥
ߥϥɥƤӽФ˳ߥޥꤹ

4sys_support.SǹԤäƤʲεҤפˤʤä
ʳߥ٥Ԥä
ϡɥߵġ_****_enable_int
ϡɥ߶ػߡ_****_disable_int

ǤǤϡ׵򥯥ꥢɬפʾϡν
_****_disable_int˵ҤƤǤǤϳߥϥɥ
C롼ޤϤƤФؿ˵Ҥˡ
ɸȤ롣


ߥϥɥϿȼ
޳ߤ롣
ʥܡɰ¸Υѥ̾Ŭɤؤ뤳ȡ

(1) ߥϥɥε

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

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


(2) ե졼󡦥եε

ե졼󡦥եεˡ¾ΥץåƱ
Ǥ롣
٥ֹjsp/config/h8/h8_3069f.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/cpu_config.c
const IRC TIMER_IRC = {(UB*)SYSTEM_TIMER_IPR,
                        SYSTEM_TIMER_IP_BIT,
                        SYSTEM_TIMER_IPM
                      };

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

ѤͤϥޥƤ롣

IPRAIPRB쥸Υɥ쥹
jsp/config/h8/h8_3069f.h
#define H8IPRA			0xfee018
#define H8IPRB			0xfee019


IPRAIPRB쥸Υӥåֹ
jsp/config/h8/h8_3069f.h
IPRA
#define H8IPR_IRQ0_BIT		7	/* IRQ0			*/
#define H8IPR_IRQ1_BIT		6	/* IRQ1			*/
#define H8IPR_IRQ2_BIT		5	/* IRQ2			*/
#define H8IPR_IRQ3_BIT		5	/* IRQ3			*/
#define H8IPR_IRQ4_BIT		4	/* IRQ4			*/
#define H8IPR_IRQ5_BIT		4	/* IRQ5			*/
#define H8IPR_WDT_BIT		3	/* WDT			*/
#define H8IPR_AD_BIT		3	/* A/D			*/
#define H8IPR_CMI_BIT		3	/* CMI			*/
#define H8IPR_ITU0_BIT		2	/* 16 bit timer 0	*/
#define H8IPR_ITU1_BIT		1	/* 16 bit timer 1	*/
#define H8IPR_ITU2_BIT		0	/* 16 bit timer 2	*/

IPRB
#define H8IPR_TU80_BIT		7	/* 8 bit timer 0	*/
#define H8IPR_TU81_BIT		6	/* 8 bit timer 1	*/
#define H8IPR_DMAC_BIT		5	/* DMAC (CH0,1)		*/
#define H8IPR_SCI0_BIT		3	/* SCI0			*/
#define H8IPR_SCI1_BIT		2	/* SCI1			*/
#define H8IPR_SCI2_BIT		1	/* SCI2			*/


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

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

ڥ޳ߤǤε
jsp/config/h8/akih8_3069f/sys_config.h

#if SYSTEM_TIMER_IPM == IPM_LEVEL0
#define timer_handler_intmask		IPM_LEVEL1
#elif SYSTEM_TIMER_IPM == IPM_LEVEL1
#define timer_handler_intmask		IPM_LEVEL2
#endif 	/* SYSTEM_TIMER_IPM == IPM_LEVEL0 */


2. 2. 3ߥޥѹ

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ϡsys_config.hǥޥƤ롥

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ʻѤФ褤

ΥӥϡƥȤ 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. 4  CPU㳰ǽCPU㳰ϥɥ

  H8ǤϡʥץåΤCPU㳰򰷤äƤʤ¾Ȥθߴ
ΤᡢCPU㳰ϥɥֹΥǡ(EXCNO)CPU㳰ϥɥ
define_exc( )Ƥ롣


2. 5  ȥåץ⥸塼

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

   (1)   åݥ󥿤

   (2)   hardware_init_hook θƽФ
           hardware_init_hook  0 ǤʤСhardware_init_hook 
         Фhardware_init_hook ϥͥưˡå
         ¸ΥϡɥŪʽԤѰդƤ롣 ܼ
         ǤϡSYSCR 쥸 UE ӥåȤΥꥢ ͥ쥸
          (IPRA  IPRB) θ̳ߤͥ٤ꡢ 
         ֤ͭԤäƤ롣hardware_init_hook ̤ξ硢
         󥫥ץȤεҤˤꤳΥܥ뤬 0 롣 

   (3)   bss ν
           bss ΰ 0 ꥢ롣

   (4)   data ν
           data  RAM ž롣

   (5)   software_init_hook θƽФ
           software_init_hook  0 ǤʤСsoftware_init_hook 
         Фsoftware_init_hook ϥͥưˡեȥ
         Ķ (饤֥) ¸νԤѰդƤ롣
         㤨С饤֥νʤɤǤ롣software_init_hook 
         ̤ξ硢󥫥ץȤεҤˤꤳΥܥ뤬 0 
         롣


3.  ƥ¸εǽ

3. 1  ƥ९åɥ饤

  ƥ९åɥ饤Ф isig_tim ƽФϡ sys_defs.h 
TIC_NUME  TIC_DENO ƤꡢǥեȤ 1[ms] Ǥ롣
ѹ뤳Ȥǡisig_tim ƽФѹǤ롣 
H8/3048F Υå 16[MHz] ǡ ޤ٤ 0.5[us]H8/3052F 
å 25[MHz] ǡޤ٤ 0.32[us]H8/3069F Υå 
20[MHz] ǡ ޤ٤ 0.4[us] Τᡢñ̤üˤʤͤ
ꤹȡ isig_tim θƽФ˸ȯ롣
  ǥեȤΥåǥХ H8/3048F  H8/3052F  ITU0
H8/3069F  16 ӥåȥޥ˥å 0 ѤƤ롣

3. 2  ǽɾѥƥﻲȵǽ

  H8 Ǥϡǽɾѥƥﻲȵǽ (vxget_tim) 򥵥ݡȤƤ
롣٤ 0.5[us] ǡSYSUTIM __LONG_LONG_MAX__ޥͤˤꡢ
ϤϰϤȽꤷˡ򤷤Ƥ롣64ӥå
ѤǤϡ64ӥåʤˡǤʤ32ӥå
ʤȤƤ롣

3. 3  ꥢ륤󥿥եɥ饤

  H8/3048F  H8/3052F ˤ SCI0  SCI1  2 ܡH8/3069F ˤ SCI0 
 SCI2  3 ܤΥꥢݡȤꡢsys_config.h Ƥ 
TNUM_PORT ˤ겿ܻѤ뤫Ǥ롣
ߤμǤ 2 ܤޤǻѤǤ롣 JSP ͥΥѤˤ SCI1
ѤƤ롣

3. 4  ޥå

3. 4. 1  H8/3048F Υޥå

  ɥ쥹֤ͭˤɬפ뤿ᡢ⡼ 5 ¢ ROM ͭ
ĥ 1M Хȥ⡼ɤꤷƤ롣

   (1)   ǥХå

         0x00000 - 0x1ffff  ¢ ROM˥
         0x20000 - 0x3ffff   RAM.text.rodata.data.bss
         0xfef10 - 0xfefff  ¢ RAM˥
         0xff000 - 0xff0ff  ¢ RAM۳ߥ٥ΰ (.vectors)
         0xff100 - 0xfff0f  ¢ RAM󥿥ƥѥå
         0xfff1c - 0xfffff  ¢ I/O 쥸

   (2)   ꡼

         0x00000 - 0x1ffff  ¢ ROM.vectors.text.rodata
         0x20000 - 0xfef0f   RAM.data.bss
         0xfef10 - 0xfff0f  ¢ RAM󥿥ƥѥå
         0xfff1c - 0xfffff  ¢ I/O 쥸

3. 4. 2  H8/3052F Υޥå

  ¢Ǥ­뤿ᡢ AKI-H8-USB ܡɤ夷
AKI-H8-USB ܡɤˤ 128K ХȤ RAM ѤƤ롣Τᡢ
ɥ쥹֤ͭˤɬפꡢ⡼ 6 ¢ ROM ͭĥ 16M
Хȥ⡼ɤꤷƤ롣

   (1)   ǥХå

         0x000000 - 0x07ffff  ¢ ROMʰץ˥
         0x220000 - 0x23ffff   RAM.text.rodata.data.bss
         0xffdf10 - 0xffdfff   RAMʰץ˥
         0xffe000 - 0xffe0ff  ¢ RAM۳ߥ٥ΰ (.vectors)
         0xffe100 - 0xffff0f  ¢ RAM󥿥ƥѥå
         0xffff1c - 0xffffff  ¢ I/O 쥸

   (2)   ꡼

         0x000000 - 0x05ffff  ¢ ROM.vectors.text.rodata
         0x220000 - 0x23ffff   RAM.data.bss
         0xffef10 - 0xffff0f  ¢ RAM󥿥ƥѥå
         0xffff1c - 0xffffff  ¢ I/O 쥸


3. 4. 3  H8/3069F Υޥå

  ɥ쥹֤ͭˤɬפ뤿ᡢ⡼ 5 ¢ ROM ͭ
ĥ 16M Хȥ⡼ɤꤷƤ롣

   (1)   ǥХå (ʰץ˥ѻ)

         0x000000 - 0x07ffff  ¢ ROMʰץ˥
         0x400000 - 0x4fffff   RAM.text.rodata
         0x500000 - 0x5fffff   RAM.data.bss
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffbfff   RAMʰץ˥
         0xffc000 - 0xffc0ff  ¢ RAM۳ߥ٥ΰ (.vectors)
         0xffc100 - 0xffff1f  ¢ RAM󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)

   (2)   ꡼ʳRAMѡ

         0x000000 - 0x07ffff  ¢ ROM.vectors.text.rodata
         0x400000 - 0x5fffff   RAM.data.bss
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffff1f  ¢ RAM󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)

   (3)   ꡼ʳRAM̤ѡ

         0x000000 - 0x07ffff  ¢ ROM.vectors.text.rodata
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffff1f  ¢ RAM.data.bss
         󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)


3. 4. 4  H8/3069F(NKEV-010H8) Υޥå

  ɥ쥹֤ͭˤɬפ뤿ᡢ⡼ 5 ¢ ROM ͭ
ĥ 16M Хȥ⡼ɤꤷƤ롣

   (1)   ǥХå (ʰץ˥ѻ)

         0x000000 - 0x07ffff  ¢ ROMʰץ˥
         0x400000 - 0x43ffff   RAM.text.rodata
         0x440000 - 0x47ffff   RAM.data.bss
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffbfff   RAMʰץ˥
         0xffc000 - 0xffc0ff  ¢ RAM۳ߥ٥ΰ (.vectors)
         0xffc100 - 0xffff1f  ¢ RAM󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)

   (2)   ǥХå (GDB STUBѻ)

         0x000000 - 0x07ffff  ¢ ROMGDB STUB
         0x400000 - 0x4000ff  ¢ RAM۳ߥ٥ΰ (.vectors)
         0x400100 - 0x43ffff   RAM.text.rodata
         0x440000 - 0x47bfff   RAM.data.bss
         0x47c100 - 0x47ff1f   RAM󥿥ƥѥå
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffbfff   RAMGDB STUB
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)

   (3)   ꡼ʳRAMѡ

         0x000000 - 0x07ffff  ¢ ROM.vectors.text.rodata
         0x400000 - 0x47ffff   RAM.data.bss
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffff1f  ¢ RAM󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)

   (4)   ꡼ʳRAM̤ѡ

         0x000000 - 0x07ffff  ¢ ROM.vectors.text.rodata
         0xee0000 - 0xee00ff  ¢ I/O 쥸(1)
         0xffbf20 - 0xffff1f  ¢ RAM.data.bss
         󥿥ƥѥå
         0xffff20 - 0xffffe9  ¢ I/O 쥸(2)


4.  ȯ

4. 1  ȯĶι

  ȯĶϡ Windows 2000 cygwin γȯĶѤܼ
Сʲ˼ 

   binutils-2.11.2
   gcc-2.95.3
   newlib-1.9.0

Ūʰ̣NKEV-010H8ˤĤƤϰʲΥСǤǧԤä

binutiles-2.16.1
gcc-3.4.3
newlib-1.13.0

ջࣱ
Ż̾ܡ°GNUȯĶϥС󤬸Ťᡢݡ
ȤƤʤ

ջࣲ
gcc-3.2.3ϥӥȥؿ__muldi3()μԶ礬뤿ᡢ
СλѤϿ侩ʤ

configure Υץ --target=h8300-hms Ǥ롣 ޤbinutils 
configure Υץˤ --disable-nls ꤹ뤳ȡ
ǥХåΤᡢ˥ʰץ˥Ѥ뤳ȤǤ롣
NKEV-010H8ǤϡGDB stubѤ뤳ȤǤ롣ܤϡ9. 3  NKEV-010H8
Ǥ GDB STUB Ȥä¹ԡפ򻲾ȡ
RedBoot˴ؤƤϡϿ򻲾ȡ


4. 2  sample1.h 

  sample1.h ǡ֥åȰ¸CPU 㳰ϥɥεưˡʤɡˡ
 H8 ¸ǡTASK_PORTID  2Ĥޤ SCI1 ꤷƤ롣⤷¾
ݡȤѤϡ ͤѹ뤳ȡ

4. 3  åȤؤΥɤȼ¹

  åȤؤΥɤȼ¹Ԥˤϡ˥ޤϴʰץ˥
Ѥˡľ H8 Υեå ROM ˽񤭹Ǽ¹Ԥˡ롣

   (1)   H8/3052FH8/3069FǴʰץ˥Ѥˡ (ǥХå⡼)
           Ѿҹزʰץ˥ mon3052.mot (H8/3052F )
           mon3068.mot(H8/3068FH8/3069F )  H8 ¢եå
           ROM ˽񤭹ࡣʲˡˡ򼨤
         
         ʰץ˥۸URL
           http://www.mit.pref.miyagi.jp/embedded/consortium/
         

         [1]   ǥ쥯ȥ $(CPU)/$(SYS) ˤ

                  MakefileDBGENV := TNCT_MONITOR

               ͭˤ make 롣
         [2]   üեȤ˥ޥ ld Ϥ롣
         [3]   üեȤ jsp.srec 롣
         [4]   üեȤ˥ޥ go Ϥȼ¹Ԥ
               롣

   (2)   H8/3048F ǽ˥Ѥˡ (ǥХå⡼)
           ǥ쥯ȥ $(CPU)/$(SYS) ˤ

            MakefileDBGENV := TNCT_MONITOR

         ͭˤ make 롣 ˡH8/3048F γ RAM ؤΥ
         ͭˤʤФʤʤRAM ιˤۤʤ뤬 
         쥹Х A0  A19 ȥǡХ D8  D15 ͭˤ
         ϡʲ˼ݡȤ 0xff 񤭹ࡣ

            Port   Address
            P1DDR  0xfffc0
            P2DDR  0xfffc1
            P3DDR  0xfffc4
            P5DDR  0xfffc8

         ǸüեȤѤ jsp.srec  H8/3048F ž 
         Ԥ롣

   (3)   ¢եå ROM ˽񤭹Ǽ¹Ԥˡ 
   (꡼⡼ɡRAM)
           ǥ쥯ȥ $(CPU)/$(SYS) ˤ Makefile.config Υǥ
         ȥ $(CPU)/$(SYS) ˤ Makefile 

            DBGENV := ROM

         ͭˤ make 롣ˡh8writeΥեå ROM 
         ߥץǡ եå ROM ˽񤭹ࡣ

   (4)   H8/3069F¢եåROM˽񤭹ߡ¢RAMǼ¹Ԥ
   ˡ (꡼⡼ɡRAM̤)
           ǥ쥯ȥ $(CPU)/$(SYS) ˤ Makefile.config Υǥ
         ȥ $(CPU)/$(SYS) ˤ Makefile 

            DBGENV := INMEM_ONLY

         ͭˤ make 롣ˡh8writeΥեå ROM 
         ߥץǡ եå ROM ˽񤭹ࡣ

4. 4  H8/3048F γ RAM ͭ

  ꡼⡼ɤǤϡ sys_support.S  _hardware_init_hook ǡɥ
Х A0  A19 ȥǡХ D8  D15 ͭˤ塢ͥ
¹Ԥ롣 ʳ˥ɥ쥹ХȥǡХͭˤϡ
sys_config.h ΰʲʬŬԽ롣

   /*
    *  ɥ쥹
    */
   /*#define ENABLE_LOWER_DATA*/
   #define ENABLE_P8_CS        (H8P8DDR_CS0|H8P8DDR_CS1|\
                                H8P8DDR_CS2|H8P8DDR_CS3)
   /*#define ENABLE_PA_CS      (H8PADDR_CS4|H8PADDR_CS5|H8PADDR_CS6)*/
   /*#define ENABLE_PB_CS       H8PBDDR_CS7*/
   #define ENABLE_PA_A21_A23   (H8BRCR_A23E|H8BRCR_A22E|H8BRCR_A21E)

4. 5  H8/3052F γ RAM ͭ

  ꡼⡼ɤǤϡ sys_support.S  _hardware_init_hook ǡɥ
Х A0  A23 ǡХ D8  D15 åץ쥯 CS0 
CS3 ͭˤ塢ͥ¹Ԥ롣ʳ˥ɥ쥹Хȥǡ
Хͭˤϡsys_config.h ΰʲʬŬԽ롣

   /*
    *  ɥ쥹
    */
   /*#define ENABLE_LOWER_DATA*/
   #define ENABLE_P8_CS        (H8P8DDR_CS0|H8P8DDR_CS1|\
                                H8P8DDR_CS2|H8P8DDR_CS3)
   /*#define ENABLE_PA_CS      (H8PADDR_CS4|H8PADDR_CS5|H8PADDR_CS6)*/
   /*#define ENABLE_PB_CS       H8PBDDR_CS7*/
   #define ENABLE_PA_A21_A23   (H8BRCR_A23E|H8BRCR_A22E|H8BRCR_A21E)

4. 6  H8/3069F γ RAM ͭ

  ꡼⡼ɤǤϡ sys_support.S  _hardware_init_hook ǡɥ
Х A0  A23 ǡХ D8  D15 åץ쥯 CS0 
CS3 ͭˤ塢ͥ¹Ԥ롣ʳ˥ɥ쥹Хȥǡ
Хͭˤϡsys_config.h ΰʲʬŬԽ롣

   /*
    *  ɥ쥹
    */
   #define     ENABLE_P8_CS    (H8P8DDR_CS0|H8P8DDR_CS1|\
                                H8P8DDR_CS2|H8P8DDR_CS3)
   #if 0
   #define     ENABLE_LOWER_DATA
   #define     ENABLE_PB_CS    (H8PADDR_CS4|H8PADDR_CS5|\
                                H8PADDR_CS6|H8PBDDR_CS7)
   #endif      /* of #if 0 */

5.  ե빽

5. 1  ǥ쥯ȥꡦե빽

   (1)   config/h8/

            Makefile.config  Makefile  H8 ¸
            cpu_config.c     H8 ץå¸ C ؿ
            cpu_config.h     H8 ץå¸ι
            cpu_context.h    H8 ץå¸Υƥ
            cpu_defs.h       H8 ץå¸Υץꥱ
            cpu_insn.h       H8 ץåΥ֥ inline ؿ
            cpu_support.S    H8 ץåΥ֥ؿ
            cpu_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            cpu_rename.h     ͥ̾Υ͡
            cpu_unrename.h   ͥ̾Υ͡
            h8.h             H8/300H ץåζ
            h8_3048f.h       H8/3048F ץå
            h8_3052f.h       H8/3052F ץå
            h8_3069f.h       H8/3048F ץå
            h8_sil.c         SILH8ץåĥ Cؿ
            h8_sil.h         SILH8ץåĥ 
            ʼI/OݡȤDDR롼
            hw_serial.c      SCI ѿȴؿ
            hw_serial.cfg    SCI Υե졼ե
            hw_serial.h      SCI 
            hw_timer.h       ITU 
            start.S          ȥåץ⥸塼
            tool_config.h    H8 ץåγȯĶ¸⥸塼
            tool_defs.h      H8 ץåγȯĶ¸
            vector_header.S  ߥ٥ơ֥Ƭʬ
            makeoffset.c     offset.h ݡȴؿ

   (2)   config/h8/akih8_3048f/
           () Ż̾ AKI-H8/3048F ܡɤΰ¸ʬ

            Makefile.config  Makefile  AKI-H8/3048F ܡɰ¸
            debug.ld         ǥХåѥ󥫥ץ
            release.ld       ꡼ѥ󥫥ץ
            sys_config.c     AKI-H8/3048F ܡɰ¸ C ؿ
            sys_config.h     AKI-H8/3048F ܡɰ¸ι
            sys_defs.h       AKI-H8/3048F ܡɰ¸Υץꥱ
             
            sys_support.S    AKI-H8/3048F ܡɰ¸Υ֥ؿ
            sys_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            sys_rename.h     ͥ̾Υ͡
            sys_unrename.h   ͥ̾Υ͡

   (3)   config/h8/akih8_3052f/
           () Ż̾ AKI-H8/3052F ܡɤΰ¸ʬ

            Makefile.config  Makefile  AKI-H8/3052F ܡɰ¸
            debug.ld         ǥХåѥ󥫥ץ
            release.ld       ꡼ѥ󥫥ץ
            sys_config.c     AKI-H8/3052F ܡɰ¸ C ؿ
            sys_config.h     AKI-H8/3052F ܡɰ¸ι
            sys_defs.h       AKI-H8/3052F ܡɰ¸Υץꥱ
             
            sys_support.S    AKI-H8/3052F ܡɰ¸Υ֥ؿ
            sys_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            sys_rename.h     ͥ̾Υ͡
            sys_unrename.h   ͥ̾Υ͡

   (4)   config/h8/akih8_3069f/
           () Ż̾ AKI-H8/3069F ܡɤΰ¸ʬ

            Makefile.config  Makefile  AKI-H8/3069F ܡɰ¸
            debug.ld         ǥХå (ʰץ˥б) ѥ󥫥ץ
            debug_redboot.ld ǥХå (RedBootб) ѥ󥫥ץ
            release.ld       ꡼ѥ󥫥ץȡʳRAMѡ
            release_inmem.ld ꡼ѥ󥫥ץȡʳRAM̤ѡ
            sys_config.c     AKI-H8/3069F ܡɰ¸ C ؿ
            sys_config.h     AKI-H8/3069F ܡɰ¸ι
            sys_defs.h       AKI-H8/3069F ܡɰ¸Υץꥱ
             
            sys_support.S    AKI-H8/3069F ܡɰ¸Υ֥ؿ
            sys_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            sys_rename.h     ͥ̾Υ͡
            sys_unrename.h   ͥ̾Υ͡

   (5)   config/h8/nkev_010h8/
           (ͭ) ̿ӥ NKEV-010H8 ܡɤΰ¸ʬ

            Makefile.config  Makefile NKEV-010H8 ܡɰ¸
            debug.ld         ǥХå (ʰץ˥б) ѥ󥫥ץ
            debug_gdbstub.ld ǥХå (GDB STUBб) ѥ󥫥ץ
            debug_redboot.ld ǥХå (RedBootб) ѥ󥫥ץ
            release.ld       ꡼ѥ󥫥ץȡʳRAMѡ
            release_inmem.ld ꡼ѥ󥫥ץȡʳRAM̤ѡ
            sys_config.c     NKEV-010H8 ܡɰ¸ C ؿ
            sys_config.h     NKEV-010H8 ܡɰ¸ι
            sys_defs.h       NKEV-010H8 ܡɰ¸Υץꥱ
             
            sys_support.S    NKEV-010H8 ܡɰ¸Υ֥ؿ
            sys_rename.def   ͥ̾Υ͡Ȥβ
             ꥹ
            sys_rename.h     ͥ̾Υ͡
            sys_unrename.h   ͥ̾Υ͡

   (6)   jsp/utils/h8/
           H8¸ӥѥץ

            cat.pl UNIXcatޥ
            grep_def_inh.plPerlץѥե륿
            genvector.pl ٥ơ֥ѥץ

   (7)   ӥɡǥ쥯ȥ
            vector.S ٥ơ֥make depend˼ư

6. ץꥱȯԸξ

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

6.1 ͥѹˡ

(1) SUPPORT_CHG_IPM
Υޥȳߥޥѹȵǽͭˤʤ롣
ܺ٤ϡ2. 2. 3ߥޥѹȡפ򻲾
ե롧sys_config.h

(2) SUPPORT_VXGET_TIM
Υޥǽɾѥƥﻲȵǽvxget_tim( )
ͭˤʤ롣ܺ٤ϡ3. 2  ǽɾѥƥﻲȵǽפ򻲾
ե롧sys_config.h

(3) STACKTOP
󥿥ƥѥåݥ󥿤ν
ȥåץ롼ǤSTACKTOPؤRAMΰ򥹥åˤ
_hardware_init_hookƤӽФΤᡢΰ
_hardware_init_hookƤӽФ˥ǽˤʤäƤɬפ
롣
    ֤ΤޤޥǤ¢RAMޤ
    ˥ˤꥢǤ֤ˤ볰RAM

ե롧sys_config.h

6.1.1 ꥢɥ饤ФΥޥˡ

Ūjsp/config/h8/akih8_3069f/sys_config.hˤޥ
뤳Ȥǡޥ뤳ȤǤ롣ʲ˳ƥޥΰ̣򼨤

ݡȿ
jsp/config/h8/akih8_3069f/sys_config.h 145
ޥTNUM_PORTǥݡȿ롣
ߤμǤϺ磳ޤǻѤǤ롣

ƥϤ륷ꥢݡֹ
jsp/config/h8/akih8_3069f/sys_config.h 149
ޥLOGTASK_PORTIDǥݡȿ롣

ƥͥjsp/config/h8/akih8_3069f/sys_config.hƤޥ
ΰ̣ˤĤơʲ˽Ҥ٤롣???ʬˤϥݡȤμ̻ҤǤ
SYSTEMUSERUSER2Τ줫롣

???_SCI
ꥢǥХ쥸Ƭɥ쥹

???_SCI_IPR
ѤIPRAޤIPRB쥸Υɥ쥹

???_SCI_IP_BIT
嵭IPR쥸ǥꥢǥХӥå

???_SCI_SMR
SMR쥸ν
ǥեȤǰʲԤäƤ롣
	եޥåȡĴƱ
	饯󥰥8ӥå
	ѥƥʤ
	ȥåץӥåȥ󥰥1
	å쥯ȡʬ:1

???_BAUD_RATE
ܡ졼[bps]

???_PORTID
ݡIDޥSYSTEM_PORTIDUSER_PORTIDUSER2_PORTID
롣ݡIDȥǥХֹ(sci02)бطѹ硢
ΥޥѹǤʤ
jsp/config/h8/hw_serial.c
Ƥ륷ꥢݡȽ֥åsiopinib_table[]
νǡν֤ؤ롣

???_SCI_IPM
ߥץ饤ƥ٥ѡ
IPM_LEVEL0ޤIPM_LEVEL1ꤹ롣

INHNO_SERIAL_ININHNO_SERIAL2_ININHNO_SERIAL3_IN
ƥݡIDΥꥢߤΥ٥ֹ

INHNO_SERIAL_OUTINHNO_SERIAL2_OUTINHNO_SERIAL3_OUT
ƥݡIDΥꥢߤΥ٥ֹ

INHNO_SERIAL_ERRINHNO_SERIAL2_ERRINHNO_SERIAL3_ERR
ƥݡIDΥꥢ륨顼ߤΥ٥ֹ

sio_in_handler_intmasksio_in2_handler_intmask
sio_in3_handler_intmask
ƥݡIDΥꥢߥϥɥ¹ˡ
ߥޥȤꤹ
IPM_LEVEL1ޤIPM_LEVEL2ꤹ롣

sio_out_handler_intmasksio_out2_handler_intmask
sio_out3_handler_intmask
ƥݡIDΥꥢߥϥɥ¹ˡ
ߥޥȤꤹ
IPM_LEVEL1ޤIPM_LEVEL2ꤹ롣

sio_err_handler_intmasksio_err2_handler_intmask
sio_err3_handler_intmask
ƥݡIDΥꥢ륨顼ߥϥɥ¹ˡ
ߥޥȤꤹ
IPM_LEVEL1ޤIPM_LEVEL2ꤹ롣


6.2 ץꥱ󶡤뵡ǽ

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

6.2.1I/OݡȤDDR쥸ؤΥǽ

H8I/OݡȤΥǡǥ쥯󡦥쥸DDRϽ񤭹ѤǤꡢ
ΤޤޤǤϽ˾ΥӥåȤѹ뤳ȤǤʤ
bset,bclr̿ǤԲġ
ޤͥΥȥåץ롼Ǥ⤤ĤDDR쥸Ф
ԤäƤ뤿ᡢΤޤޤǤϥͥȥץꥱδ֤
ݤĤȤǤʤ
ΤᡢܼǤϡ˥ƥݥѰդơDDRθͤ
ˡΤäƤ롣
ܵǽѤh8_sil.h򥤥󥯥롼ɤɬפ롣
ݡֹ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(UINT port);

ڥѥ᡼
	UINT portݡֹ

ڥ꥿ѥ᡼
	DDR쥸

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸ͤɤ߽Ф

(2) sil_wrb_ddrDDR쥸ؤν񤭹

CAPI
void sil_wrb_ddr(UINT port, UB data);

ڥѥ᡼
	UINT portݡֹ
	UB data񤭹

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

portǻꤵݡֹDDR쥸data񤭹ࡣ

(3) sil_anb_ddrDDR쥸AND黻

CAPI
void sil_anb_ddr(UINT port, UB data);

ڥѥ᡼
	UINT portݡֹ
	UB dataAND黻Ԥ

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

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

(4) sil_orb_ddrDDR쥸OR黻

CAPI
void sil_orb_ddr(UINT port, UB data);

ڥѥ᡼
	UINT portݡֹ
	UB dataOR黻Ԥ

ڥ꥿ѥ᡼
	ʤ

ڥ顼ɡ
	ʤ

ڵǽ

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


7. ͥܿԸξ

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

7.1 ޥ

(1) 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

(2) ٥ơ֥Τξ
٥ơ֥ΥѿVECTOR_SIZEȤ롣
ե롧$(CPU)/$(SYS)/Makefile.config

7.2 ٥ơ֥ΤPerlץgenvector.plλ

  -s n		٥ơ֥Υ
  		nꤷƤꡢʳΰͿ줿
  		ư̤Ǥ롣
  		
  -z 		JSPͥǤϿƤʤֹФ
  		ǥեȤ_no_reg_exceptionꤹΤ
  		Ƥ뤬˥ʤɤμ¹ԴĶˤäƤ0
  		ꤹɬפ롣
  		ΥץǤϿƤʤߥ٥0
  		񤭹ࡣ
		-zץꤷʤϡ_no_reg_exception
		񤭹ʥǥեȡ
		-zץ̵ͭjsp/config/h8/Makefile.config
		Ƥ롣
		DBGENVޥͤ
		TNCT_MONITORޤREDBOOTξ硧-zץ󤢤
		ʳξ硧-zץʤ


8. »

٥ơ֥
make realclean¹ԤƤ⡢vector.Sõʤ
Makefile򵡼¸ˤʤ»Ȥ롣
make dependmakeޥɤǥ٥ơ֥vector.S
Ū˾񤭤Ƥ롣񤭤ʤ
jsp/config/h8/Makefile.config 85ܤ
.PHONY: vector.S
򥳥ȥȤȡ񤭤ʤʤ롣

¹Ԥ٤ʤȤγԤˤĤ
sleepƤ֤˥Х׵᤬礷ʤ褦˥Хγؤβ
ػߤάƤ롣
Ľꡧcpu_support.Sdispatcher_2_enable_interrupt

HEWǤjsp/config/h8-renesas/cpu_support.srcˤϼѤߤǤ롣
ܤϥϡɥޥ˥奢6.4.4 եȥХ
⡼ɤؤܡ׻

٥ơ֥μư
ǥեȤѰդƤno_reg_exceptionΤ褦ˡʣγװ
ФƱߥϥɥϿ褦ʻȤˤбƤʤ

#ifdef SUPPORT_ETHER
ʤ٤ͥTINETΩˤǽԤäХ
ϥͥ¦ʥȥåץ롼ˤǹԤᡢ
SUPPORT_ETHERޥˤ拾ѥ뤬ĤäƤ롣
AKI-H8/3069F¸Τߡ

ܥ̾
C롼δؿ̾****ФơŪΥ٥
__kernel_****_entryѤƤ뤿ᡢƱܥ̾
ץꥱǻѤǤʤ
ʸ__kernel_ǻϤޤ륷ܥ̾ϥͥѤͽ󤵤Ƥ롣

Żܡ°CD-ROMäƤgccϥС󤬸Ťᡢ
ݡȤƤʤ

gccΥСˤäƤ64ӥåϥݡȤʤ
ʽϤ»

ۥȥޥOS
Windows9xϤϥݡȤʤ


9. Ͽ

9. 1  RedBootбˤĤ

ͼȤAKI-H8/3069FѤRedBootбƤ뤬µƥȤ
ԤäƤʤʲ˻ˡ򵭤

9. 1. 1  H8/3069F Υޥå
   ǥХå (RedBootѻ)

         0x000000 - 0x07ffff  ¢ ROMRedBoot˥
         0x400000 - 0x44ffff   RAM.text.rodata
         0x450000 - 0x4ffeff   RAM.data.bss
         0x4fff00 - 0x4fffff   RAMߥ٥ΰ (.vectors)
         0x500000 - 0x510000   RAM󥿥ƥѥå
         0xee0000 - 0xee0081  ¢ I/O 쥸
         0xffbf20 - 0xfffd1f  ¢ RAMRedBoot˥
         0xfffd20 - 0xfffe1f  ¢ RAM۳ߥ٥ΰ
                              (cpu_config.c.vectors饳ԡ)
         0xffff20 - 0xffffe9  ¢ I/O 쥸


9. 1. 2  åȤؤΥɤȼ¹
           
         ǥ쥯ȥ $(CPU)/$(SYS) ˤ

            MakefileDBGENV := REDBOOT

         ͭˤ make 롣

         RedBoot
           http://sourceforge.jp/projects/ecos-h8/
         ꡼Ǥ"h8write -3069 -f20 redboot.mot" ǾƤ
         
         ¹ˡ
         (1) RedbootȤѤˡ
         (2) GDB³ˡ
         롣


       (1) RedbootȤѤˡ

           ʲϡ ŷ󶡤ˤˡǤ롣

         ġɤƥ󥹥ȡ(Win桼)
         TFTPСforWin32
         http://www.vector.co.jp/soft/win95/net/se174412.html
         Tera Term Pro
         http://www.sakurachan.org/soft/teraterm-j/
         
         TFTPСΥեjsp.S˻
         Tera Term Pro򥤥󥹥ȡ뤷˥ޥեʲˤ
         
         ttpmacro.exe ؤΥ硼ȥåȤ
         Υץѥƥ-akiboot.ttlɲ
         "C:\Program Files\TTERMPRO	tpmacro.exe" akiboot.ttl
         
         akiboot.ttlΥץ
         ; Sample macro for Tera Term
         ;Ķեɤ
         ;connect '/F=redboot.ini'
         ;ǥեǥɤ
         connect ''
         ;ԥɤäƥץץȤǤΤԤ
         sendln
         UsernamePrompt = 'RedBoot>'
         ;IPɥ쥹ϴĶˤäѹƤ
         ;-l akiܡɤIP -h TFTPСIP
         ipset = 'ip_address -l 192.168.0.12 -h 192.168.0.10'
         load = 'load -b 0x400000 jsp.S'
         go = 'go 0x400000'
         ; ip
         wait   UsernamePrompt
         sendln ipset
         ; load
         wait   UsernamePrompt
         sendln load
         ; go
         wait   UsernamePrompt
         sendln go
         ; OK, boot complete.


      (2) GDB³ˡ
      
      ǤEthernetͳGDB³ˡҤ٤롣
      
      ۥȥޥȥåȥܡɤ򥷥ꥢ륱֥Ethernet֥
      ³롣
      Ethernet֥롧ľ뤹ϥ֥Ѥ롣

      ߥʥ륽եȡʥꥢˤưåȤŸ롣
      Ф餯ԤĤȰʲΤ褦˽Ϥ롣
      
      ... waiting for BOOTP information
      Ethernet eth0: MAC address xx:xx:xx:xx:xx:xx
      Can't get BOOTP info for device!
      
      RedBoot(tm) bootstrap and debug environment [ROM]
      Non-certified release, version UNKNOWN - built 21:28:57, Apr 11 2004
      
      Platform: Akizuki H8/3068 Network micom (H8/300H)
      Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
      
      RAM: 0x00400000-0x005f4000, [0x00400000-0x005e1000] available
      FLASH: 0x00000000 - 0x00080000, 8 blocks of 0x00010000 bytes each.
      RedBoot> 
      
      "RedBoot>"ΥץץȤԤˤʤä顢
      ip_address -l xxx.xxx.xxx.xxx
      ϤIPɥ쥹ꤹ롣
      xxx.xxx.xxx.xxxζŪͤϴĶ˹碌롣
      ʲΤ褦ʱСǤ롣

      IP: xxx.xxx.xxx.xxx/255.255.255.0, Gateway: 0.0.0.0
      Default server: 0.0.0.0
      RedBoot>
      
      ʥߥʥ륽եȤǤϤʤΡ˥ޥɥץץȤˤơ
      gdbư롣
      
      h8300-hms-gdb jspCygwinξjsp.exe
      
      gdbΥץץȤˤưʲΥޥɤ¹Ԥ롣
      target remote xxx.xxx.xxx.xxx:9000
      xxx.xxx.xxx.xxxϾ嵭ꤷIPɥ쥹
      9000ϥݡֹ
      load
      b xxxx_xxxx
      c
      
      gdbΥޥɤˤĤƤgdbΥޥ˥奢򻲾


9. 1. 3  ܿΤλ;

ǥХåȥͥ뤬񸻤ζ򵯤ʤ褦ä˳ߤޤλ
ˤθɬפ롣RedbootбˤꡢʲΥǡ¤ؿ
ߤƤ롣¾ΥܡɤǥХåѤ˰ܿݤˤϤ
ɬפ롣

(1) ޥ H8IPRA_INI,H8IPRB_INI
IPRAIPRB쥸ν
άϥǥե0Ѥ롣
cpu_config.ccpu_initializeؿˤơ٤Ƥγߥץ饤ƥ
٥룰ˤԤäƤ롣ǥХåߤѤϡ
ޥǽͤߥͥγߥץ饤ƥ
˥٥룰˥ꥢʤ褦ˤ롣
ꡧsys_config.h

(2) ޥ VECTOR_TABLE_ADDR
Redboot뵼٥ơ֥Ƭɥ쥹
ꡧsys_config.h

(3) ǡ TMP_VECTOR
cpu_config.cvector_table_copyؿˤơͥ뤬ĥ٥ơ
Redboot륳ԡƤ롣κݡ񤭤ƤϤޤĽ
ɬפ롣Υǡ¤TMP_VECTORȤ
롣
ꡧsys_config.h

(4) ؿ load_vector  ߥ٥

CAPI
void load_vector(TMP_VECTOR *p);

ڥѥ᡼
TMP_VECTOR *pƬɥ쥹

ڥ꥿ѥ᡼
ʤ

ڥ顼ɡ
ʤ

ڵǽ
pǻꤵΰRedboot٥ơ֥ΰ
򤹤롣


sys_config.c

(5) ؿ save_vector  ߥ٥

CAPI
void save_vector(TMP_VECTOR *p);

ڥѥ᡼
TMP_VECTOR *pԡƬɥ쥹

ڥ꥿ѥ᡼
ʤ

ڥ顼ɡ
ʤ

ڵǽ
pǻꤵΰˤǡRedboot٥
ơ֥ΰȤ롣


sys_config.c

9. 2  gccθƤӽФˤĤ

λͻˤȡå쥸er0er3Ǥɤ뤬
ºݤˤϺŬץѻer4˲褦ʤΤǡߤν
er0er4Ƥ롣

ͻ
http://gcc.gnu.org/projects/h8300-abi.html


9. 3  ꥢ3chȼʤƤˤĤ
jsp/config/h8/hw_serial.cƤ륷ꥢݡȽ֥
siopinib_table[]Υ23˳ĥȼ
jsp/config/h8/hw_serial.cfg
ߥϥɥϿ
jsp/config/h8/akih8_3069f/sys_config.h
ɬפʥޥ
򤽤줾ɲäƤ롣
ޤTNUM_PORTޥͤˤꡢƥϤ˻Ѥ
ݡֹ椬Ѳ褦ˤʤäƤνϡTNUM_PORT
ͤ˰ͤ餺ƥϤΥݡֹ椬ꤵ褦ѹ



9. 4  NKEV-010H8 Ǥ GDB STUB Ȥä¹

9. 4. 1  NKEV-010H8 бSTUB

NKEV-010H8 б GDB STUB źդ CD-ROM Ǽۤ롣
 GDB STUB  SCI1 Ѥ١syslogSCI0˹Ԥ褦
åȰ¸롣

9. 4. 2  NKEV-010H8򥿡åȤȤGDBˤ⡼ȥǥХå

  1. config/h8/nkev-010h8/Makefile.config  DBGENV := 
     ȥȤ롣
  2. ץꥱ Makefile  DBGENV := GDB_STUBɲä롣
  3. ץꥱ Makefile COPTS = -g -O0 ɲä롣
  4. Υꥢݡ ID 2 ˤƤ 1 ѹ롣
     (jspsampleξ硢TASK_PORTID  1 ˤ)
  5. make dependmake Ԥ
6. h8300-hms-gdb jsp.exe ¹Ԥgdbư롣
  7. gdbץץȤФʲϤ롣

        (gdb) set machine h8300h
        (gdb) set endian big
        (gdb) set remotebaud 38400
        (gdb) set remoteaddress 32
        (gdb) target remote /dev/com1PCCOMݡֹ
        0x00001350 in ?? ()
        (gdb) load
        Loading section .vectors, size 0x100 lma 0x400000
        Loading section .text, size 0x59ca lma 0x400100
        Loading section .rodata, size 0x118a lma 0x405aca
        Loading section .data, size 0x12 lma 0x406c54
        Start address 0x400100, load size 27750
        Transfer rate: 20181 bits/sec, 50 bytes/write.
        (gdb)

  8. contϤǥץब¹Ԥ롣

  gdbˤĤƤGNUץȤ˥ޥ˥奢뤬Τǡ
  Ȥλ

9. 4. 3  Τ

  TNUM_PORT = 2 Ȥȡstub  USER PORTХåƥ󥰤ưʤ


ѹ

'01/11/15 Release1.2
H8ݡȳ
åȡAKI-H8/3048F

'02/04/15 Release1.3
åȤѹ
AKI-H8/3067FΥݡȤɲ

'03/12/28 Release1.4
åȥƥѹ
AKI-H8/3052FΥݡȤɲ
AKI-H8/3068FΥݡȤɲ
AKI-H8/3069FΥݡȤɲ

'05/12/28 Release1.4.2
åȥƥѹ
NKEV-010H8ΥݡȤɲ
AKI-H8/3068FΥݡȤ
AKI-H8/3069FΥݡȤ


٥ơ֥μư
DEF_INH()ΰߥ٥ơ֥ư褦ˤ
ˤꡢ桼ȤԽɬפʤʤä
ͥ٤Υݡ
٥룰ȥ٥룱γߤ򥵥ݡ
ߥϥɥϿˡѹ
װ2γߥ٥ͤ롣
׵IPRAIPRB쥸
ߵĻccrγߥޥ
װ̤ѰդƤxxx_enable_intxxx_disable_int
ѻ
iscpulockedե饰
IPMλȤѹǽ򥵥ݡȡ
I/OݡȤDDR롼ɲ
AKI-H8/3069FΥ꡼⡼ɤ¢RAMư⡼ɤɲ
Makefile.configDBGENV := INMEM_ONLY
󥯥ץrelease_inmem.ldɲ


¹ԴĶ
Makefile.configѿDBGENVθľ
DBGENV := ROMROMξʿ
DBGENV := TNCT_MONITORʰץ˥ѻѹ
TNCT:Tomakomai National College of Technology
Ԥؿsil_dly_nse( )
_int64_̩
ȼSYSUTIMѹ
ꥢɥ饤ФSCI_getchar()ɤ߽Ф1Хȥǡ
ĥƤޤ

Ż̾ܡ°GNUȯĶϥС󤬸Ťᡢ
ݡȤƤʤʡ4. 1  ȯĶιۡפ򻲾ȡ
cpu_experr( )ǥ쥸ƤפݡpcccrʬΥ
ʤäԶ
TINETϢΥեʬΥ
ե
jsp/config/h8/tinet_cpu_defs.h
jsp/config/h8/tinet_cpu_config.h
jsp/config/h8/akih8_3048f/tinet_sys_config.h
jsp/config/h8/akih8_3068f/tinet_sys_config.h
jsp/config/h8/akih8_3069f/tinet_sys_config.h
RedbootϢ
debug_redboot.ldѥå˴ޤ᤿
åݥ󥿤νͤ
ߥ٥ơ֥ؤϿ
ޥϥɥ顢ꥢϥɥ
BITSET,BITCLRޥ򥤥饤󡦥֥ؿѹ
ߥȥν
	_hardware_init_hookνƤcpu_initialize()˰ư
֥롼
ʬ̿פor̿
gccθƤӽФ˹碌ơ쥸ɬ׺Ǿ
ˤ
gcc 3.xкΤᡢߤνer4Ƥ롣
h8_3048f.hh8_3052f.hh8_3069f.hܡɴ֤ǶͭǤ褦
$(CPU)ǥ쥯ȥ˰ư
AKI-H8/3052F, AKI-H8/3069Fƥ¸
ǥեȤΥꥢch1ѹ
ͥߤʤȻѤǤʤ
ȼʤץץTASK_PORTID
sys_defs.h˰ư
Makefile.config˥ǥХåץ-gɲ
ؿǡΤʤΤŪvoid򵭽Ҥ
vxget_tim()Υץȥthrow()ɲ
intnestUWUBѹ
ȥ졼ɲ
#define	LOG_VSNS_INI_ENTER()
#define	LOG_VSNS_INI_LEAVE(state)
tool_config.hNEWLIBޥ
cpu_context.hACTIVATED_STACK_SIZEޥ
ܥ롦͡оݤθľ
    ܥcpu_experrΥ͡ϳ
AKI-H8/3069F
HEAP_TOPޥ
ޥ˥奢
ܡ°CD-ROMgccϥݡȳǤ뤳Ȥ
RedbootбͼǤ뤳ȤϿ˰ư
ȯΥå̤
ߥϥɥϿˡ
ꥢݡȤΥեɵ
ȯĶΥСѹ

'07/03/xx  Release1.4.3
åȥƥѹ
NKEV-010H8ΥݡȤ
AKI-H8/3048FΥݡȤ


ꥢɥ饤Ф3ch
AKI-H8/3069FΤб
٥ơ֥뼫ư
make dependmakeޥɤǥ٥ơ֥vector.SŪ
񤭤褦ѹ
βԥɤΰ㤤б
DEF_INHʸǲԤȥѡ˼Ԥ
ֹΥޥ̤ξ硢0֤Ȳᤷơꥻåȥ٥
񤭤ƤޤԶ
ֹuդƤǤʤ
filter1.plfilter2.pl򣱤ĤˤޤȤᡢgrep_def_inh.pl˲̾
gccǤHEWǤǸ̤filter2.plѰդɬפʤʤä
ߥ٥
h8_sil.hdefine_int_plevel()
cpu_insh.h򥤥󥯥롼ɤʤǡbitset(),bitclr()Ƥ
ФƤԶ
software_term_hookθƤӽФ
tool_config.hcall_atexit()
software_term_hookؤΥݥ󥿤0ȤӤѥ
ŬˤäƺƤޤʤ褦volatileҤɲ
Redbootб
RedbootѤߥ٥񤭤Ƥޤ
ޥ˥奢h8.txt9.1ɵ
