Beispiel #1
0
/*
 *  ターゲットシステム依存の初期化
 */
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));
}
Beispiel #2
0
/*
 *  タイマの停止処理
 */
void
target_timer_terminate(intptr_t exinf)
{
	/*
	 *  タイマの動作を停止する.
	 */
	dga_write((void *) TADR_DGA_CSR12, CSR12_STOP);
}
Beispiel #3
0
/*
 *  タイマの起動処理
 */
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);
}