target_config.c

#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.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_fput_log ( char_t  c  ) 

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

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

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 }


変数

void* board_addr

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

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


Copyright © 2008 by Kijineko Inc.

ホームページ制作