target_config.h

#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.h78 行で定義されています。

#define DEFAULT_ISTKSZ   0x2000U

target_config.h77 行で定義されています。

#define DGA_INT_BITPAT ( intno   )     (1U << (32U - (intno)))

target_config.h104 行で定義されています。

参照元 i_begin_int(), x_clear_int(), x_config_int(), x_disable_int(), x_enable_int(), と x_probe_int().

#define DGA_INT_TRG_CONF   (0xe0000000U)

target_config.h109 行で定義されています。

参照元 i_begin_int(), と x_config_int().

#define DGA_INT_TRG_EDGE   (0x0e70ff00U)

target_config.h111 行で定義されています。

参照元 i_begin_int(), と x_config_int().

#define DGA_INT_TRG_LEVEL   (0x108f00feU)

target_config.h110 行で定義されています。

#define i_clear_int ( intno   )     x_clear_int(intno)

target_config.h170 行で定義されています。

参照元 i_begin_int().

#define i_disable_int ( intno   )     x_disable_int(intno)

target_config.h137 行で定義されています。

#define i_enable_int ( intno   )     x_enable_int(intno)

target_config.h158 行で定義されています。

#define i_probe_int ( intno   )     x_probe_int(intno)

target_config.h182 行で定義されています。

#define SIL_DLY_TIM1   420

target_config.h241 行で定義されています。

#define SIL_DLY_TIM2   90

target_config.h242 行で定義されています。

#define t_clear_int ( intno   )     x_clear_int(intno)

target_config.h169 行で定義されています。

#define t_disable_int ( intno   )     x_disable_int(intno)

target_config.h136 行で定義されています。

#define t_enable_int ( intno   )     x_enable_int(intno)

target_config.h157 行で定義されています。

#define t_probe_int ( intno   )     x_probe_int(intno)

target_config.h181 行で定義されています。

#define VALID_INTNO ( intno   )     (1U <= (intno) && (intno) <= 31U && (intno) != 8U)

target_config.h93 行で定義されています。

#define VALID_INTNO_CFGINT ( intno   )     VALID_INTNO(intno)

target_config.h95 行で定義されています。

参照元 x_config_int().

#define VALID_INTNO_DISINT ( intno   )     VALID_INTNO(intno)

target_config.h94 行で定義されています。


関数

Inline void i_begin_int ( INTNO  intno  ) 

target_config.h202 行で定義されています。

参照先 DGA_INT_BITPAT, DGA_INT_TRG_CONF, DGA_INT_TRG_EDGE, と i_clear_int.

参照元 target_timer_handler().

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  ) 

target_config.h216 行で定義されています。

参照元 target_timer_handler().

00217 {
00218 }

void target_exit ( void   ) 

target_config.c126 行で定義されています。

参照先 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.c60 行で定義されています。

参照先 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.h164 行で定義されています。

参照先 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 }

void x_config_int ( INTNO  intno,
ATR  intatr,
PRI  intpri 
)

target_config.c165 行で定義されています。

参照先 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 }

Inline bool_t x_disable_int ( INTNO  intno  ) 

target_config.h125 行で定義されています。

参照先 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 }

Inline bool_t x_enable_int ( INTNO  intno  ) 

target_config.h146 行で定義されています。

参照先 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 }

Inline bool_t x_probe_int ( INTNO  intno  ) 

target_config.h176 行で定義されています。

参照先 DGA_INT_BITPAT, dga_read(), と TADR_DGA_CSR20.

参照元 target_timer_probe_int().

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.c54 行で定義されています。

target_config.c53 行で定義されています。


Copyright © 2008 by Kijineko Inc.

ホームページ制作