													TOPPERS Confidential
		TOPPERSץ ǥå
		ñ̤μ¹Գϡ꥿Υƥ

		: Ĺϡ̾Ųء
		ǽ: 2007ǯ717

ΰդ

ΥϡTOPPERS奫ͥˤñ̤μ¹Գϡ꥿
Υƥ֤˴ؤͤȡTOPPERS/ASPͥˤƤ줬ɤΤ褦
˼¸Ƥ뤫򵭽ҤΤǤ롥

ñ̤μ¹Գϡ꥿Υƥ

TOPPERS奫ͥˤñ̤μ¹Գϡ꥿Υƥ
֤ˤĤơITRON4.0ͤ궯ꤹ롥ƤˤĤƤϡ
TOPPERS奫ͥͽ2.5.12 ñ̤ȥƥ֡פ򻲾Ȥ
ȡ

͡ITRON4.0/PX

				CPUå		ͥ	ǥѥå	㳰
				å	ޥ			ػߡľ	ػߡľ
------------------------------------------------------------------------------
ڥ
¹ԳϾ											
¹Գϻ	Τޤ						Τޤ		ػߤ
λ													Ǥ
λ		̤(*1)						̤(*1)
------------------------------------------------------------------------------
ڥ㳰롼
¹ԳϾ								Ǥ			
¹Գϻ	Τޤ						Τޤ		ػߤ
꥿									Ǥ(*3)		Ǥ
꥿	̤(*1)						Τޤ		Ĥ
------------------------------------------------------------------------------
ڳߥϥɥ
¹ԳϾ								Ǥ			Ǥ
¹Գϻ	¸						Τޤ		Τޤ
꥿		(*2)					᤹(*4)	ѹԲ
꥿	̤(*2)						̤(*1)		Τޤ
------------------------------------------------------------------------------
ISR।٥ȥϥɥ
¹ԳϾ								Ǥ			Ǥ
¹Գϻ	Τޤ						Τޤ		Τޤ
꥿									᤹(*4)	ѹԲ
꥿	̤(*1)						̤(*1)		Τޤ
------------------------------------------------------------------------------
CPU㳰ϥɥ
¹ԳϾ	Ǥ							Ǥ			Ǥ
¹Գϻ	Τޤ						Τޤ		Τޤ
꥿		᤹						᤹(*4)	ѹԲ
꥿	̤(*1)						̤(*1)		Τޤ
------------------------------------------------------------------------------
ڳĥӥ롼
¹ԳϾ	Ǥ							Ǥ			Ǥ
¹Գϻ	Τޤ						Τޤ		Τޤ
꥿		Ǥ							Ǥ			Ǥ
꥿	Τޤ						Τޤ		Τޤ
------------------------------------------------------------------------------

(*1) ꥿ξ˽鷺˥꥿󤷤ο񤤤̤꥿
ξ˽С꥿ľϤΤޤޤȤʤ롥

(*2) ˡ˽鷺꥿󤷤ο񤤤̤
ˡ˽С꥿ľCPUå֤Ȥʤ롥

(*3)ǤաפϼͳԹǤ롥dis_dspena_dspФͥȤ
нˡȤơITRON4.0ͤǤϡsns_dspѤˡ󼨤
Ƥ롥ȤƱ˼¹Ԥ륿㳰롼ǥǥѥ
ػߡľ֤ѹȡˡǤбǤʤޤ
ɤˡѰդƤʤITRON4.0ͺιθ­ȹͤ
롥

(*4) ѹ뤿APIɸǤϵꤵƤʤᡤѹԲġפȸ
뤳ȤǤ롥

TOPPERS/ASPͥˤ¸ʵɥ١

μ¹Գϻ

μ¹ԳϻϡCPUå֡ͥ٥ޥ֡
ǥѥåľ֡㳰ػ߾֤ȤʤФʤʤʲ
줬¸Ƥ뤳Ȥǧ롥

μ¹ԳϻϡǥѥåΡdispatcherˤ顤
ԳϤstart_rˤʬ饿εưϤƤӽФ
롥

CPUå֤ˤĤƤϡstart_rˤơCPUå֤ˤ
Ԥ롥

dispatcherϡƥȡCPUå֡ͥ٥ޥ
֡ǥѥåľ֤ǸƤӽФ졤Ʊ֤start_rʬ롥
start_rǤϡͥ٥ޥȥǥѥåػߥե饰ѹʤᡤ
μ¹Գϻˤϡͥ٥ޥ֡ǥѥå
֤ȤʤäƤ롥

dispatcher嵭ǸƤӽФ뤳Ȥγǧɬס

㳰ػ߾֤ˤĤƤϡmake_dormantˤơTCBenatexե
ɤFALSEˤƤꡤٻ߾֤δ֤Ϥ줬ݤ롥Τᡤ
μ¹Գϻˤϡ̤ʽɬפʤ

νλ

νλˤϡCPUå֡ͥ٥ޥ֡ǥ
ѥåľ֤ȤʤФʤʤʲ줬¸Ƥ뤳Ȥ
ǧ롥

νλˤext_tskƤӽФ뤬ǡCPUå֤Ǹ
Ф줿ˤϤβʥɾϡext_tskCPUå֤˰ܹԤ
ݤˡCPUå֤ǸƤФ줿ˤϡܹԽάƤˡ
ͥ٥ޥʳǸƤФ줿ˤϤǥѥå
߾֤ǸƤФ줿ˤϥǥѥåεĤԤäƤ롥

̤

TOPPERS/ASPͥˤ¸M68040¸

μ¹Գ

ǥѥådispatcherˤϡƥȡCPUå֡ǥ
ѥåľ֡ͥ٥ޥ֤ǸƤӽФ롥

M68040ˤƤϡξ郎Ƥ뤳Ȥǧɬפ

¹ԳϻϡCPUå֡ǥѥåľ֡ͥ
٥ޥ֤ȤʤФʤʤᡤǥѥå㤫饿
ԳϤstart_rˤˤơCPUå롥

M68040ˤƤϡstart_rμνǤ¸Ƥ롥

----------------------------------------
	clr.l lock_flag						/* CPUå֤ */
	and.w #~0x0700, %sr
----------------------------------------

start_r¹ԤˤϡʥǥΡ˳ͥ٥ޥ֤
ʤäƤ뤿ᡤơ쥸SRIPM0ȤƤ褤saved_iipm
¸᤹ͤɬפϤʤˡ

make_dormantˤơTCBenatexեɤfalseˤƤꡤ
ٻ߾֤δ֤Ϥ줬ݤ롥Τᡤμ¹Գϻ˥㳰
ػ߾֤Ȥ뤿ˡ̤ʽɬפʤ

νλ

ext_tskˤơCPUå֤ǸƤФ줿ˤϤβʥɾϡ
ext_tskCPUå֤˰ܹԤݤˡCPUå֤ǸƤФ줿ˤϡ
ܹԽάƤˡǥѥåػ߾֤ǸƤФ줿ˤϥǥ
ѥåεġͥ٥ޥʳǸƤФ줿ˤϤ
ԤäƤ롥

㳰롼μ¹Գ

㳰롼θƽФcall_texrtnˤϡƥȡ
CPUå֡㳰ľ֤ǸƤӽФ롥å¸ˤ
Ƥϡras_texena_texcall_texrtnƤӽФƤ뤬⤳
Ƥ롥

M68040ˤƤϡdispatch_rret_int_r2ս꤫call_texrtnƤӽФ
Ƥ롥dispatch_r¹ԤˤϡCPUå֤ȤʤäƤꡤ
㳰ľ֤ξΤcall_texrtnƤӽФ褦ˤƤ롥ret_int_r
ĤƤ⡤¹ԤˤCPUå֤ȤʤäƤꡤ㳰ľ
ξΤcall_texrtnƤӽФ褦ˤƤcall_texrtnľܸƤ
calltexƤ٤Сcalltexˤơ㳰ľ֤ξΤ
call_texrtnƤӽФ褦ˤʤäƤˡ

㳰롼¹ԳϻϡCPUå֡㳰ػ߾
֤ȤʤФʤʤᡤcall_texrtnˤƥ㳰롼
ƤӽФˡCPUå㳰ػ߾֤ȤƤ롥ޤǥ
ѥåػߡľ֤ȳͥ٥ޥϡƤӽФξ֤¸
Τߤǡ֤ѹϹԤʤ

㳰롼󤫤Υ꥿

call_texrtnˤƥ㳰롼󤫤äˡCPUå
ؤΰܹԡCPUå֤äƤˤϾάˤȡǥѥåػߡ
ľ֤ȳͥ٥ޥƤӽФξ֤᤹Ԥޤ
㳰ľ֤Ȥʥ㳰롼³ƸƤӽФ
ϡ㳰ľ֤ˤϤʤˡCPUå֤βϡcall_texrtn
꥿󤷤˹Ԥ

å¸ˤơras_texena_texcall_texrtnƤӽФ
ˤϡcall_texrtnΥ꥿ˤꥵӥؿ롥
ӥؿǤϡcall_texrtnäˡt_unlock_cpu
ӽФCPUå֤롥

M68040ˤơdispatch_rcall_texrtnƤӽФ줿ˤϡ
call_texrtnΥ꥿ˤꡤľܥӥؿ
dispatchθƽФˡӥؿǤϡdispatch
äˡt_unlock_cpuƤӽФCPUå֤롥

ret_int_rcall_texrtnƤӽФ줿ˤϡcall_texrtnΥ꥿
ˡlock_flag򥯥ꥢrte̿ˤIPMȯͤᤷơ
CPUå֤롥ΥϤˡret_intˤƥڴ
ԤäȡԤʤäʥ㳰롼¹Ԥ뤿
reqflg򥻥åȤˤʬǤ뤬ξ⡤rte̿ˤ
ꡤIPMϥߤդξ֤ꡤͤ˹פ
ȤʤäƤ롥

ߥϥɥμ¹Գ

ߥϥɥμ¹ԳϻˤϡåȰ¸ˤơͥ
ޥ򡤼¹ԳϤߥϥɥγͥ٤ꤹ롥

M68040ˤƤϡͥ٥ޥѹϡϡɥǹԤ뤿
ᡤեȥǤ̤νԤɬפʤ

ߥϥɥ餫Υ꥿

ߥϥɥ餫Υ꥿ˤϡåȰ¸ˤơCPUå
֤ᤷͥ٥ޥߥϥɥ¹Գ᤹ͤ

M68040ˤƤϡߥϥɥ餫νиret_intˤν򡤤
Ĥμ¹ԷϩʬƳǧɬפ롥

(1) 褬󥿥ƥȤreqflgfalseξˤϡret_int_1
ˤơlock_flag򥯥ꥢrte̿ˤIPMȯͤᤷ
ơCPUå֤ͥ٥ޥ򸵤᤹ͤ

(2) ڴɬפʾˤϡCPUå֤˰ܹԤơǥѥå
dispatcherˤʬ롥κݤˡȯIPMʥǥѥåα
֤ǤʤȤ顤TIPM_ENAALLˤʤäƤϤˤsaved_iipm¸
롥ˤꡤ˼¹Ԥ٤ؤCPUå֤
ߥ󥰤ǡCPUå֤ͥ٥ޥȯ
ͤꤵ뤳Ȥˤʤ롥

(3) ڴɬפʤ㳰롼μ¹Ԥɬפʾ
ϡCPUå֤˰ܹԤơcall_rettexƤӽФκݤˡȯ
IPMTIPM_ENAALLǤȤϸ¤ʤˤsaved_iipm¸롥
ˤꡤcall_rettexǥ㳰롼ƤӽФCPU
֤륿ߥ󥰤ǡCPUå֤ͥ٥ޥ
ȯͤꤵ뤳Ȥˤʤ롥

ߥӥ롼ISRˤμ¹Գ

ߥӥ롼ISRˤϡե졼ߥϥ
ɥ餫ƤӽФISRθƽФϡߥϥɥμ¹ԳϸˤΤޤޤ
֤ǹԤ¾ISR꥿󤷤˸ξ֤ᤷ˹Ԥ
ξ⡤ISRμ¹ԳϻξƤ롥

ߥӥ롼ISRˤΥ꥿

ߥӥ롼ISRˤΥ꥿νϡե졼
ߥϥɥ˴ޤޤ롥ǤϡCPUå֤ǤФ
ͥ٥ޥISRƽФ᤹ͤ

।٥ȥϥɥμ¹Գ

ϥɥϥå¸call_cychdr顤顼ϥɥϥ
å¸call_almhdrƤӽФ⡤ƽФCPUå
֤롥ǡCPUå֤˰ܹԤΤsignal_timeΤ
ʤΤǡͥ٥ޥϡsignal_timeƤФ줿ͤꤵ롥

।٥ȥϥɥ餫Υ꥿

।٥ȥϥɥ餫Υ꥿νϡϥɥˤĤƤ
å¸call_cychdrˡ顼ϥɥˤĤƤϥå
¸call_almhdr˴ޤޤ롥ǤϡCPUå֤ǤʤCPU
֤ᤷCPUå֤βϡsignal_timeǹԤˡͥ
٥ޥ򥿥।٥ȥϥɥƽФ᤹ͤ

CPU㳰ϥɥμ¹Գ

CPU㳰ϥɥμ¹Գϻˤϡ¹ԳΥƥ֤¸Τ
ǡƥ֤򤽤ΤޤްѤ

M68040ˤƤϡ㳰¹ԳľΥơ쥸SRˤ
lock_flag򥹥å¸塤ƥ֤ѹˡCPU㳰
롼ƤӽФ

CPU㳰ϥɥ餫Υ꥿

CPU㳰ϥɥ餫Υ꥿ˤϡåȰ¸ˤơCPU
å֤ȳͥ٥ޥCPU㳰ϥɥ¹Գξ
֤᤹

M68040ˤƤϡCPU㳰ϥɥ餫νиret_excˤˤơ
lock_flag򸵤ͤᤷƤ롥ͥ٥ޥˤĤƤϡ
μ¹ԷϩʬƳǧɬפ롥

(1) 褬󥿥ƥȤreqflgfalseξˤϡret_exc_2
ˤơrte̿ˤIPMȯͤᤷơͥ٥ޥ
򸵤᤹ͤCPUå֤CPU㳰ȯˤϡreqflg
trueˤʤ뤳ȤϤʤΤǡηϩǼ¹Ԥ롥

(2,3) ¾ξϡCPUå֤CPU㳰ȯǤꡤ
ߥϥɥ餫νиƱͤǤ롥

ʾ
