/* * カーネル起動時のバーナー出力用の初期化 */ void st16c2550_init(void) { st16c2550_init_siopinib(get_siopinib(1)); #if TNUM_SIOP > 2 st16c2550_init_siopinib(get_siopinib(2)); #endif /* TNUM_SIOP > 2 */ }
/* * シリアル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(); } } }
/* * カーネル起動時のバナー出力用の初期化 */ void uart_init(void) { int i; /* * すべてのuartを初期化する。id は1からTNUM_SIOP_UARTまで。 */ for ( i=1; i<=TNUM_SIOP_UART; i++ ) uart_init_siopinib(get_siopinib(i)); }
/* * カーネル起動時のバーナ出力用の初期化 */ void scif_init(ID siopid) { SIOPCB *p_siopcb = get_siopcb(siopid); const SIOPINIB *p_siopinib = get_siopinib(siopid); /* この時点では、p_siopcb->p_siopinibは初期化されていない */ if (!(p_siopcb->is_initialized)) { scif_init_siopinib(p_siopinib); p_siopcb->is_initialized = true; } }
/* * シリアルI/Oポートへのポーリングでの出力 */ void st16c2550_pol_putc(char c, ID siopid) { const SIOPINIB *siopinib; siopinib = get_siopinib(siopid); while((st16c_read(siopinib->reg_base, ST16C_LSR) & LSR_TX_EMPTY) != LSR_TX_EMPTY) ; st16c_write(siopinib->reg_base, ST16C_THR, c); }
/* * シリアルI/Oポートへのポーリングでの出力 */ void uart_pol_putc(char c, ID siopid) { const SIOPINIB *siopinib; siopinib = get_siopinib(siopid); while((uart_read(siopinib->reg_base, UART_LSR) & LSR_TX_EMPTY) != LSR_TX_EMPTY) ; uart_write(siopinib->reg_base, UART_THR, c); }
/* * H8S 内蔵 SCI 用ポーリング出力 (LOGTASK_PORTID専用、sys_putcで利用) */ void h8s_sci_putchar_pol( char c ) { const SIOPINIB *siopinib = get_siopinib( LOGTASK_PORTID ); /* TDRE が 1 になるまで待つ */ while ( !(h8s_sci_reb( siopinib->reg_base, (UW) SSR ) & TDRE ) ); h8s_sci_wrb( siopinib->reg_base, (UW) TDR, (UB) c ); /* TDREクリア */ h8s_sci_and( siopinib, (UW) SSR, (UB) ~TDRE ); /* TEND が 1 になるまで待つ */ while ( !(h8s_sci_reb( siopinib->reg_base, (UW) SSR ) & TEND ) ); }
/* * カーネル起動時のバーナー出力用の初期化 */ void h8s_sci_init(void) { h8s_sci_init_siopinib( get_siopinib(1) ); }