void interrupt_initialize() { UINT i; const INHINIB *inhinib; for (inhinib = inhinib_table, i = 0; i < tnum_inhno; inhinib++, i++) { define_inh(inhinib->inhno, inhinib->inthdr); } }
/* * シリアルI/Oポートのオープン */ SIOPCB *sio_opn_por(ID siopid, VP_INT exinf) { SIOPCB* siopcb ; UH uhBase ; /* * オープン出来るポートかのチェック */ if ( siopid < 1 || siopid > TNUM_PORT ) return NULL ; siopcb = &siopcb_table[siopid-1] ; if ( siopcb->bNotExist ) return NULL ; /* * 既にオープン済みの場合 */ if ( siopcb->bOpened ) { siopcb->vpiExinf = exinf ; return siopcb ; } /* * SIOの初期化と存在のチェック */ uhBase = siopcb->uhBase ; __SFR(uhBase) = __UxCR_RUN|__UxCR_TXEMPTY ; if ( ( __SFR(uhBase) & ( __UxCR_RUN|__UxCR_BAUDRATE|__UxCR_PARITY|__UxCR_TXIE| __UxCR_RXIE) ) != __UxCR_RUN ) { siopcb->bNotExist = TRUE ; return NULL ; } /* * 管理テーブルの初期化 */ siopcb->vpiExinf = exinf ; siopcb->bOpened = TRUE ; siopcb->bTxIe = FALSE ; siopcb->bRxIe = FALSE ; siopcb->bLastIsCr = FALSE ; /* * 割り込みハンドラの登録と許可 */ define_inh( INHNO_SIO, sio_handler ) ; __UNLOCK_EXCP() ; __SFRW(__EXCPL) |= siopcb->uhExcpMask ; __LOCK_EXCP() ; return siopcb ; }
/* * プロセッサ依存の初期化 */ void cpu_initialize() { INHNO i; EXCNO j; /* * 割込み擬似ベクタテーブル初期化 * * 0で初期化して未登録扱いにしているので、 * 割込み処理のICU依存部分PROC_ICUでは、 * 未登録の場合の処理を入れておくこと */ for( i = 0; i < TMAX_INTNO; i++ ) { define_inh( i, (FP)0 ); } /* CPU例外擬似ベクタテーブル初期化 */ for( j = 0; j < TMAX_EXCNO; j++ ) { define_exc( j, (FP)&no_reg_exception ); } }