3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 * @(#) $Id: target_config.c 885 2008-04-11 11:14:50Z hiro $
44 * ターゲット依存モジュール(DVE68K/40用)
47 #include "kernel_impl.h"
51 * プロセッサ識別のための変数(マルチプロセッサ対応)
53 uint_t board_id; /* ボードID */
54 void *board_addr; /* ローカルメモリの先頭アドレス */
60 target_initialize(void)
70 board_id = ((uint_t)(sil_rew_mem((void *) TADR_BOARD_REG0)) & 0x1fU);
71 board_addr = (void *)(board_id << 24);
76 * 割込み属性が設定されているかを判別するための変数を初期化する.
77 * また,すべての割込みをマスク・クリアし,割込みベクトルを設定す
80 dga_write((void *) TADR_DGA_CSR21, 0U);
81 dga_write((void *) TADR_DGA_CSR23, ~0U);
82 dga_write((void *) TADR_DGA_CSR19, (TVEC_G0I << 24) | (TVEC_G1I << 16)
83 | (TVEC_SWI << 8) | TVEC_SPRI);
88 * アボート割込みをエッジトリガ,割込みレベルをNMIに設定し,マスク
91 x_config_int(TINTNO_ABT, TA_EDGE, TIRQ_NMI);
96 * ローカルメモリのVMEバス上での先頭アドレスとサイズ(16MB)し,ア
97 * クセスを受け付けるように設定する.また,VMEバスから拡張アドレス
100 dga_write((void *) TADR_DGA_CSR4, (uint32_t) board_addr | 0x00ffU);
101 dga_write((void *) TADR_DGA_CSR5, 0x0000012fU);
104 * インタフェースレジスタ(IFR)の設定
106 * インタフェースレジスタのベースアドレスを設定する.また,インタ
107 * フェースレジスタ0のサービスリクエストフラグをクリア.インタフェー
108 * スレジスタ3にボードのID番号を設定.
110 dga_write((void *) TADR_DGA_CSR3, (board_id << 4) | 0x3U);
111 dga_write((void *) TADR_DGA_IFR0, 0x80000000U);
112 dga_write((void *) TADR_DGA_IFR3, board_id);
115 * ラウンドロビンモードに設定(マルチプロセッサ対応)
117 dga_write((void *) TADR_DGA_CSR1,
118 (dga_read((void *) TADR_DGA_CSR1) & 0xffeffcffU)
119 | (1U << 20) | ((board_id % 4) << 8));
136 dga_write((void *) TADR_DGA_CSR21, 0U);
137 dga_write((void *) TADR_DGA_CSR23, ~0U);
146 * システムログの低レベル出力のための文字出力
149 target_fput_log(char_t c)
160 * ASPカーネルでの利用を想定して,パラメータエラーはアサーションでチェッ
161 * クしている.cfg_intサービスコールを設ける場合には,エラーを返すよう
165 x_config_int(INTNO intno, ATR intatr, PRI intpri)
167 uint32_t bitpat = DGA_INT_BITPAT(intno);
169 assert(VALID_INTNO_CFGINT(intno));
170 assert(TIRQ_NMI <= intpri && intpri <= TIRQ_LEVEL1);
175 * 割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
176 * 込み優先度の設定を行うのは危険なため,割込み属性にかかわらず,
179 (void) x_disable_int(intno);
184 if ((bitpat & DGA_INT_TRG_CONF) != 0U) {
188 if ((intatr & TA_EDGE) != 0U) {
189 dga_bit_or((void *) TADR_DGA_CSR18, (1U << (24 - (intno))));
193 dga_bit_and((void *) TADR_DGA_CSR18, ~(1U << (24 - (intno))));
196 else if ((bitpat & DGA_INT_TRG_EDGE) != 0U) {
200 assert((intatr & TA_EDGE) != 0U);
207 assert((intatr & TA_EDGE) == 0U);
213 dga_set_ilv((void *)(TADR_DGA_CSR24 + (intno - 1) / 8 * 4),
214 (uint_t)(((32 - intno) % 8) * 4), (uint_t)(7 + intpri));
219 if ((intatr & TA_ENAINT) != 0U) {
220 (void) x_enable_int(intno);