/* * ターゲットシステム依存の初期化 */ void sys_initialize() { /* * プロセッサ識別のための変数の初期化 */ board_id = ((UINT)(sil_rew_mem((VP) TADR_BOARD_REG0)) & 0x1f); board_addr = (VP)(board_id << 24); /* * 割込み関連の初期化 * * すべての割込みをマスク・クリアし,割込みベクトルを設定する. */ dga_write((VP) TADR_DGA_CSR21, 0); dga_write((VP) TADR_DGA_CSR23, ~0); dga_write((VP) TADR_DGA_CSR19, (TVEC_G0I << 24) | (TVEC_G1I << 16) | (TVEC_SWI << 8) | TVEC_SPRI); /* * アボート割込みの設定(NMI) * * アボート割込みの割込みレベルを設定し,要求をクリアした後, * マスクを解除する. */ dga_set_ilv((VP) TADR_DGA_CSR24, TBIT_ABTIL, TIRQ_NMI); dga_write((VP) TADR_DGA_CSR23, TBIT_ABT); dga_bit_or((VP) TADR_DGA_CSR21, TBIT_ABT); /* * メモリ領域の設定 * * ローカルメモリのVMEバス上での先頭アドレスとサイズ(16MB) * し,アクセスを受け付けるように設定する.また,VMEバスから * 拡張アドレスアクセスを受け付けるようにに設定する. */ dga_write((VP) TADR_DGA_CSR4, (UW) board_addr | 0x00ff); dga_write((VP) TADR_DGA_CSR5, 0x0000012fu); /* * インタフェースレジスタ(IFR)の設定 * * インタフェースレジスタのベースアドレスを設定する.また,イ * ンタフェースレジスタ0のサービスリクエストフラグをクリア. * インタフェースレジスタ3にボードのID番号を設定. */ dga_write((VP) TADR_DGA_CSR3, (board_id << 4) | 0x3); dga_write((VP) TADR_DGA_IFR0, 0x80000000u); dga_write((VP) TADR_DGA_IFR3, board_id); /* * ラウンドロビンモードに設定(マルチプロセッサ対応) */ dga_write((VP) TADR_DGA_CSR1, (dga_read((VP) TADR_DGA_CSR1) & 0xffeffcff) | (1u << 20) | ((board_id % 4) << 8)); }
/* * タイマの停止処理 */ void target_timer_terminate(intptr_t exinf) { /* * タイマの動作を停止する. */ dga_write((void *) TADR_DGA_CSR12, CSR12_STOP); }
/* * タイマの起動処理 */ void target_timer_initialize(intptr_t exinf) { CLOCK cyc = TO_CLOCK(TIC_NUME, TIC_DENO); /* * タイマ周期を設定し,タイマの動作を開始する. */ assert(cyc <= MAX_CLOCK); dga_write((void *) TADR_DGA_CSR12, CSR12_START | cyc); /* * タイマ割込み要求をクリアする. */ x_clear_int(INTNO_TIMER); }