;*
;*  TOPPERS/ASP Kernel
;*      Toyohashi Open Platform for Embedded Real-Time Systems/
;*      Advanced Standard Profile Kernel
;* 
;*  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
;*                              Toyohashi Univ. of Technology, JAPAN
;*  Copyright (C) 2001 by OAKS16KIT support
;*  Copyright (C) 2003-2004 by Naoki Saito
;*             Nagoya Municipal Industrial Research Institute, JAPAN
;*  Copyright (C) 2003-2004 by Ryosuke Takeuchi
;*               Platform Development Center RICOH COMPANY,LTD. JAPAN
;*  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
;*  Copyright (C) 2013      by Mitsuhiro Matsuura
;* 
;*  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
;*  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
;*  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
;*  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
;*      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
;*      スコード中に含まれていること．
;*  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
;*      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
;*      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
;*      の無保証規定を掲載すること．
;*  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
;*      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
;*      と．
;*    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
;*        作権表示，この利用条件および下記の無保証規定を掲載すること．
;*    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
;*        報告すること．
;*  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
;*      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
;*      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
;*      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
;*      免責すること．
;* 
;*  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
;*  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
;*  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
;*  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
;*  の責任を負わない．
;* 
;*  @(#) $Id: target_support.src 536 2014-10-09 23:11:40Z coas-nagasima $
;*

	.section	P, CODE


	.glb	_hardware_init_hook
	.glb	_software_init_hook


_hardware_init_hook:
	;
	;  動作モード設定
	;
	;  動作モードはボード上の端子によって決定されるため,
	;  ここでは特別設定しない.
	;  ただし, リトルエンディアン/シングルチップモード
	;  であることを前提とする.
	;
	;  またリセット後, 内蔵ROM：有効, 内蔵RAM：有効, 外部バス：無効
	;  である.
	;

	;
	;  クロック設定
	;
	;  入力：12MHz
	;  PLL回路：12 x 8 = 96MHz
	;  システムクロック：96MHz
	;  周辺モジュールクロック：48MHz
	;  外部バスクロック：96MHz
	;  とする.
	;

	;PORT3.PDR.BIT.B6 = 0;
	MOV.L	#08C003H,R11
	MOV.B	[R11],R10
	BCLR	#6,R10
	MOV.B	R10,[R11]
	;PORT3.PDR.BIT.B7 = 0;
	MOV.L	#08C003H,R11
	MOV.B	[R11],R10
	BCLR	#7,R10
	MOV.B	R10,[R11]
	;PORT3.PMR.BIT.B6 = 0;
	MOV.L	#08C003H,R11
	MOV.B	60H[R11],R10
	BCLR	#6,R10
	MOV.B	R10,60H[R11]
	;PORT3.PMR.BIT.B7 = 0;
	MOV.L	#08C003H,R11
	MOV.B	60H[R11],R10
	BCLR	#7,R10
	MOV.B	R10,60H[R11]
	;
	;SYSTEM.PRCR.WORD = 0xa503;
	MOV.L	#080000H,R10
	MOV.W	#-5AFDH,03FEH[R10]
	;
	;while(SYSTEM.MOFCR.BIT.MOFXIN == 0)
	BRA.B	_hardware_init_hook_01
	;SYSTEM.MOFCR.BIT.MOFXIN = 1;	// メインクロック発振器強制発振
_hardware_init_hook_00:
	MOV.L	#080000H,R11
	MOV.B	0C293H[R11],R10
	BSET	#0,R10
	MOV.B	R10,0C293H[R11]
_hardware_init_hook_01:
	MOV.L	#080000H,R10
	MOV.B	0C293H[R10],R10
	AND		#1H,R10
	MOVU.B	R10,R10
	CMP		#0H,R10
	BEQ.B	_hardware_init_hook_00
	;
	;while(SYSTEM.MOSCCR.BIT.MOSTP == 1)
	BRA.B	_hardware_init_hook_11
	;SYSTEM.MOSCCR.BIT.MOSTP = 0;	// メインクロック発振器動作
_hardware_init_hook_10:
	MOV.L	#080000H,R11
	MOV.B	32H[R11],R10
	BCLR	#0,R10
	MOV.B	R10,32H[R11]
_hardware_init_hook_11:
	MOV.L	#080000H,R10
	MOV.B	32H[R10],R10
	AND		#1H,R10
	MOVU.B	R10,R10
	CMP		#0H,R10
	BNE.B	_hardware_init_hook_10
	;
	;SYSTEM.PLLCR.BIT.STC = 0x0f;
	MOV.L	#080000H,R10
	MOV.W	28H[R10],R11
	AND		#-3F01H,R11
	OR		#0F00H,R11
	MOV.W	R11,28H[R10]
	;SYSTEM.PLLCR2.BIT.PLLEN = 0;
	MOV.L	#080000H,R11
	MOV.B	2AH[R11],R10
	BCLR	#0,R10
	MOV.B	R10,2AH[R11]
	;
	;SYSTEM.SCKCR.LONG = 0x21021211;
	MOV.L	#080000H,R10
	MOV.L	#21021211H,20H[R10]
	;
	;SYSTEM.SCKCR3.BIT.CKSEL = 4;		// PLL回路選択
	MOV.L	#080000H,R10
	MOV.W	26H[R10],R11
	AND		#-0701H,R11
	OR		#0400H,R11
	MOV.W	R11,26H[R10]

	;
	;  モジュールストップ
	;
	;  リセット後, 動作している内蔵周辺モジュールはDMAC, DTC,
	;  内蔵RAMのみである.
	;  それ以外の内蔵周辺モジュールに関しては使用する側で
	;  設定すること.
	;

	;SYSTEM.PRCR.WORD = 0xa500;
	MOV.L	#080000H,R10
	MOV.W	#-5B00H,03FEH[R10]
	rts


_software_init_hook:
	;
	;  本コンパイラではweak definitionの機能が無いため,
	;  特に必要な処理はないが, 必ず呼び出すこととする.
	;
	rts


	.end

