#include "dve68k.h"
#include "m68k_gcc/prc_config.h"
マクロ定義 | |
#define | DEFAULT_ISTKSZ 0x2000U |
#define | DEFAULT_ISTK (void *)(0x00400000U - DEFAULT_ISTKSZ) |
#define | VALID_INTNO(intno) (1U <= (intno) && (intno) <= 31U && (intno) != 8U) |
#define | VALID_INTNO_DISINT(intno) VALID_INTNO(intno) |
#define | VALID_INTNO_CFGINT(intno) VALID_INTNO(intno) |
#define | DGA_INT_BITPAT(intno) (1U << (32U - (intno))) |
#define | DGA_INT_TRG_CONF (0xe0000000U) |
#define | DGA_INT_TRG_LEVEL (0x108f00feU) |
#define | DGA_INT_TRG_EDGE (0x0e70ff00U) |
#define | t_disable_int(intno) x_disable_int(intno) |
#define | i_disable_int(intno) x_disable_int(intno) |
#define | t_enable_int(intno) x_enable_int(intno) |
#define | i_enable_int(intno) x_enable_int(intno) |
#define | t_clear_int(intno) x_clear_int(intno) |
#define | i_clear_int(intno) x_clear_int(intno) |
#define | t_probe_int(intno) x_probe_int(intno) |
#define | i_probe_int(intno) x_probe_int(intno) |
#define | SIL_DLY_TIM1 420 |
#define | SIL_DLY_TIM2 90 |
関数 | |
Inline bool_t | x_disable_int (INTNO intno) |
Inline bool_t | x_enable_int (INTNO intno) |
Inline void | x_clear_int (INTNO intno) |
Inline bool_t | x_probe_int (INTNO intno) |
void | x_config_int (INTNO intno, ATR intatr, PRI intpri) |
Inline void | i_begin_int (INTNO intno) |
Inline void | i_end_int (INTNO intno) |
void | target_initialize (void) |
void | target_exit (void) NoReturn |
変数 | |
uint_t | board_id |
void * | board_addr |
const uint32_t | bitpat_cfgint |
#define DEFAULT_ISTK (void *)(0x00400000U - DEFAULT_ISTKSZ) |
target_config.h の 78 行で定義されています。
#define DEFAULT_ISTKSZ 0x2000U |
target_config.h の 77 行で定義されています。
#define DGA_INT_BITPAT | ( | intno | ) | (1U << (32U - (intno))) |
target_config.h の 104 行で定義されています。
参照元 i_begin_int(), x_clear_int(), x_config_int(), x_disable_int(), x_enable_int(), と x_probe_int().
#define DGA_INT_TRG_CONF (0xe0000000U) |
#define DGA_INT_TRG_EDGE (0x0e70ff00U) |
#define DGA_INT_TRG_LEVEL (0x108f00feU) |
target_config.h の 110 行で定義されています。
#define i_clear_int | ( | intno | ) | x_clear_int(intno) |
#define i_disable_int | ( | intno | ) | x_disable_int(intno) |
target_config.h の 137 行で定義されています。
#define i_enable_int | ( | intno | ) | x_enable_int(intno) |
target_config.h の 158 行で定義されています。
#define i_probe_int | ( | intno | ) | x_probe_int(intno) |
target_config.h の 182 行で定義されています。
#define SIL_DLY_TIM1 420 |
target_config.h の 241 行で定義されています。
#define SIL_DLY_TIM2 90 |
target_config.h の 242 行で定義されています。
#define t_clear_int | ( | intno | ) | x_clear_int(intno) |
target_config.h の 169 行で定義されています。
#define t_disable_int | ( | intno | ) | x_disable_int(intno) |
target_config.h の 136 行で定義されています。
#define t_enable_int | ( | intno | ) | x_enable_int(intno) |
target_config.h の 157 行で定義されています。
#define t_probe_int | ( | intno | ) | x_probe_int(intno) |
target_config.h の 181 行で定義されています。
#define VALID_INTNO | ( | intno | ) | (1U <= (intno) && (intno) <= 31U && (intno) != 8U) |
target_config.h の 93 行で定義されています。
#define VALID_INTNO_CFGINT | ( | intno | ) | VALID_INTNO(intno) |
#define VALID_INTNO_DISINT | ( | intno | ) | VALID_INTNO(intno) |
target_config.h の 94 行で定義されています。
Inline void i_begin_int | ( | INTNO | intno | ) |
target_config.h の 202 行で定義されています。
参照先 DGA_INT_BITPAT, DGA_INT_TRG_CONF, DGA_INT_TRG_EDGE, と i_clear_int.
00203 { 00204 if ((DGA_INT_BITPAT(intno) & (DGA_INT_TRG_CONF | DGA_INT_TRG_EDGE)) 00205 != 0U) { 00206 i_clear_int(intno); 00207 } 00208 }
Inline void i_end_int | ( | INTNO | intno | ) |
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_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 }
Inline void x_clear_int | ( | INTNO | intno | ) |
target_config.h の 164 行で定義されています。
参照先 DGA_INT_BITPAT, dga_write(), と TADR_DGA_CSR23.
参照元 target_timer_initialize(), と x_config_int().
00165 { 00166 dga_write((void *) TADR_DGA_CSR23, DGA_INT_BITPAT(intno)); 00167 }
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 }
target_config.h の 125 行で定義されています。
参照先 bitpat_cfgint, dga_bit_and(), DGA_INT_BITPAT, と TADR_DGA_CSR21.
参照元 x_config_int().
00126 { 00127 uint32_t bitpat = DGA_INT_BITPAT(intno); 00128 00129 if ((bitpat_cfgint & bitpat) == 0U) { 00130 return(false); 00131 } 00132 dga_bit_and((void *) TADR_DGA_CSR21, ~bitpat); 00133 return(true); 00134 }
target_config.h の 146 行で定義されています。
参照先 bitpat_cfgint, dga_bit_or(), DGA_INT_BITPAT, と TADR_DGA_CSR21.
参照元 x_config_int().
00147 { 00148 uint32_t bitpat = DGA_INT_BITPAT(intno); 00149 00150 if ((bitpat_cfgint & bitpat) == 0U) { 00151 return(false); 00152 } 00153 dga_bit_or((void *) TADR_DGA_CSR21, bitpat); 00154 return(true); 00155 }
target_config.h の 176 行で定義されています。
参照先 DGA_INT_BITPAT, dga_read(), と TADR_DGA_CSR20.
00177 { 00178 return((dga_read((void *) TADR_DGA_CSR20) & DGA_INT_BITPAT(intno)) != 0U); 00179 }
const uint32_t bitpat_cfgint |
void* board_addr |
target_config.c の 54 行で定義されています。
target_config.c の 53 行で定義されています。
Copyright © 2008 by Kijineko Inc.