Пример #1
0
/*
 *  受信した文字の取出し
 */
Inline bool_t scif_getchar(SIOPCB *p_siopcb, char *rxdata)
{
	uint16_t fsrval;
	uint16_t lsrval;
	uint8_t read_data;

	fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR));
	lsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR));
	if (fsrval & (SCFSR_ER | SCFSR_BRK)) {
		fsrval = fsrval & ~(SCFSR_ER | SCFSR_BRK);
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval);
	}
	if (lsrval & SCLSR_ORER) {
		lsrval = lsrval & ~SCLSR_ORER;
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR), lsrval);
	}
	if (fsrval & SCFSR_RDF) {
		read_data = sil_reb_mem((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFRDR);
		fsrval = fsrval & ~SCFSR_RDF;
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval);
		*rxdata = (char)read_data;
		return true;
	}
	return false;
}
Пример #2
0
/*
 *  初期化
 */
void
smsc_init(void)
{
    /*
     * Enter Config mode 
     */
    sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0x55 << 8));
    sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0x55 << 8));

    /*
     * Init SCI0
     */
    /* Power on */
    smsc_config_write(0x22, (smsc_config_read(0x22) | 0x10));
    /* Select SCI0 */
    smsc_config_write(0x07, 0x04);
    /* Enable SCI0 */
    smsc_config_write(0x30, 0x01);
    /* Set SCI0 Base Address */
    smsc_config_write(0x60, (SMSC_SCI0_BASE_ADDR & 0xff00) >> 8);
    smsc_config_write(0x61, (SMSC_SCI0_BASE_ADDR & 0xff));    
    /* IRQ4 */
    smsc_config_write(0x70, 0x04);
    

    /*
     *  Exit Config mode
     */
    sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0xAA << 8));
}
Пример #3
0
/*
 *  シリアルI/Oポートに対する受信エラー割込み処理
 */
Inline void
sh2scif_isr_siop_err (SIOPCB * siopcb)
{
	/* エラーフラグをクリア */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SCFSR)) & ~SCFSR_ER);
	/*  FIFOの初期化  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFCR),
				 (VH) SCFCR_RFRST);
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x0030);
}
void set_init_moudlestop_setting(){
    /* power management setting*/
	/* unlock register access */
	sil_wrh_mem((void *)(SYSTEM_PRCR_ADDR), SYSTEM_PRKEY | SYSTEM_PRC1);

	//enable RSPI0
	sil_wrw_mem((void*)SYSTEM_MSTPCRA_ADDR, 0x46FFFFFF); //reset MSTPCRA
	sil_wrw_mem((void*)SYSTEM_MSTPCRB_ADDR, 0xFFFFFFFF); //reset MSTPCRB
	sil_wrw_mem((void*)SYSTEM_MSTPCRC_ADDR, 0xFFFF0000); //reset MSTPCRC

	//lock register access
	sil_wrh_mem((void *)(SYSTEM_PRCR_ADDR), SYSTEM_PRKEY );
	/* end power management setting */
}
Пример #5
0
/*
 *  シリアルI/Oポートへのポーリングでの出力
 */
void
scif_pol_putc(char c, ID siopid)
{
	const SIOPINIB *p_siopinib;
	uint16_t fsrval;
	SIL_PRE_LOC;

	p_siopinib = get_siopinib(siopid);

	while(1) {
		/*
		 *  リエントラントにするため、全割込みロック状態にする。
		 */
		SIL_LOC_INT();

		fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR));
		if (fsrval & SCFSR_TDFE) {
			sil_wrb_mem((uint8_t *)p_siopinib->port + REG_SCFTDR, c);
			sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), ~(SCFSR_TEND | SCFSR_TDFE));
			/*
			 *  リターンする前に全割込みロックフラグを元の状態に戻す。
			 */
			SIL_UNL_INT();
			return;
		} else {
			/*
			 *  ここで全割込みロックを解除して、割込みを受け付ける。
			 */
			SIL_UNL_INT();
		}
	}
}
Пример #6
0
/*
 *  シリアルI/Oポートからのコールバックの禁止
 */
void
sh2scif_dis_cbr (SIOPCB * siopcb, UINT cbrtn)
{
	switch (cbrtn) {
	case SIO_ERDY_SND:			/* 送信割り込み要求を禁止 */
		sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
					 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
										  SCIF_SCSCR)) & ~SCSCR_TIE);
		break;
	case SIO_ERDY_RCV:			/* 受信割り込み要求を禁止 */
		sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
					 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
										  SCIF_SCSCR)) & ~SCSCR_RIE);
		break;
	}
}
Пример #7
0
/*
 *  受信割込み許可
 */
Inline void scif_enable_rcv(SIOPCB *p_siopcb)
{
	uint16_t scrval;

	scrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR));
	scrval |= SCSCR_RIE;
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR), scrval);
}
Пример #8
0
/*
 *  送信割込み禁止
 */
Inline void scif_disable_send(SIOPCB *p_siopcb)
{
	uint16_t scrval;

	scrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR));
	scrval = scrval & ~SCSCR_TIE;
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR), scrval);
}
Пример #9
0
/* フラグをリセットする */
Inline void
sh2scif_isr_siop_brk (SIOPCB * siopcb)
{
	/* フラグをクリア */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SC1SSR)) & ~SC1SSR_BRK);
}
Пример #10
0
/*
 *  シリアルI/Oポートのオープン
 */
SIOPCB *
sh1sci_opn_por(ID siopid, VP_INT exinf)
{
	SIOPCB *siopcb = get_siopcb(siopid);
	VB scr, smr;
	VH pbcr1;

#ifdef GDB_STUB
	if (siopid == PORT1) {
		siopcb->exinf = exinf;
		siopcb->openflag = TRUE;
		return(siopcb);
	}
#endif	/*  GDB_STUB  */

	sh1_anb_reg(siopcb->inib->base + SCR, (VB)~(SCR_TE | SCR_RE));	/*  送受信停止  */

	/*  ピンアサイン
	 *     シリアルデバイス自体の事項ではないので
	 *     本来はこのファイルに記述するのはふさわしくないが、
	 *     hw_serial.cを用意するのも煩雑なので暫定的にここに入れている。
	 */
	pbcr1 = sil_reh_mem((VP)PBCR1);
	if (siopid == PORT1) {	/* PB08:RxD0 PB09:TxD0  */
		pbcr1 = (pbcr1 & PBCR1_TD0_RD0_MASK) | PBCR1_TD0 | PBCR1_RD0;
	} else {		/* PB10:RxD1 PB11:TxD1  */
		pbcr1 = (pbcr1 & PBCR1_TD1_RD1_MASK) | PBCR1_TD1 | PBCR1_RD1;
	}
	sil_wrh_mem((VP)PBCR1, pbcr1);
	
						/*  送受信フォーマット  */
	smr = siopcb->inib->smr_init;

	sil_wrb_mem(siopcb->inib->base + SMR, smr);
	
	sil_wrb_mem(siopcb->inib->base + BRR, (UB)siopcb->inib->baudrate);	/*  ボーレート設定  	*/

					/*  割込み禁止とクロックソースの選択 */
	scr = (VB)(~(SCR_TIE | SCR_RIE | SCR_TE | SCR_RE |
			  SCR_MPIE | SCR_TEIE | SCR_CKE_MASK) | SCR_CKE);
	sil_wrb_mem(siopcb->inib->base + SCR, scr);
	
	/*
	 * ボーレートの設定後、1カウント分待たなければならない。
	 */
	sil_dly_nse(siopcb->inib->delay);

					/* エラーフラグをクリア	*/
	sh1_anb_reg(siopcb->inib->base + SSR, (VB)~(SSR_ORER | SSR_FER | SSR_PER));
					/* 受信割り込み許可   	*/
					/* 送受信許可  		*/
	sh1_orb_reg(siopcb->inib->base + SCR, (SCR_RIE | SCR_TE | SCR_RE));
			/*  送信割込みの許可は送信制御関数で行う  */

	siopcb->exinf = exinf;
	siopcb->openflag = TRUE;
	return(siopcb);
}
Пример #11
0
/*
 *  送信する文字の書込み
 */
Inline void
sh2scif_putchar (SIOPCB * siopcb, char c)
{
	/*  トランスミットFIFOデータレジスタエンプティ・フラグのクリア */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFTDR), c);
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SC1SSR)) & ~SC1SSR_TDFE);
}
Пример #12
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
sh2scif_cls_por (SIOPCB * siopcb)
{
	/*  送受信停止、割込み禁止  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 (VH) ~ (SCSCR_TIE | SCSCR_RIE | SCSCR_TE | SCSCR_RE));

	siopcb->openflag = FALSE;
}
Пример #13
0
/*
 *  ターゲットシステム依存 初期化ルーチン
 */
void
sys_initialize()
{
#if defined(MS7709ASE01) || defined(MS7729RSE01)    
    /* Enable IRL Interrupt */
    sil_wrh_mem((VP)ICR1, 0x5000);
#else /* MS7750SE01 */
    sil_wrh_mem((VP)ICR, 0x0000);
#endif /* defined(MS7709ASE01) | defined(MS7729RSE01) */   
    /*
     * Init Super I/O
     */
    smsc_init();

    /*
     * Init SIO
     */
    fdc37c935a_init();
}
Пример #14
0
/*
 *  文字を受信したか?
 */
Inline bool_t scif_getready(SIOPCB *p_siopcb)
{
	uint16_t fsrval;
	uint16_t lsrval;

	fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR));
	lsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR));
	if (fsrval & (SCFSR_ER | SCFSR_BRK)) {
		fsrval = fsrval & ~(SCFSR_ER | SCFSR_BRK);
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval);
	}
	if (lsrval & SCLSR_ORER) {
		lsrval = lsrval & ~SCLSR_ORER;
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR), lsrval);
	}
	if (fsrval & SCFSR_RDF) {
		return true;
	}
	return false;
}
Пример #15
0
/*
 *  受信した文字の取出し
 */
Inline char
sh2scif_getchar (SIOPCB * siopcb)
{
	VB data;

	data = sil_reb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFRDR));
	/*  レシーブデータレジスタフル・フラグのクリア  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SC1SSR)) & ~SC1SSR_RDRF);
	return data;
}
Пример #16
0
/*
 *  シリアルI/Oポートのオープン
 */
SIOPCB *
sh2scif_opn_por (ID siopid, VP_INT exinf)
{
	SIOPCB *siopcb;

	siopcb = get_siopcb (siopid);

	/*  送受信停止  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 sil_reb_mem ((VB *) (siopcb->siopinib->reg_base +
									  SCIF_SCSCR)) & ~(SCSCR_TE | SCSCR_RE));

	/*  SCIデータ入出力ポートの設定  */
	/*  ピンアサイン */
	/* sys_initializeで設定 */

	/*  FIFOの初期化  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR),
				 (VB) (SCFCR_TFRST | SCFCR_RFRST));

	/*  送受信フォーマット  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSMR), 0x00);
	/*  調歩同期式  */
	/*  8ビット、パリティなし  */
	/*  ストップビットレングス:1   */
	/*  クロックセレクト */

	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCBRR), (VB) siopcb->siopinib->brr);	/* ボーレート設定 */


	/*
	 * ボーレートの設定後、1カウント分待たなければならない。
	 */
	sil_dly_nse (sh2scif_DELAY);	/* 値はsh1と同じ */

	/*  FIFOの設定  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x00);

	/* エラーフラグをクリア */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SC1SSR)) & ~SC1SSR_ER);

	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 (VB) (SCSCR_RIE | SCSCR_TE | SCSCR_RE));

	siopcb->exinf = exinf;
	siopcb->openflag = TRUE;
	return (siopcb);
}
Пример #17
0
/*
 *  シリアルI/Oポートのオープン
 */
SIOPCB *
sio_opn_por(ID siopid, VP_INT exinf)
{
	SIOPCB * siopcb = GET_SIOPCB(siopid);

	siopcb->exinf = exinf;

	switch(SIO_TYP(siopcb->flags)) {
	case SIO_TYP_M32RUART:

		/* UART初期化 */
		sil_wrb_mem((void *)(SIOCR(siopcb->port)+3), 0);

		/* ポートを開く(UART0) */
		sil_wrb_mem((void *)PDATA(5), 0);
		sil_wrb_mem((void *)PDIR(5),  0x80);

		/* UART, Non-parity, 1 stop-bit */
		sil_wrb_mem((void *)(SIOMOD0(siopcb->port)+3), 0);

		/* 8bit, internal clock */
		sil_wrh_mem((void *)(SIOMOD1(siopcb->port)+2), 0x0800);

		/* M32R(32102) - f(BLK)=16MHzで115200bps */
		sil_wrh_mem((void *)(SIOBAUR(siopcb->port)+2), SERIAL_CLKDIV);
		sil_wrb_mem((void *)(SIORBAUR(siopcb->port)+3), SERIAL_CLKCMP);

		/* 送受信割込み発生許可 */
		sil_wrh_mem((void *)(SIOTRCR(siopcb->port)+2), 0x0006);

		/* ステータスクリア, 送受信動作開始 */
		sil_wrb_mem((void *)(SIOCR(siopcb->port)+2), 0x3);
		sil_wrb_mem((void *)(SIOCR(siopcb->port)+3), 0x3);

		/* 受信割込み受付許可 */
		sil_wrh_mem((void *)(ICUCR(SIO,siopcb->port)+2), 0x1000);
		sil_wrh_mem((void *)(ICUCR(SIO,siopcb->port)+6), 0x1000);

		/* TxD,RxDピン有効(UART0) */
		sil_wrh_mem((void *)PMOD(5), 0x5500);

		break;
	}

	return siopcb;
}
Пример #18
0
/*
 *  シリアルI/Oポートの初期化 banner出力のためカーネルの初期化と無関係に行う
 */
void
sys_initialize ()
{
	SIOPCB *siopcb;

	/* 使用する周辺機器はここで有効にしておく。 */
	/*  SCIデータ入出力ポートの設定  */

#ifndef GDB_STUB

	/* SCI1 */
	sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0002));
	sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD1 | PFC_RXD1));
#if TNUM_PORT >=2
	/* SCI0 */
	sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0001));
	sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD0 | PFC_RXD0));
#endif /*TNUM_PORT >=2 */

#else /* GDB_STUB */

	/* SCI0 */
	sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0001));
	sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD0 | PFC_RXD0));

#endif /* GDB_STUB */

	/* CMT0 */
	sil_wrh_mem (MSTCR2, (VH) ((VH) sil_reh_mem (MSTCR2) & ~0x1000));
	/*
	 *  デバイス依存のオープン処理.
	 */
	/*バナー出力するため */
	sh2sci_initialize();
	siopcb = sh2sci_opn_por (LOGTASK_PORTID, 0);
}
Пример #19
0
/*
 *  低レベルのターゲットシステム依存の初期化 _hardware_init_hook
 *
 *  スタートアップモジュールの中で,メモリの初期化の前に呼び出される.
 */
void
hardware_init_hook(void)
{
	/* WCR3:ウエイトコントロールレジスタ3
	 * WPU=1    WAIT端子プルアップ
	 * A02LW=00 エリア0,2を1ロングウェイト
	 * A6LW=00  エリア6  を1ロングウェイト
	 */
	sil_wrh_mem(BSC_WCR3, 0x8000); 
	
	/* BCR:バスコントロールレジスタ
	 * DRANE=0   エリア1は外部メモリ空間
	 * IOE=0     エリア6は外部メモリ空間
	 * WARP=0    ノーマルモード:外部アクセスと内部アクセスを同時に行わない
	 * RDDTY=0   RD信号HI T1の50%
	 * BAS=0     WRH,WRL,A0信号有効
	 */
	sil_wrh_mem(BSC_BCR, 0x0000);
	
	/* WCR1:ウエイトコントロールレジスタ1
	 * read cycle stateで
	 * wait端子サンプルしない
	 * RWx=0  エリア1,3,4,5,7 1ステート固定
	 * RWx=0  エリア0,2,6 1ステート+ロングウェイト(計3ステート)
	 * WW1=1  エリア1外部メモリ 2ステート
	 */
	sil_wrh_mem(BSC_WCR1, 0x00ff);
	
	/* WCR2:ウエイトコントロールレジスタ2
	 * DMAないので初期値のまま
	 */
	sil_wrh_mem(BSC_WCR2, 0xffff); 
	
	/*
	 * PA、PB出力バッファ初期化
	 */
	sil_wrh_mem(PA_DR, VAL_PA_DR);
	sil_wrh_mem(PB_DR, VAL_PB_DR); 

	/*
	 * PA入出力初期化(sys_support.h参照)
	 */
	sil_wrh_mem(PFC_PACR1, VAL_PFC_PACR1);
	sil_wrh_mem(PFC_PACR2, VAL_PFC_PACR2);
                                        
	sil_wrh_mem(PFC_PAIOR, VAL_PFC_PAIOR);
                    
	sil_wrh_mem(PFC_PBCR1, VAL_PFC_PBCR1);
	sil_wrh_mem(PFC_PBCR2, VAL_PFC_PBCR2);
	sil_wrh_mem(PFC_PBIOR, VAL_PFC_PBIOR);

	sil_wrh_mem(PFC_CASCR, VAL_PFC_CASCR);

}
Пример #20
0
Inline void
st16c_write(UW addr, UW offset, UB val)
{
    sil_wrh_mem((VP)(addr + offset),val);
}
Пример #21
0
void
hardware_init_hook (void)
{
	sil_wrh_mem (BCR1, 0x202f);
	sil_wrh_mem (BCR2, 0x5500);
	sil_wrh_mem (WCR1, 0x0010);
	sil_wrh_mem (PACRH, 0x5000);
	sil_wrh_mem (PACRL1, 0x1540);
	sil_wrh_mem (PACRL2, 0x0140);
	sil_wrh_mem (PBCR1, 0x0002);
	sil_wrh_mem (PBCR2, 0xa005);
	sil_wrh_mem (PCCR, 0xfffc);
	sil_wrh_mem (PDCRH1, 0x5555);
	sil_wrh_mem (PDCRH2, 0x5555);
	sil_wrh_mem (PDCRL1, 0xffff);
	sil_wrh_mem (PDCRL2, 0x0000);
	sil_wrh_mem (PECRL1, 0x0000);
	sil_wrh_mem (PECRL2, 0x0000);
	sil_wrh_mem (PAIORL, 0x87e7);
	sil_wrh_mem (PBIOR, 0x023c);
}
Пример #22
0
/*
 *  送信する文字の書込み
 */
Inline void scif_putchar(SIOPCB *p_siopcb, char c)
{
	sil_wrb_mem((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFTDR, c);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), ~(SCFSR_TEND | SCFSR_TDFE));
}
Пример #23
0
/*
 * ハードウェアの初期化処理
 */
static int scif_init_siopinib(const SIOPINIB *p_siopinib)
{
	uint16_t fsrval;
	uint8_t brrval;

	fsrval = UART_CLK / (32 * p_siopinib->bps_setting) - 1;
	if (fsrval > 255) return 1;
	brrval = (uint8_t)fsrval;

	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), 0);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFCR), SCFCR_TFRST | SCFCR_RFRST);
	(void)sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR));
	(void)sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCLSR));
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), 0);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCLSR), 0);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), SCSCR_INTCLK);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSMR), SCSMR_CKS1);	/* 8N1, P1clock/1 */
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCEMR), 0);
	sil_wrb_mem((uint8_t *)p_siopinib->port + REG_SCBRR, brrval);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFCR), SCFCR_RSTRG_15 | SCFCR_RTRG_1 | SCFCR_TTRG_8);
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), SCSCR_TE | SCSCR_RE | SCSCR_INTCLK);
	while (sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR)) & SCFSR_RDF) {
		(void)sil_reb_mem((uint8_t *)p_siopinib->port + REG_SCFRDR);
		sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), ~SCFSR_RDF);
	}
	sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), 0);
	return 0;
}
Пример #24
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
scif_cls_por(SIOPCB *p_siopcb)
{
	sil_wrh_mem(p_siopcb->p_siopinib->port + REG_SCSCR, 0);
}
Пример #25
0
/*
 *  低レベルのターゲットシステム依存の初期化 _hardware_init_hook
 *
 *  スタートアップモジュールの中で,メモリの初期化の前に呼び出される.
 */
void
hardware_init_hook(void)
{
	/* WCR3:ウエイトコントロールレジスタ3
	 * WPU=1    WAIT端子プルアップ
	 * A02LW=00 エリア0,2を1ロングウェイト
	 * A6LW=00  エリア6  を1ロングウェイト
	 */
	sil_wrh_mem(BSC_WCR3, 0x8000); 
	
	/* BCR:バスコントロールレジスタ
	 * DRANE=0   エリア1は外部メモリ空間
	 * IOE=0     エリア6は外部メモリ空間
	 * WARP=0    ノーマルモード:外部アクセスと内部アクセスを同時に行わない
	 * RDDTY=0   RD信号HI T1の50%
	 * BAS=0     WRH,WRL,A0信号有効
	 */
	sil_wrh_mem(BSC_BCR, 0x0000);
	
	/* WCR1:ウエイトコントロールレジスタ1
	 * read cycle stateで
	 * wait端子サンプルしない
	 * RWx=0  エリア1,3,4,5,7 1ステート固定
	 * RWx=0  エリア0,2,6 1ステート+ロングウェイト(計3ステート)
	 * WW1=1  エリア1外部メモリ 2ステート
	 */
	sil_wrh_mem(BSC_WCR1, 0x00ff);
	
	/* WCR2:ウエイトコントロールレジスタ2
	 * DMAないので初期値のまま
	 */
	sil_wrh_mem(BSC_WCR2, 0xffff); 
	
	/*
	 * PA、PB出力バッファ初期化
	 */
	sil_wrh_mem(PA_DR, VAL_PA_DR);
	sil_wrh_mem(PB_DR, VAL_PB_DR); 

	/*
	 * PA入出力初期化(sys_support.h参照)
	 */
	sil_wrh_mem(PFC_PACR1, VAL_PFC_PACR1);
	sil_wrh_mem(PFC_PACR2, VAL_PFC_PACR2);
                                        
	sil_wrh_mem(PFC_PAIOR, VAL_PFC_PAIOR);
                    
	sil_wrh_mem(PFC_PBCR1, VAL_PFC_PBCR1);
	sil_wrh_mem(PFC_PBCR2, VAL_PFC_PBCR2);
	sil_wrh_mem(PFC_PBIOR, VAL_PFC_PBIOR);

	sil_wrh_mem(PFC_CASCR, VAL_PFC_CASCR);

}