=====================================================================
                CHIP_LPC18XXチップ依存部 (asp-1.7.0対応）
                            Last Modified: 2012/Oct/06
=====================================================================

このチップ依存部は、TOPPERS/ASP 1.7.0対応 LPC17XX依存部を元に開発した。

(1) 対応しているターゲットシステムの種類・構成，バージョン番号

	・ターゲットハードウェア（ボード等）の名称と対応している構成
		NXP製LPC18シリーズに共有のチップ依存部

	・ターゲット略称
		lpc18xx_gcc
	
	・ターゲット非依存部のバージョン番号
		1.7
	
	・プロセッサ，チップ，開発環境依存部の構成とバージョン番号
		1.7.1
		
	・使用するPDICとバージョン番号
		ターゲットに選択は任せてあるが、標準でpdic/uartを用意している。

(2) 使用する開発環境と動作検証した条件（バージョン，オプション等）

	・言語処理系（コンパイラ，アセンブラ，リンカ等）
		gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-56) 
	
	・デバッグ環境
		GNU gdb (Sourcery G++ Lite 2010q1-188) 7.0.50.20100218-cvs
		Open On-Chip Debugger 0.4.0 (2010-08-12-22:40)
		HJ/LINK USB
		LPC1830 Xplorer

(3) ターゲット定義事項の規定
(3-1) データ型に関する規定
(3-2) 割込み処理に関する規定
 
 //TODO 現時点ではっきりとは判明していない
 TMIN_INTPRIは -7 である。詳細は chip_kernel.hを参照。


	以下の割り込みベクトル用インデックスを使用している。INHNO_XXXおよびINTNO_XXXも同じ値を持つ。
#define IRQ_VECTOR_DAC		(16+DAC_IRQn)
#define IRQ_VECTOR_RESERVED0		(16+RESERVED0_IRQn)
#define IRQ_VECTOR_DMA		(16+DMA_IRQn)
#define IRQ_VECTOR_RESERVED1		(16+RESERVED1_IRQn)
#define IRQ_VECTOR_RESERVED2		(16+RESERVED2_IRQn)
#define IRQ_VECTOR_ETHERNET		(16+ETHERNET_IRQn)
#define IRQ_VECTOR_SDIO		(16+SDIO_IRQn)
#define IRQ_VECTOR_LCD		(16+LCD_IRQn)
#define IRQ_VECTOR_USB0		(16+USB0_IRQn)
#define IRQ_VECTOR_USB1		(16+USB1_IRQn)
#define IRQ_VECTOR_SCT		(16+SCT_IRQn)
#define IRQ_VECTOR_RITIMER		(16+RITIMER_IRQn)
#define IRQ_VECTOR_TIMER0		(16+TIMER0_IRQn)
#define IRQ_VECTOR_TIMER1		(16+TIMER1_IRQn)
#define IRQ_VECTOR_TIMER2		(16+TIMER2_IRQn)
#define IRQ_VECTOR_TIMER3		(16+TIMER3_IRQn)
#define IRQ_VECTOR_MCPWM		(16+MCPWM_IRQn)
#define IRQ_VECTOR_ADC0		(16+ADC0_IRQn)
#define IRQ_VECTOR_I2C0		(16+I2C0_IRQn)
#define IRQ_VECTOR_I2C1		(16+I2C1_IRQn)
#define IRQ_VECTOR_RESERVED3		(16+RESERVED3_IRQn)
#define IRQ_VECTOR_ADC1		(16+ADC1_IRQn)
#define IRQ_VECTOR_SSP0		(16+SSP0_IRQn)
#define IRQ_VECTOR_SSP1		(16+SSP1_IRQn)
#define IRQ_VECTOR_USART0		(16+USART0_IRQn)
#define IRQ_VECTOR_UART1		(16+UART1_IRQn)
#define IRQ_VECTOR_USART2		(16+USART2_IRQn)
#define IRQ_VECTOR_USART3		(16+USART3_IRQn)
#define IRQ_VECTOR_I2S0		(16+I2S0_IRQn)
#define IRQ_VECTOR_I2S1		(16+I2S1_IRQn)
#define IRQ_VECTOR_RESERVED4		(16+RESERVED4_IRQn)
#define IRQ_VECTOR_RESERVED5		(16+RESERVED5_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_PIN		(16+PIN_IRQn)
#define IRQ_VECTOR_GINT0		(16+GINT0_IRQn)
#define IRQ_VECTOR_GINT1		(16+GINT1_IRQn)
#define IRQ_VECTOR_EVENTROUTER		(16+EVENTROUTER_IRQn)
#define IRQ_VECTOR_C		(16+C_IRQn)
#define IRQ_VECTOR_RESERVED6		(16+RESERVED6_IRQn)
#define IRQ_VECTOR_RESERVED7		(16+RESERVED7_IRQn)
#define IRQ_VECTOR_ATIMER		(16+ATIMER_IRQn)
#define IRQ_VECTOR_RTC		(16+RTC_IRQn)
#define IRQ_VECTOR_RESERVED8		(16+RESERVED8_IRQn)
#define IRQ_VECTOR_WWDT		(16+WWDT_IRQn)
#define IRQ_VECTOR_RESERVED9		(16+RESERVED9_IRQn)
#define IRQ_VECTOR_C		(16+C_IRQn)
#define IRQ_VECTOR_QEI		(16+QEI_IRQn)

(3-3) カーネル管理外の割込みに関する規定
(3-4) CPU例外処理に関する規定
(3-5) 性能評価用システム時刻の参照に関する規定
(3-6) オーバランハンドラ機能拡張のサポートに関する規定
(3-7) その他

(4) カーネルの起動／終了処理に関する情報
	・用意しているスタートアップモジュールの処理内容
		chip_initialize()では、core_initialize()を呼び出してプロセッサを初期化する。
		
	・hardware_init_hook
		SCB_CCR_STKALIGN_Mskをクリアして、例外割り込みのアライメントをCORETX-M3 rev 1に
		あわせている。
		
	・カーネルを終了した後の振舞い
		chip_exit()はcore_terminate()を呼ぶ。
		

(5) メモリマップ
	ターゲット依存部で決定するので、チップ依存部はメモリマップを操作しない。

(6) タイマドライバ関連の情報

	・タイムティックの周期，その変更方法
		タイムティックはchip_timer.hによって変更できる。周期を変更した場合、
		chip_kernel.hのTIC_NUME, TIC_DENOを変更して1mSを生成する方法をカーネルに知らせる。	
	
	・使用するリソース（タイマ）
		SYSTICKタイマーを使う。
	
	・タイマ割込みの割込み優先度の変更方法
		chip_timer.hのINTPRI_TIMERを変更する。
		
	・オーバランタイマ割込みの割込み優先度の変更方法

(7) シリアルインタフェースドライバの情報

	target_user.txtを参照。

(8) システムログ機能の情報

	・システムログの低レベル出力の実現方法
		target_config.hのtarget_fput_log()が使用できるよう、chip_fput_log()を用意している。
		
(9) システム構築手順

	target_user.txt参照

(10) ターゲットシステム固有の注意事項

(10) 類似のターゲットにポーティングする開発者向けの参考情報
	CORTEX-M3を使った他のチップにポーティングする場合には、以下のオブジェクトを修正する
	
	lpc18xx.h				(名前をチップ識別名に変更する)
		CMSIS					インクルードするCMSISヘッダファイルを変更する
		TMAX_INTNO				最大の割り込みインデックス番号
		TBITW_IPRI				NVICの割り込み優先順位のビット幅
		TBITW_SUBIPRI			NVICのサブプライオリティのビット幅
		割り込みベクトル番号		チップに沿った宣言に変更する。
		
	chip_config.h
		initPLL1()				PLL初期化シーケンスはチップ依存である
		
	chip_config.c
		chip_initilaize()		初期化時にチップ依存の特殊処理が必要なら変更する
		chip_exit()				終了時にチップ依存の特殊処理が必要なら変更する
		chip_fput_log()			使用するSIOドライバが変わるなら変更する
		initPLL0()				PLL初期化シーケンスはチップ依存である
		hardware_init_hook		チップに強く依存するので必ず変更する
		
	chip_kernel.h
		TMIN_INTPRI				最大割り込み優先度
		
	chip_stddef.h
		TOPPERS_CHIP_LPC18XX	ターゲット識別マクロ。ターゲット識別名を大文字にし、頭に
								TOPPERS_CHIP_をつける。
			
	chip_syssvc.h
		SIO_UART_CLOCK			pdc/uartを使用する場合、UARTに入力されるクロックの周波数を宣言する
		CHIP_COPYRIGHT			チップ依存部の著作権表示文字列
		
	chip_timer.h
		TIMER_CLOCK				CPUクロックとタイマー周期の比

TBITW_IPRIとTMIN_INTPRIを間違えると、割り込み禁止が正常に動作しない、割り込み時に
アサーションが起きるなどの致命的問題が発生するので注意。

(12) ディレクトリ構成・ファイル構成
	target_user.txtを参照。

(13) バージョン履歴

2012/Oct/6
	ver 1.7.1





