#include "kernel_impl.h"
#include <sil.h>
関数 | |
void | target_initialize (void) |
void | target_exit (void) |
void | target_fput_log (char_t c) |
void | x_config_int (INTNO intno, ATR intatr, PRI intpri) |
変数 | |
uint_t | board_id |
void * | board_addr |
void target_exit | ( | void | ) |
target_config.c の 126 行で定義されています。
参照先 dga_write(), dve68k_exit(), prc_terminate, TADR_DGA_CSR21, と TADR_DGA_CSR23.
00127 { 00128 /* 00129 * プロセッサ依存の終了処理 00130 */ 00131 prc_terminate(); 00132 00133 /* 00134 * すべての割込みをマスク・クリアする. 00135 */ 00136 dga_write((void *) TADR_DGA_CSR21, 0U); 00137 dga_write((void *) TADR_DGA_CSR23, ~0U); 00138 00139 /* 00140 * 開発環境依存の終了処理 00141 */ 00142 dve68k_exit(); 00143 }
void target_fput_log | ( | char_t | c | ) |
target_config.c の 149 行で定義されています。
参照先 dve68k_putc().
参照元 logtask_terminate(), と syslog_wri_log().
00150 { 00151 if (c == '\n') { 00152 dve68k_putc('\r'); 00153 } 00154 dve68k_putc(c); 00155 }
void target_initialize | ( | void | ) |
target_config.c の 60 行で定義されています。
参照先 board_addr, board_id, dga_read(), dga_write(), prc_initialize, sil_rew_mem(), TA_EDGE, TADR_BOARD_REG0, TADR_DGA_CSR1, TADR_DGA_CSR19, TADR_DGA_CSR21, TADR_DGA_CSR23, TADR_DGA_CSR3, TADR_DGA_CSR4, TADR_DGA_CSR5, TADR_DGA_IFR0, TADR_DGA_IFR3, TINTNO_ABT, TIRQ_NMI, TVEC_G0I, TVEC_G1I, TVEC_SPRI, TVEC_SWI, と x_config_int.
00061 { 00062 /* 00063 * プロセッサ依存の初期化 00064 */ 00065 prc_initialize(); 00066 00067 /* 00068 * プロセッサ識別のための変数の初期化 00069 */ 00070 board_id = ((uint_t)(sil_rew_mem((void *) TADR_BOARD_REG0)) & 0x1fU); 00071 board_addr = (void *)(board_id << 24); 00072 00073 /* 00074 * 割込み関連の初期化 00075 * 00076 * 割込み属性が設定されているかを判別するための変数を初期化する. 00077 * また,すべての割込みをマスク・クリアし,割込みベクトルを設定す 00078 * る. 00079 */ 00080 dga_write((void *) TADR_DGA_CSR21, 0U); 00081 dga_write((void *) TADR_DGA_CSR23, ~0U); 00082 dga_write((void *) TADR_DGA_CSR19, (TVEC_G0I << 24) | (TVEC_G1I << 16) 00083 | (TVEC_SWI << 8) | TVEC_SPRI); 00084 00085 /* 00086 * アボート割込みの設定(NMI) 00087 * 00088 * アボート割込みをエッジトリガ,割込みレベルをNMIに設定し,マスク 00089 * を解除する. 00090 */ 00091 x_config_int(TINTNO_ABT, TA_EDGE, TIRQ_NMI); 00092 00093 /* 00094 * メモリ領域の設定 00095 * 00096 * ローカルメモリのVMEバス上での先頭アドレスとサイズ(16MB)し,ア 00097 * クセスを受け付けるように設定する.また,VMEバスから拡張アドレス 00098 * アクセスを受け付けるようにに設定する. 00099 */ 00100 dga_write((void *) TADR_DGA_CSR4, (uint32_t) board_addr | 0x00ffU); 00101 dga_write((void *) TADR_DGA_CSR5, 0x0000012fU); 00102 00103 /* 00104 * インタフェースレジスタ(IFR)の設定 00105 * 00106 * インタフェースレジスタのベースアドレスを設定する.また,インタ 00107 * フェースレジスタ0のサービスリクエストフラグをクリア.インタフェー 00108 * スレジスタ3にボードのID番号を設定. 00109 */ 00110 dga_write((void *) TADR_DGA_CSR3, (board_id << 4) | 0x3U); 00111 dga_write((void *) TADR_DGA_IFR0, 0x80000000U); 00112 dga_write((void *) TADR_DGA_IFR3, board_id); 00113 00114 /* 00115 * ラウンドロビンモードに設定(マルチプロセッサ対応) 00116 */ 00117 dga_write((void *) TADR_DGA_CSR1, 00118 (dga_read((void *) TADR_DGA_CSR1) & 0xffeffcffU) 00119 | (1U << 20) | ((board_id % 4) << 8)); 00120 }
target_config.c の 165 行で定義されています。
参照先 assert, dga_bit_and(), dga_bit_or(), DGA_INT_BITPAT, DGA_INT_TRG_CONF, DGA_INT_TRG_EDGE, dga_set_ilv(), TA_EDGE, TA_ENAINT, TADR_DGA_CSR18, TADR_DGA_CSR24, TIRQ_LEVEL1, TIRQ_NMI, VALID_INTNO_CFGINT, x_clear_int(), x_disable_int(), と x_enable_int().
00166 { 00167 uint32_t bitpat = DGA_INT_BITPAT(intno); 00168 00169 assert(VALID_INTNO_CFGINT(intno)); 00170 assert(TIRQ_NMI <= intpri && intpri <= TIRQ_LEVEL1); 00171 00172 /* 00173 * 割込みのマスク 00174 * 00175 * 割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割 00176 * 込み優先度の設定を行うのは危険なため,割込み属性にかかわらず, 00177 * 一旦マスクする. 00178 */ 00179 (void) x_disable_int(intno); 00180 00181 /* 00182 * レベルトリガ/エッジトリガの設定 00183 */ 00184 if ((bitpat & DGA_INT_TRG_CONF) != 0U) { 00185 /* 00186 * いずれにも設定できる場合 00187 */ 00188 if ((intatr & TA_EDGE) != 0U) { 00189 dga_bit_or((void *) TADR_DGA_CSR18, (1U << (24 - (intno)))); 00190 x_clear_int(intno); 00191 } 00192 else { 00193 dga_bit_and((void *) TADR_DGA_CSR18, ~(1U << (24 - (intno)))); 00194 } 00195 } 00196 else if ((bitpat & DGA_INT_TRG_EDGE) != 0U) { 00197 /* 00198 * エッジトリガに固定されている場合 00199 */ 00200 assert((intatr & TA_EDGE) != 0U); 00201 x_clear_int(intno); 00202 } 00203 else { 00204 /* 00205 * レベルトリガに固定されている場合 00206 */ 00207 assert((intatr & TA_EDGE) == 0U); 00208 } 00209 00210 /* 00211 * 割込み優先度の設定 00212 */ 00213 dga_set_ilv((void *)(TADR_DGA_CSR24 + (intno - 1) / 8 * 4), 00214 (uint_t)(((32 - intno) % 8) * 4), (uint_t)(7 + intpri)); 00215 00216 /* 00217 * 割込みのマスク解除(必要な場合) 00218 */ 00219 if ((intatr & TA_ENAINT) != 0U) { 00220 (void) x_enable_int(intno); 00221 } 00222 }
void* board_addr |
target_config.c の 54 行で定義されています。
target_config.c の 53 行で定義されています。
Copyright © 2008 by Kijineko Inc.