/************************************************************************/
/* CQBBEL GNU CC Common Control Software / (C) Toshio MURAI 2011, 2012	*/
/*      This is Free Software;   You can redistribute this software     */
/*      and/or modify it under the terms of the GNU General Public      */
/*      License version 3, or (at your option) any later version.       */
/************************************************************************/

//周波数制御レジスタ FRQCR 16 H'FFFE0010 16

/* クロック設定コントローラ制御レジスタ */
//#define FRQCR	*((volatile unsigned short int *)(0xFFFE0010))

#define	CLK	((struct str_clk*) 0xFFFE0010)

struct str_clk {
	volatile unsigned short	FRQCR;	
};

#define	IREQ	((struct str_ireq *)0xFFFE0800)
struct str_ireq {
	volatile unsigned short	ICR0;	//割り込みコントロールレジスタ0 ICR0 16 H'FFFE0800 16、32
	volatile unsigned short	ICR1;	//割り込みコントロールレジスタ1 ICR1 16 H'FFFE0802 16、32
	volatile unsigned short	ICR2;	//割り込みコントロールレジスタ2 ICR2 16 H'FFFE0804 16、32
	volatile unsigned short	IRQRR;	//IRQ 割り込み要求レジスタ IRQRR 16 H'FFFE0806 16、32
	volatile unsigned short	PINTER;	//PINT 割り込みイネーブルレジスタ PINTER 16 H'FFFE0808 16、32
	volatile unsigned short	PIRR;	//PINT 割り込み要求レジスタ PIRR 16 H'FFFE080A 16、32
	volatile unsigned short	IBCR;	//バンクコントロールレジスタ IBCR 16 H'FFFE080C 16、32
	volatile unsigned short	IBNR;	//バンク番号レジスタ IBNR 16 H'FFFE080E 16、32
};

#define	IPRL	((struct str_iprl *)0xFFFE0818)
struct str_iprl {
	volatile unsigned short	IPR01;//割り込み優先レベル設定レジスタ01 IPR01 16 H'FFFE0818 16、32
	volatile unsigned short	IPR02;//割り込み優先レベル設定レジスタ02 IPR02 16 H'FFFE081A 16、32
	volatile unsigned short	IPR03;//
	volatile unsigned short	IPR04;//	
	volatile unsigned short	IPR05;//割り込み優先レベル設定レジスタ05 IPR05 16 H'FFFE0820 16、32
};
#define	IPRH	((struct str_iprh *)0xFFFE0C00)	
struct str_iprh {	
	volatile unsigned short	IPR06;//割り込み優先レベル設定レジスタ06 IPR06 16 H'FFFE0C00 16、32
	volatile unsigned short	IPR07;//割り込み優先レベル設定レジスタ07 IPR07 16 H'FFFE0C02 16、32
	volatile unsigned short	IPR08;//割り込み優先レベル設定レジスタ08 IPR08 16 H'FFFE0C04 16、32
	volatile unsigned short	IPR09;//割り込み優先レベル設定レジスタ09 IPR09 16 H'FFFE0C06 16、32
	volatile unsigned short	IPR10;//割り込み優先レベル設定レジスタ10 IPR10 16 H'FFFE0C08 16、32
	volatile unsigned short	IPR11;//割り込み優先レベル設定レジスタ11 IPR11 16 H'FFFE0C0A 16、32
	volatile unsigned short	IPR12;//割り込み優先レベル設定レジスタ12 IPR12 16 H'FFFE0C0C 16、32
	volatile unsigned short	IPR13;//割り込み優先レベル設定レジスタ13 IPR13 16 H'FFFE0C0E 16、32
	volatile unsigned short	IPR14;//割り込み優先レベル設定レジスタ14 IPR14 16 H'FFFE0C10 16、32
	volatile unsigned short	IPR15;//割り込み優先レベル設定レジスタ15 IPR15 16 H'FFFE0C12 16、32
	volatile unsigned short	IPR16;//割り込み優先レベル設定レジスタ16 IPR16 16 H'FFFE0C14 16、32
	volatile unsigned short	IPR17;//割り込み優先レベル設定レジスタ17 IPR17 16 H'FFFE0C16 16、32
	volatile unsigned short	IPR18;//割り込み優先レベル設定レジスタ18 IPR18 16 H'FFFE0C18 16、32
	volatile unsigned short	IPR19;//割り込み優先レベル設定レジスタ19 IPR19 16 H'FFFE0C1A 16、32
	volatile unsigned short	IPR20;//割り込み優先レベル設定レジスタ20 IPR20 16 H'FFFE0C1C 16、32
	volatile unsigned short	IPR21;//割り込み優先レベル設定レジスタ21 IPR21 16 H'FFFE0C1E 16、32
	volatile unsigned short	IPR22;//割り込み優先レベル設定レジスタ22 IPR22 16 H'FFFE0C20 16、32
};

#define	CACHE	((struct str_cache*)0xFFFC1000)
struct str_cache {
	volatile unsigned long	CCR1;//キャッシュ キャッシュ制御レジスタ1 CCR1 32 H'FFFC1000 32
	volatile unsigned long	CCR2;//キャッシュ制御レジスタ2 CCR2 32 H'FFFC1004 32
};


/* UARTコントローラ */
#define	USE_BPS		38400	/* 通信速度 19200 or 38400 */
#define	USE_UART_CH		2	/* UARTチャネル2 or 3 */

#if (USE_BPS == 38400)
#define SCBRR_SET 19
#endif
#if (USE_BPS == 19200)
#define SCBRR_SET 38
#endif

/* モジュールスタンバイコントローラ制御レジスタ */
//#define STBCR4	*((volatile unsigned char *)(0xFFFE040C))

#define	PORTA	((volatile struct str_port *) 0xFFFE3800)
#define	PORTB	((volatile struct str_port *) 0xFFFE3820)
#define	PORTC	((volatile struct str_port *) 0xFFFE3840)
#define	PORTD	((volatile struct str_port *) 0xFFFE3860)
#define	PORTE	((volatile struct str_port *) 0xFFFE3880)
#define	PORTF	((volatile struct str_port *) 0xFFFE38A0)
#define	PORTG	((volatile struct str_port *) 0xFFFE38C0)
#define	PORTH	((volatile struct str_port *) 0xFFFE38E0)
#define	PORTJ	((volatile struct str_port *) 0xFFFE3900)
#define	PORTK	((volatile struct str_port *) 0xFFFE3920)

struct str_port {
	unsigned short	C75;	//00	      G  
	unsigned short	CR6;	//02	      G  
	unsigned short	CR5;	//04	 B    G  
	unsigned short	CR4;	//06	 B    G  
	unsigned short	CR3;	//08	 B D  G  
	unsigned short	CR2;	//0A	 BCD FG JK
	unsigned short	CR1;	//0C	 BCDEFGHJK
	unsigned short	CR0;	//0E	 BCDEFGHJK
	unsigned short	IOR1;	//10	 B    G  
	unsigned short	IOR0;	//12	ABCDEFG JK
	unsigned short	DR1;	//14	AB    G  
	unsigned short	DR0;	//16	ABCDEFG JK
	unsigned short	PR1;	//18	 B    G  
	unsigned short	PR0;	//1A	ABCDEFGHJK
};

/* キャッシュ制御レジスタ */
#define CCR1	*((volatile unsigned int *)(0xFFFC1000))
#define CCR2	*((volatile unsigned int *)(0xFFFC1004))

/* 割り込みコントローラ関連 */
#define IBCR	*((volatile unsigned short int *)(0xFFFE080C))
#define IBNR	*((volatile unsigned short int *)(0xFFFE080E))
#define IPR17	*((volatile unsigned short int *)(0xFFFE0C16))

struct str_sci {
	volatile unsigned short	SCSMR;//	シリアルモードレジスタ_0 SCSMR_0 16 H'FFFE8000 16
	volatile unsigned short	SCBRR;//	ビットレートレジスタ_0 SCBRR_0 8 H'FFFE8004 8
	volatile unsigned short	SCSCR;//	シリアルコントロールレジスタ_0 SCSCR_0 16 H'FFFE8008 16
	volatile unsigned short	SCFTDR;//	送信FIFO データレジスタ_0 SCFTDR_0 8 H'FFFE800C 8
	volatile unsigned short	SCFSR;//	シリアルステータスレジスタ_0 SCFSR_0 16 H'FFFE8010 16
	volatile unsigned short	SCFRDR;//	受信FIFO データレジスタ_0 SCFRDR_0 8 H'FFFE8014 8
	volatile unsigned short	SCFCR;//	FIFO コントロールレジスタ_0 SCFCR_0 16 H'FFFE8018 16
	volatile unsigned short	SCFDR;//	FIFO データカウントセットレジスタ_0 SCFDR_0 16 H'FFFE801C 16
	volatile unsigned short	SCSPTR;//	シリアルポートレジスタ_0 SCSPTR_0 16 H'FFFE8020 16
	volatile unsigned short	SCLSR;//	ラインステータスレジスタ_0 SCLSR_0 16 H'FFFE8024 16
	volatile unsigned short	SCEMR;//	シリアル拡張モードレジスタ_0 SCEMR_0 16 H'FFFE8028 16
};
#define	SCI0	((struct str_sci *)0xFFFE8000)
#define	SCI1	((struct str_sci *)0xFFFE8000)
#define	SCI2	((struct str_sci *)0xFFFE9000)
#define	SCI3	((struct str_sci *)0xFFFE9800)
#define	SCI4	((struct str_sci *)0xFFFEA000)
#define	SCI5	((struct str_sci *)0xFFFEA800)
#define	SCI6	((struct str_sci *)0xFFFEB000)
#define	SCI7	((struct str_sci *)0xFFFEB800)


struct str_adc {
	volatile unsigned short	ADDRA;	//A/D データレジスタA ADDRA 16 H'FFFF9800 16
	volatile unsigned short	ADDRB;	//A/D データレジスタB ADDRB 16 H'FFFF9802 16
	volatile unsigned short	ADDRC;	//A/D データレジスタC ADDRC 16 H'FFFF9804 16
	volatile unsigned short	ADDRD;	//A/D データレジスタD ADDRD 16 H'FFFF9806 16
	volatile unsigned short	ADDRE;	//A/D データレジスタE ADDRE 16 H'FFFF9808 16
	volatile unsigned short	ADDRF;	//A/D データレジスタF ADDRF 16 H'FFFF980A 16
	volatile unsigned short	ADDRG;	//A/D データレジスタG ADDRG 16 H'FFFF980C 16
	volatile unsigned short	ADDRH;	//A/D データレジスタH ADDRH 16 H'FFFF980E 16
	volatile unsigned short DUM[8];
	volatile unsigned short	ADCSR;	//A/D コントロール／ステータスレジスタ ADCSR 16 H'FFFF9820 16
};
#define	ADC	((struct str_adc*)0xFFFF9800)

struct str_cmt {
	volatile unsigned short	CMSTR;//コンペアマッチタイマスタートレジスタ CMSTR 16 H'FFFEC000 16
	volatile unsigned short	CMCSR_0;//コンペアマッチタイマコントロール／ステータスレジスタ_0 CMCSR_0 16 H'FFFEC002 16
	volatile unsigned short	CMCNT_0;//コンペアマッチカウンタ_0 CMCNT_0 16 H'FFFEC004 8、16
	volatile unsigned short	CMCOR_0;//コンペアマッチコンスタントレジスタ_0 CMCOR_0 16 H'FFFEC006 8、16
	volatile unsigned short	CMCSR_1;//コンペアマッチタイマコントロール／ステータスレジスタ_1 CMCSR_1 16 H'FFFEC008 16
	volatile unsigned short	CMCNT_1;//コンペアマッチカウンタ_1 CMCNT_1 16 H'FFFEC00A 8、16
	volatile unsigned short	CMCOR_1;//コンペアマッチコンスタントレジスタ_1 CMCOR_1 16 H'FFFEC00C 8、16
};
#define CMT	((struct str_cmt*)0xFFFEC000)

struct str_stb3 {	/*AD*/
	volatile unsigned char	STBCR3;//スタンバイコントロールレジスタ3 STBCR3 8 H'FFFE0408 8
};
#define STB3	((struct str_stb3*)0xFFFE0408)

struct str_stb4 {
	volatile unsigned char	STBCR4;	//スタンバイコントロールレジスタ7 STBCR4 8 H'FFFE040C 8
};
#define STB4	((struct str_stb4*)0xFFFE040C)

struct str_stb7 {
	volatile unsigned char	STBCR7;	//スタンバイコントロールレジスタ7 STBCR7 8 H'FFFE0418 8
};
#define STB7	((struct str_stb7*)0xFFFE0418)


//スタンバイコントロールレジスタ1 STBCR1 8 H'FFFE0014 8
//スタンバイコントロールレジスタ2 STBCR2 8 H'FFFE0018 8
//スタンバイコントロールレジスタ3 STBCR3 8 H'FFFE0408 8
//スタンバイコントロールレジスタ4 STBCR4 8 H'FFFE040C 8
//スタンバイコントロールレジスタ5 STBCR5 8 H'FFFE0410 8
//スタンバイコントロールレジスタ6 STBCR6 8 H'FFFE0414 8
//スタンバイコントロールレジスタ7 STBCR7 8 H'FFFE0418 8
//スタンバイコントロールレジスタ8 STBCR8 8 H'FFFE041C 8

//	volatile unsigned char	STBCR1;//スタンバイコントロールレジスタ1 STBCR1 8 H'FFFE0014 8
//	volatile unsigned char	STBCR2;//スタンバイコントロールレジスタ2 STBCR2 8 H'FFFE0018 8
//	volatile unsigned char	STBCR5;//スタンバイコントロールレジスタ5 STBCR5 8 H'FFFE0410 8
//	volatile unsigned char	STBCR6;//スタンバイコントロールレジスタ6 STBCR6 8 H'FFFE0414 8
//	volatile unsigned char	STBCR8;//スタンバイコントロールレジスタ8 STBCR8 8 H'FFFE041C 8
//	volatile unsigned char	SWRSTCR;//ソフトウェアリセットコントロールレジスタ SWRSTCR 8 H'FFFE0430 8
//	volatile unsigned char	SYSCR1;//システムコントロールレジスタ1 SYSCR1 8 H'FFFE0400 8
//	volatile unsigned char	SYSCR2;//システムコントロールレジスタ2 SYSCR2 8 H'FFFE0404 8
//	volatile unsigned char	SYSCR3;//システムコントロールレジスタ3 SYSCR3 8 H'FFFE0420 8
//	volatile unsigned char	SYSCR4;//システムコントロールレジスタ4 SYSCR4 8 H'FFFE0424 8
//	volatile unsigned char	SYSCR5;//システムコントロールレジスタ5 SYSCR5 8 H'FFFE0428 8
//	volatile unsigned char	RRAMKP;//保持用内蔵RAM 保持エリア指定レジスタ RRAMKP 8 H'FFFE6800 8
//	volatile unsigned char	DSCTR;//ディープスタンバイコントロールレジスタ DSCTR 8 H'FFFE6802 8
//	volatile unsigned char	DSSSR;//ディープスタンバイ解除要因セレクトレジスタ DSSSR 16 H'FFFE6804 16
//	volatile unsigned char	DSESR;//ディープスタンバイ解除エッジセレクトレジスタ DSESR 16 H'FFFE6806 16
//	volatile unsigned char	DSFR;//ディープスタンバイ解除要因フラグレジスタ DSFR 16 H'FFFE6808 16
//	volatile unsigned char	DSFR;//XTAL 水晶発振器ゲインコントロールレジスタ DSFR 8 H'FFFE6810 8


