#include "iodefine.h"
#include "ssif_ctrl.h"

void init_ssif(void)
{
	#if (defined(WAKAMATSU) || defined(WAKAMATSU_LCD))
	PORT.PECR0.BIT.PE0MD	= 2;	/* AUDIO_CLK */
	#endif

	PORT.PFCR0.BIT.PF3MD	= 2;	/* SSISCK2 */
	PORT.PFCR1.BIT.PF4MD	= 2;	/* SSIWS2 */
	PORT.PFCR1.BIT.PF5MD	= 2;	/* SSIDATA2 */

	CPG.STBCR6.BIT.MSTP65	= 0;	/* SSIF2へクロックを供給 */

	#ifdef HOKUTO
	SSIF2.SSICR.BIT.CKS		= 0;	/* オーバサンプルクロック選択:don't care */
	#endif
	#if (defined(WAKAMATSU) || defined(WAKAMATSU_LCD))
	SSIF2.SSICR.BIT.CKS		= 1;	/* オーバサンプルクロック選択:AUDIO_CLK */
	#endif
	SSIF2.SSICR.BIT.TUIEN	= 0;	/* 送信アンダフロー割込みイネーブル */
	SSIF2.SSICR.BIT.TOIEN	= 0;	/* 送信オーバフロー割込みイネーブル */
	SSIF2.SSICR.BIT.RUIEN	= 0;	/* 受信アンダフロー割込みイネーブル */
	SSIF2.SSICR.BIT.ROIEN	= 0;	/* 受信オーバフロー割込みイネーブル */
	SSIF2.SSICR.BIT.IIEN	= 0;	/* アイドルモード割込みイネーブル */
	SSIF2.SSICR.BIT.CHNL	= 0;	/* チャネル */
	SSIF2.SSICR.BIT.DWL		= 1;	/* データワード長 */
	#ifdef HOKUTO
	SSIF2.SSICR.BIT.SWL		= 0;	/* システムワード長:don't care */
	SSIF2.SSICR.BIT.SCKD	= 0;	/* シリアルビットクロック方向:スレーブモード */
	SSIF2.SSICR.BIT.SWSD	= 0;	/* シリアルWS方向:スレーブモード */
	#endif
	#if (defined(WAKAMATSU) || defined(WAKAMATSU_LCD))
	SSIF2.SSICR.BIT.SWL		= 3;	/* システムワード長:32ビット */
	SSIF2.SSICR.BIT.SCKD	= 1;	/* シリアルビットクロック方向:マスタモード */
	SSIF2.SSICR.BIT.SWSD	= 1;	/* シリアルWS方向:マスタモード */
	#endif
	SSIF2.SSICR.BIT.SCKP	= 0;	/* シリアルビットクロック極性 */
	SSIF2.SSICR.BIT.SWSP	= 0;	/* シリアルWS極性 */
	SSIF2.SSICR.BIT.SPDP	= 0;	/* シリアルパディング極性 */
	SSIF2.SSICR.BIT.SDTA	= 0;	/* シリアルデータアライメント */
	SSIF2.SSICR.BIT.PDTA	= 1;	/* パラレルデータアライメント */
	SSIF2.SSICR.BIT.DEL		= 0;	/* シリアルデータディレイ */
	#ifdef HOKUTO
	SSIF2.SSICR.BIT.CKDV	= 0;	/* シリアルオーバサンプルクロック分周比:don't care */
	#endif
	#ifdef WAKAMATSU
	SSIF2.SSICR.BIT.CKDV	= 1;	/* シリアルオーバサンプルクロック分周比:AUDIOφ/2 */
	#endif
	#ifdef WAKAMATSU_LCD
	SSIF2.SSICR.BIT.CKDV	= 2;	/* シリアルオーバサンプルクロック分周比:AUDIOφ/4 */
	#endif
	SSIF2.SSICR.BIT.MUEN	= 0;	/* ミュートイネーブル */
	SSIF2.SSICR.BIT.TEN		= 0;	/* 送信イネーブル */
	SSIF2.SSICR.BIT.REN		= 0;	/* 受信イネーブル */

	SSIF2.SSIFCR.BIT.TTRG	= 0;	/* 送信データ数トリガ */
	SSIF2.SSIFCR.BIT.RTRG	= 0;	/* 受信データ数トリガ */
	SSIF2.SSIFCR.BIT.TIE	= 1;	/* 送信インタラプトイネーブル */
	SSIF2.SSIFCR.BIT.RIE	= 0;	/* 受信インタラプトイネーブル */
	SSIF2.SSIFCR.BIT.TFRST	= 0;	/* 送信FIFOデータレジスタリセット */
	SSIF2.SSIFCR.BIT.RFRST	= 0;	/* 受信FIFOデータレジスタリセット */

	SSIF2.SSICR.BIT.TEN		= 1;
	return;
}
