⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sh1sci2.c

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 C
📖 第 1 页 / 共 2 页
字号:
			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	}}/* *  SIOドライバの介袋步ル〖チン */voidsh1sci_initialize(void){	SIOPCB	*siopcb;	UINT	i;	/*	 *  シリアルI/Oポ〖ト瓷妄ブロックの介袋步	 */	for (siopcb = siopcb_table, i = 0; i < TNUM_SIOP; siopcb++, i++) {		siopcb->inib     = &siopinib_table[i];		siopcb->openflag = FALSE;	}}/* *  オ〖プンしているポ〖トがあるか々 */BOOLsh1sci_openflag(ID siopid){	SIOPCB *siopcb;	siopcb = get_siopcb(siopid);	return (siopcb->openflag);}/* *  シリアル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);}/* *  シリアルI/Oポ〖トのクロ〖ズ */voidsh1sci_cls_por(SIOPCB *siopcb){				/*  流减慨匿贿、充哈み敦贿 	*/	sh1_anb_reg(siopcb->inib->base + SCR, (VB)~(SCR_TIE | SCR_RIE | SCR_TE | SCR_RE));		siopcb->openflag = FALSE;}/* *  シリアルI/Oポ〖トへの矢机流慨 */BOOLsh1sci_snd_chr(SIOPCB *siopcb, char c){	if (sh1sci_putready(siopcb)) {		sh1sci_putchar(siopcb, c);		return(TRUE);	}	return(FALSE);}/* *  シリアルI/Oポ〖トからの矢机减慨 */INTsh1sci_rcv_chr(SIOPCB *siopcb){	if (sh1sci_getready(siopcb)) {		return((INT)(UB) sh1sci_getchar(siopcb));		/*  (UB)でキャストするのはゼロ橙磨にするため  */	}	return(-1);}/* *  シリアルI/Oポ〖トからのコ〖ルバックの钓材 */voidsh1sci_ena_cbr(SIOPCB *siopcb, UINT cbrtn){	switch (cbrtn) {	case SIO_ERDY_SND:	/* 流慨充り哈み妥滇を钓材 */		sh1_orb_reg(siopcb->inib->base + SCR, SCR_TIE);		break;	case SIO_ERDY_RCV:	/* 减慨充り哈み妥滇を钓材 */		sh1_orb_reg(siopcb->inib->base + SCR, SCR_RIE);		break;	}}/* *  シリアルI/Oポ〖トからのコ〖ルバックの敦贿 */voidsh1sci_dis_cbr(SIOPCB *siopcb, UINT cbrtn){	switch (cbrtn) {	case SIO_ERDY_SND:	/* 流慨充り哈み妥滇を敦贿 */		sh1_anb_reg(siopcb->inib->base + SCR, (VB)~SCR_TIE);		if (siopcb->inib->rs485if) {				/* 流慨姜位充り哈み钓材 */			sh1_orb_reg(siopcb->inib->base + SCR, SSR_TEND);		}		break;	case SIO_ERDY_RCV:	/* 减慨充り哈み妥滇を敦贿 */		sh1_anb_reg(siopcb->inib->base + SCR, (VB)~SCR_RIE);		break;	}}/* *  シリアルI/Oポ〖トに滦する流慨充哈み借妄 */Inline voidsh1sci_isr_siop_out(SIOPCB *siopcb){	VB scr = sil_reb_mem(siopcb->inib->base + SCR);		if ((scr & SCR_TIE) != 0 && sh1sci_putready(siopcb)) {		/*		 *  流慨奶梦コ〖ルバックル〖チンを钙び叫すˉ		 */		sh1sci_ierdy_snd(siopcb->exinf);	}}/* *  シリアルI/Oポ〖トに滦する流慨姜位充哈み借妄 */Inline voidsh1sci_isr_siop_tend(SIOPCB *siopcb){	/* 	 * RS485 流慨敦贿扩告 	 */	sh1_anb_reg(siopcb->inib->base + SCR, (VB)~SSR_TEND);	sh1_anh_reg(PB_DR, ~PB_TXE1);	/* txenaポ〖ト敦贿 */}/* *  シリアルI/Oポ〖トに滦する减慨充哈み借妄 */Inline voidsh1sci_isr_siop_in(SIOPCB *siopcb){	VB scr = sil_reb_mem(siopcb->inib->base + SCR);	if ((scr & SCR_RIE) != 0 && sh1sci_getready(siopcb)) {		/*		 *  减慨奶梦コ〖ルバックル〖チンを钙び叫すˉ		 */		sh1sci_ierdy_rcv(siopcb->exinf);	}}/* *  SIO流慨充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规が流减慨侍、チャネル侍に尸かれているので、 *   SCI0の流慨充哈み笆嘲でこのル〖チンが钙ばれることはない *   */voidsh1sci_isr_out(void){	if (siopcb_table[0].openflag) {		sh1sci_isr_siop_out(&(siopcb_table[0]));	}}/* *  SIO减慨充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规が流减慨侍、チャネル侍に尸かれているので、 *   SCI0の减慨充哈み笆嘲でこのル〖チンが钙ばれることはない *   */voidsh1sci_isr_in(void){	if (siopcb_table[0].openflag) {		sh1sci_isr_siop_in(&(siopcb_table[0]));	}}/* *  SIO减慨エラ〖充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规がチャネル侍に尸かれているので、 *   SCI0の减慨エラ〖充哈み笆嘲でこのル〖チンが钙ばれることはない *    *   エラ〖借妄极挛はエラ〖フラグのクリアのみにとどめている。 *     ˇオ〖バ〖ランエラ〖 *     ˇフレ〖ミングエラ〖 *     ˇパリティエラ〖 */voidsh1sci_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);	/*  エラ〖フラグクリア  */	}}/* * ポ〖リングによる矢机の流慨 */voidsh1sci_putc_pol(char c){	while(!sh1sci_putready(&siopcb_table[0]));	sh1sci_putchar(&siopcb_table[0], c);}/* シリアル2ch誊	*/#if TNUM_SIOP >= 2/* *  SIO流慨充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规が流减慨侍、チャネル侍に尸かれているので、 *   SCI1の流慨充哈み笆嘲でこのル〖チンが钙ばれることはない *   */voidsh1sci2_isr_out(void){	if (siopcb_table[1].openflag) {		sh1sci_isr_siop_out(&(siopcb_table[1]));	}}/* *  SIO流慨姜位充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规が流减慨侍、チャネル侍に尸かれているので、 *   SCI1の流慨充哈み笆嘲でこのル〖チンが钙ばれることはない *   */voidsh1sci2_isr_tend(void){	if (siopcb_table[1].openflag) {		sh1sci_isr_siop_tend(&(siopcb_table[1]));	}}/* *  SIO减慨充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规が流减慨侍、チャネル侍に尸かれているので、 *   SCI0の减慨充哈み笆嘲でこのル〖チンが钙ばれることはない *   */voidsh1sci2_isr_in(void){	if (siopcb_table[1].openflag) {		sh1sci_isr_siop_in(&(siopcb_table[1]));	}}/* *  SIO减慨エラ〖充哈みサ〖ビスル〖チン *   *   SH1柒垄のSCIでは充哈み戎规がチャネル侍に尸かれているので、 *   SCI0の减慨エラ〖充哈み笆嘲でこのル〖チンが钙ばれることはない *    *   エラ〖借妄极挛はエラ〖フラグのクリアのみにとどめている。 *     ˇオ〖バ〖ランエラ〖 *     ˇフレ〖ミングエラ〖 *     ˇパリティエラ〖 */voidsh1sci2_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);	/*  エラ〖フラグクリア  */	}}/* * ポ〖リングによる矢机の流慨 */voidsh1sci2_putc_pol(char c){	while(!sh1sci_putready(&siopcb_table[1]));	sh1sci_putchar(&siopcb_table[1], c);}#endif /* TNUM_SIOP = 2 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -