Exemplo n.º 1
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);
}
Exemplo n.º 2
0
void
sys_initialize(void)
{
	VB * p;
	/* コントロール#2レジスタの初期化 */
	p = (VB*)TADR_SFR_UART0_BASE;
	sil_wrb_mem((VP)(p+TADR_SFR_UC2_OFFSET), 0x00);
	/* UAERT1の設定 */
	p = (VB*)TADR_SFR_UART1_BASE;
  			/* 送受信モードレジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UMR_OFFSET), 0x05);	/* 送受信モ−ドレジスタ 内部クロック,*/
													/* 非同期、8ビット、パリティなし、	*/
													/* スリープなし						*/
			/* 送信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC0_OFFSET), 0x10);	/* 送受信制御レジスタ0 クロックf1選択 */
			/* 転送速度レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UBRG_OFFSET), 64);	/* 転送速度レジスタ(19200bps)		*/
			/* 送受信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC1_OFFSET), (TBIT_UiC1_TE | TBIT_UiC1_RE));
													/* 送受信制御レジスタ1 送受信許可	*/

	/* ポート7の初期化 */
	sil_wrb_mem((VP)TADR_SFR_P7, 0xff);				/* ポート7データ初期化				*/
	sil_wrb_mem((VP)TADR_SFR_PD7, 0xff);			/* ポート7出力設定					*/

	/* ポート8の初期化 */
	sil_wrb_mem((VP)TADR_SFR_PD8, 0x00);			/* ポート8入力設定					*/
	sil_wrb_mem((VP)TADR_SFR_PUR2, 0x01);			/* P80からP83プルアップ				*/
}
Exemplo n.º 3
0
/*
 *  シリアルI/Oポートに対する受信エラー割込み処理
 */
Inline void
sh2scif_isr_siop_err (SIOPCB * siopcb)
{
	/* エラーフラグをクリア */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SC1SSR)) & ~SC1SSR_ER);
	/*  FIFOの初期化  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR),
				 (VB) SCFCR_RFRST);
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x30);
}
Exemplo n.º 4
0
/*
 *  シリアルI/Oポートからのコールバックの禁止
 */
void
sh2scif_dis_cbr (SIOPCB * siopcb, UINT cbrtn)
{
	switch (cbrtn) {
	case SIO_ERDY_SND:			/* 送信割り込み要求を禁止 */
		sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
					 sil_reb_mem ((VB *) (siopcb->siopinib->reg_base +
										  SCIF_SCSCR)) & ~SCSCR_TIE);
		break;
	case SIO_ERDY_RCV:			/* 受信割り込み要求を禁止 */
		sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
					 sil_reb_mem ((VB *) (siopcb->siopinib->reg_base +
										  SCIF_SCSCR)) & ~SCSCR_RIE);
		break;
	}
}
Exemplo n.º 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();
		}
	}
}
Exemplo n.º 6
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;
}
Exemplo n.º 7
0
/*
 *  シリアルI/Oポートからのコールバックの禁止
 */
void
sfruart_dis_cbr(SIOPCB *siopcb, UINT cbrtn)
{
	switch (cbrtn) {
	case SIO_ERDY_SND:
		siopcb->uc1 &= ~TBIT_UiC1_TE;
		sil_wrb_mem((VP)(siopcb->siopinib->cntrl_addr+TADR_SFR_UC1_OFFSET), siopcb->uc1);
		break;
	case SIO_ERDY_RCV:
		siopcb->uc1 &= ~TBIT_UiC1_RE;
		sil_wrb_mem((VP)(siopcb->siopinib->cntrl_addr+TADR_SFR_UC1_OFFSET), siopcb->uc1);
		break;
	default:
		break;
	}
}
Exemplo n.º 8
0
void
sys_initialize(void)
{
	VB * p;
	/* コントロール#2レジスタの初期化 */
	p = (VB*)TADR_SFR_UART0_BASE;
	sil_wrb_mem((VP)(p+TADR_SFR_UC2_OFFSET), 0x00);
	/* UAERT1の設定 */
	p = (VB*)TADR_SFR_UART1_BASE;
  			/* 送受信モードレジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UMR_OFFSET), 0x05);	/* 送受信モ−ドレジスタ 内部クロック,*/
													/* 非同期、8ビット、パリティなし、	*/
													/* スリープなし						*/
			/* 送信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC0_OFFSET), 0x10);	/* 送受信制御レジスタ0 クロックf1選択 */
			/* 転送速度レジスタの初期化 (38400bpsは25) */
	sil_wrb_mem((VP)(p+TADR_SFR_UBRG_OFFSET), 51);	/* 転送速度レジスタ(19200bps)		*/
			/* 送受信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC1_OFFSET), (TBIT_UiC1_TE | TBIT_UiC1_RE));
													/* 送受信制御レジスタ1 送受信許可	*/

	/* ポート0の初期化 */
	sil_wrb_mem((VP)TADR_SFR_P0, 0xff);				/* ポート0データ初期化				*/
	sil_wrb_mem((VP)TADR_SFR_PD0, 0xff);			/* ポート0出力設定					*/
}
Exemplo n.º 9
0
/*
 *  シリアルI/Oポートへの文字送信
 */
BOOL
sfruart_snd_chr(SIOPCB *siopcb, char c)
{
	if(sil_reb_mem((VP)(siopcb->siopinib->cntrl_addr+TADR_SFR_UC1_OFFSET)) & TBIT_UiC1_TI){
		sil_wrb_mem((VP)(siopcb->siopinib->cntrl_addr+TADR_SFR_UTB_OFFSET), c);
		return(TRUE);
	}
	return(FALSE);
}
Exemplo n.º 10
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
sfruart_cls_por(SIOPCB *siopcb)
{
	const SIOPINIB	*siopinib;

	siopinib = siopcb->siopinib;

	/* 割り込み禁止 */
	sil_wrb_mem((VP)(siopinib->tic_addr), DISABLE_LEVEL);
	sil_wrb_mem((VP)(siopinib->ric_addr), DISABLE_LEVEL);

	/* 送受信禁止 */
	siopcb->uc1 = C1_DEF;
	sil_wrb_mem((VP)(siopinib->cntrl_addr+TADR_SFR_UC1_OFFSET), siopcb->uc1);

	/* シリアルモジュールを無効にする */
	sil_wrb_mem((VP)(siopinib->cntrl_addr+TADR_SFR_UMR_OFFSET), MR_DISABLE_DEF);
}
Exemplo n.º 11
0
/**
 * \ingroup SIOSUPPORT
 * \brief シリアルポート・ペリフェラル書き込み関数
 * \param addr UARTペリフェラルのベースアドレス。通常はTHRのアドレスである。
 * \param offset ベースアドレスに対する、オフセット値。単位はバイト。
 * \param val レジスタに書き込む値。
 * \details
 * ベースアドレスとオフセットを整数で受け取り、ペリフェラルレジスタに
 * アクセスする。
 */
Inline void
uart_write(uint32_t addr, uint32_t offset, uint8_t val)
{
#ifdef TOPPERS_CHIP_LPC17XX
    sil_wrb_mem((void *)(addr + offset),val);
#else
#error "You must define access method for your architecture"
#endif
}
Exemplo n.º 12
0
/*
 *  ターゲットシステム依存の初期化
 */
void
sys_initialize()
{
	volatile int i;

	/* LED ポート設定 */
	sil_wrb_mem((VP)PMCCT, sil_reb_mem((VP)PMCCT) & (UB)~LED_BIT);
	sil_wrb_mem((VP)PMCT, sil_reb_mem((VP)PMCT) & (UB)~LED_BIT);

	sil_wrb_mem((VP)PCT, sil_reb_mem((VP)PCT) | (UB)LED_BIT);	/* LED off */

#if 0
	/* USBでシリアル通信をするときに、 */
	/* TOPPERSロゴを表示するためにwaitを入れる */
	for(i=0; i<0x1000000; i++) ;
	led(1);
#endif
}
Exemplo n.º 13
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
sh2scif_cls_por (SIOPCB * siopcb)
{
	/*  送受信停止、割込み禁止  */
	sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 (VB) ~ (SCSCR_TIE | SCSCR_RIE | SCSCR_TE | SCSCR_RE));

	siopcb->openflag = FALSE;
}
Exemplo n.º 14
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);
}
Exemplo n.º 15
0
Inline void
uart_write(UW addr, UW offset, UB val)
{
#ifdef UART_IOP_ACCESS
    sil_wrb_iop((VP)(addr + offset),val);
#else
    sil_wrb_mem((VP)(addr + offset),val);	
#endif
}
Exemplo n.º 16
0
/*
 *  SIO受信エラー割込みサービスルーチン
 *  
 *   SH1内蔵のSCIでは割込み番号がチャネル別に分かれているので、
 *   SCI0の受信エラー割込み以外でこのルーチンが呼ばれることはない
 *   
 *   エラー処理自体はエラーフラグのクリアのみにとどめている。
 *     ・オーバーランエラー
 *     ・フレーミングエラー
 *     ・パリティエラー
 */
void
sh1sci2_isr_error(void)
{
	VB ssr1;
	
	if (siopcb_table[1].openflag) {
		ssr1 = sil_reb_mem(SCI_SSR1);	/*  1度読み出して  */
		ssr1 &= ~(SSR_RDRF | SSR_ORER | SSR_FER | SSR_PER);
		sil_wrb_mem(SCI_SSR1, ssr1);	/*  エラーフラグクリア  */
	}
}
Exemplo n.º 17
0
/*
 *  SIO受信エラー割込みサービスルーチン
 *  
 *   SH1内蔵のSCIでは割込み番号がチャネル別に分かれているので、
 *   SCI0の受信エラー割込み以外でこのルーチンが呼ばれることはない
 *   
 *   エラー処理自体はエラーフラグのクリアのみにとどめている。
 *     ・オーバーランエラー
 *     ・フレーミングエラー
 *     ・パリティエラー
 */
void
sh1sci_isr_error(void)
{
	VB ssr0;
	
	if (siopcb_table[0].openflag) {
		ssr0 = sil_reb_mem(SCI_SSR0);	/*  1度読み出して  */
		ssr0 &= ~(SSR_RDRF | SSR_ORER | SSR_FER | SSR_PER);
		sil_wrb_mem(SCI_SSR0, ssr0);	/*  エラーフラグクリア  */
	}
}
Exemplo n.º 18
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
sio_cls_por(SIOPCB *siopcb)
{
	switch(SIO_TYP(siopcb->flags))
	{
	case SIO_TYP_M32RUART:
		/* 送受信動作を禁止する */
		sil_wrb_mem((void *)(SIOCR(siopcb->port)+3), 0);
		break;
	}
}
Exemplo n.º 19
0
void
sys_initialize(void)
{
	VB * p;
	volatile char ps0, pd6;

	/*
	 * ポートの設定
	 */

	/* ポートP63を TxD0, ポートP62を RxD0 に */
	ps0 = sil_reb_mem((VP)TADR_SFR_PS0);
	ps0 |= 0x08;
	ps0 &= ~0x04;
	sil_wrb_mem((VP)TADR_SFR_PS0, ps0);
	pd6 = sil_reb_mem((VP)TADR_SFR_PD6);
	pd6 &= ~0x04;
	pd6 |= 0x08;
	sil_wrb_mem((VP)TADR_SFR_PD6, pd6);

	p = (VB*)TADR_SFR_UART0_BASE;

	/*
	 * UART関連レジスタの設定
	 */
	/* 送受信禁止 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC1_OFFSET), 0x00);

	/* 送受信モードレジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UMR_OFFSET), 0x05);	/* 送受信モ−ドレジスタ 内部クロック,*/
				/* 非同期、8ビット、パリティなし、*/
				/* スリープなし	*/
			/* 送信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC0_OFFSET), 0x10);	/* 送受信制御レジスタ0 クロックf8選択 */
			/* 転送速度レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UBRG_OFFSET), 48);	/* 転送速度レジスタ(38400bps)		*/
			/* 送受信制御レジスタの初期化 */
	sil_wrb_mem((VP)(p+TADR_SFR_UC1_OFFSET), (TBIT_UiC1_TE | TBIT_UiC1_RE));
							/* 送受信制御レジスタ1 送受信許可 */

	/*
	 * LED の初期化
	 */
	sil_wrb_mem((VP)TADR_SFR_P0, 0xff);	/* ポート0データ初期化	*/
	sil_wrb_mem((VP)TADR_SFR_PD0, 0xff);	/* ポート0出力設定	*/
}
Exemplo n.º 20
0
/*
 *  シリアルI/Oポートのクローズ
 */
void
sfruart_cls_por(SIOPCB *siopcb)
{
	const SIOPINIB	*siopinib;

	siopinib = siopcb->siopinib;
	siopcb->tic = 0;
	set_ic_ilvl((VP)(siopinib->hint+TADR_SFR_S0TIC_OFFSET), siopcb->tic);
	set_ic_ilvl((VP)(siopinib->hint+TADR_SFR_S0RIC_OFFSET), 0);
	siopcb->cr1 = C1_DEF;
	sil_wrb_mem((VP)(siopinib->cntrl+TADR_SFR_UC1_OFFSET), siopcb->cr1);
}
Exemplo n.º 21
0
/*
 *  シリアルI/Oポートのオープン
 */
SIOPCB *
sh2scif_opn_por (ID siopid, VP_INT exinf)
{
	SIOPCB *siopcb;

	siopcb = get_siopcb (siopid);

	/*  送受信停止  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 sil_reh_mem ((VH *) (siopcb->siopinib->reg_base +
									  SCIF_SCSCR)) & ~(SCSCR_TE | SCSCR_RE));

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

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

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

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


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

	/*  FIFOの設定  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x0030);

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

	/*  送受信開始  */
	sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR),
				 (VH) (SCSCR_TE | SCSCR_RE));

	siopcb->exinf = exinf;
	siopcb->openflag = TRUE;
	return (siopcb);
}
Exemplo n.º 22
0
/*
 *  SIOドライバの初期化ルーチン
 */
void
sfruart_initialize(void)
{
	SIOPCB	*siopcb;
	UINT	i;

	/*
	 *  シリアルI/Oポート管理ブロックの初期化
	 */
	for (siopcb = siopcb_table, i = 0; i < TNUM_SIOP; siopcb++, i++) {
		siopcb->siopinib = &(siopinib_table[i]);
		siopcb->uc1 = C1_DEF;
		/*
		 * 明示的にポートを不活性化しておく
		 */
		/* 割り込み禁止 */
		sil_wrb_mem((VP)(siopcb->siopinib->tic_addr), DISABLE_LEVEL);
		sil_wrb_mem((VP)(siopcb->siopinib->ric_addr), DISABLE_LEVEL);
		/* 送受信禁止 */
		sil_wrb_mem((VP)(siopcb->siopinib->cntrl_addr+TADR_SFR_UC1_OFFSET), siopcb->uc1);
	}
}
Exemplo n.º 23
0
/*
 *  タイマの停止処理
 */
void
target_hrt_terminate(intptr_t exinf)
{
	/*
	 *  OSタイマを停止する.
	 */
	sil_wrb_mem(OSTM_TT(OSTM0_BASE), OSTM_TT_STOP);

	/*
	 *  タイマ割込み要求をクリアする.
	 */
	clear_int(INTNO_OSTM0);
}
Exemplo n.º 24
0
/*
 *  タイムウィンドウタイマの/オーバランタイマ初期化処理
 */
void
target_totimer_initialize(intptr_t exinf)
{
	/*
	 *  OSタイマをインターバルタイマモードに設定する.
	 */
	sil_wrb_mem(OSTM_CTL(OSTM1_BASE), OSTM_CTL_INTERVAL);

	/*
	 *  タイムウィンドウタイマ割込み要求をクリアする.
	 */
	clear_int(INTNO_OSTM1);
}
Exemplo n.º 25
0
/*
 *  タイマの起動処理
 */
void
target_hrt_initialize(intptr_t exinf)
{
	/*
	 *  OSタイマをフリーランニングコンペアモードに設定する.
	 */
	sil_wrb_mem(OSTM_CTL(OSTM0_BASE), OSTM_CTL_FRCMP);

	/*
	 *  OSタイマの設定値を最大値にしておく.
	 */
	sil_wrw_mem(OSTM_CMP(OSTM0_BASE), 0xffffffff);

	/*
	 *  OSタイマを動作開始する.
	 */
	sil_wrb_mem(OSTM_TS(OSTM0_BASE), OSTM_TS_START);

	/*
	 *  タイマ割込み要求をクリアする.
	 */
	clear_int(INTNO_OSTM0);
}
Exemplo n.º 26
0
/*
 *  送信する文字の書込み
 */
Inline void
sh1sci_putchar(SIOPCB *siopcb, char c)
{
	if (siopcb->inib->rs485if) {
		if (!(sil_reh_mem(PB_DR) & PB_TXE1)) {
			sh1_orh_reg(PB_DR, PB_TXE1);	/* TXENA ON 		*/
			sil_dly_nse(5000);		/* 5us 保護時間		*/
		}
		sil_wrb_mem(siopcb->inib->base + TDR ,c);
		/*  トランスミットデータレジスタエンプティ・フラグのクリア*/
		sh1_anb_reg(siopcb->inib->base + SSR, (VB)~SSR_TDRE);
		/*  TXENA OFF制御のため、のコールバックの許可 */
		sh1sci_ena_cbr(siopcb, SIO_ERDY_SND);
	} else {
#ifdef GDB_STUB
		gdb_stub_putc( c );
#else
		sil_wrb_mem(siopcb->inib->base + TDR ,c);

		/*  トランスミットデータレジスタエンプティ・フラグのクリア*/
		sh1_anb_reg(siopcb->inib->base + SSR, (VB)~SSR_TDRE);
#endif
	}
}
Exemplo n.º 27
0
/*
 *  シリアルI/Oポートのオープン
 */
SIOPCB *
sfruart_opn_por(ID siopid, VP_INT exinf)
{
	SIOPCB		*siopcb;
	const SIOPINIB	*siopinib;
	int i;

	siopcb = get_siopcb(siopid);
	siopinib = siopcb->siopinib;

	sil_wrb_mem((VP)(siopinib->cntrl+TADR_SFR_UMR_OFFSET), siopinib->mr_def);
	sil_wrb_mem((VP)(siopinib->cntrl+TADR_SFR_UC0_OFFSET), siopinib->c0_def);
	sil_wrb_mem((VP)(siopinib->cntrl+TADR_SFR_UBRG_OFFSET), siopinib->brg_def);

	/*
	 *  シリアル割込みの設定
	 */
	set_ic_ilvl((VP)(siopinib->hint+TADR_SFR_S0TIC_OFFSET), siopcb->tic);
	set_ic_ilvl((VP)(siopinib->hint+TADR_SFR_S0RIC_OFFSET), RB_LEVEL);
	siopcb->cr1 = TBIT_UiC1_TE;
	sil_wrb_mem((VP)(siopinib->cntrl+TADR_SFR_UC1_OFFSET), siopcb->cr1);

	/*
	 * ダミーデータ受信
	 */
	sil_reb_mem((VP)(siopinib->cntrl+TADR_SFR_URB_OFFSET));
	sil_reb_mem((VP)(siopinib->cntrl+TADR_SFR_URB_OFFSET));

	for(i = 0 ; i < SFRUART_COUNT ; i++){	/* オープン時送信READYまで待ち */
		if(sil_reb_mem((VP)(siopcb->siopinib->cntrl+TADR_SFR_UC1_OFFSET)) & TBIT_UiC1_TI)
			break;
	}

	siopcb->exinf = exinf;
	return(siopcb);
}
Exemplo n.º 28
0
void sio_handler_out(void)
{
	int port;

	for(port = 0; port < TNUM_PORT; ++ port)
	{
		if((siopcb_table[port].flags & SIO_STS_SENDING) != 0)
		{
			/* 送信ステータス初期化 */
			sil_wrb_mem((void *)(SIOCR(port)+2), 0x1);
			siopcb_table[port].flags &= ~SIO_STS_SENDING;

			sio_ierdy_snd(GET_SIOPCB(ID_PORT(port))->exinf);
		}
	}
}
Exemplo n.º 29
0
/*
 *  シリアルI/Oポートからのコールバックの禁止
 */
void
sfruart_dis_cbr(SIOPCB *siopcb, UINT cbrtn)
{
	switch (cbrtn) {
	case SIO_ERDY_SND:
		siopcb->tic = 0;
        set_ic_ilvl((VP)(siopcb->siopinib->hint+TADR_SFR_S0TIC_OFFSET), siopcb->tic);
		break;
	case SIO_ERDY_RCV:
		siopcb->cr1 &= ~TBIT_UiC1_RE;
		sil_wrb_mem((VP)(siopcb->siopinib->cntrl+TADR_SFR_UC1_OFFSET), siopcb->cr1);
		break;
	deafult:
		break;
	}
}
Exemplo n.º 30
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;
}