source: uKadecot/trunk/ssp/arch/rx630_ccrx/prc_config.c@ 108

Last change on this file since 108 was 108, checked in by coas-nagasima, 9 years ago

MIMEプロパティの変更

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr; charset=SHIFT_JIS
File size: 6.6 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2005,2006 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2008-2010 by Witz Corporation, JAPAN
10 *
11 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によって公表されている GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15 * 利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25 * と.
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29 * 報告すること.
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37 *
38 */
39
40/*
41 * プロセッサ依存モジュール(RX630用)
42 */
43
44#include "kernel_impl.h"
45#include "sil.h"
46
47
48/*
49 * 割込み発生回数を保存する変数
50 */
51uint16_t intnest;
52
53/*
54 * CPUロックフラグ実現のための変数
55 */
56#if TIPM_LOCK != -15
57bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */
58uint32_t saved_ipl; /* 割込み優先度レベルを保存する変数 */
59#endif /* TIPM_LOCK != -15 */
60
61
62/*
63 * プロセッサ依存の初期化
64 */
65void
66prc_initialize( void )
67{
68 /*
69 * 割込み発生回数の初期化
70 *
71 * スタートアップは全割込みロック状態 & 非タスクコンテキスト
72 * にて動作するため, 非タスクコンテキストに偽装する.
73 */
74 intnest = 1U;
75
76#if TIPM_LOCK != -15
77 /*
78 * CPUロックフラグ実現のための変数の初期化
79 */
80 lock_flag = true;
81 saved_ipl = IPL_ENAALL;
82#endif /* TIPM_LOCK != -15 */
83}
84
85
86/*
87 * プロセッサ依存の終了処理
88 */
89void
90prc_terminate( void )
91{
92 /*
93 * 特に必要な処理はない
94 */
95}
96
97
98/*
99 * CPU例外の発生状況のログ出力
100 *
101 * CPU例外ハンドラの中から,CPU例外情報ポインタ(p_excinf)を引数とし
102 * て呼び出すことで,CPU例外の発生状況をシステムログに出力する.
103 */
104#ifdef SUPPORT_XLOG_SYS
105void
106xlog_sys( void *p_excinf )
107{
108 syslog(LOG_ERROR , "r1 = %u") , *((uint32_t*)((intptr_t)p_excinf + 14));
109 syslog(LOG_ERROR , "r2 = %u") , *((uint32_t*)((intptr_t)p_excinf + 15));
110 syslog(LOG_ERROR , "r3 = %u") , *((uint32_t*)((intptr_t)p_excinf + 16));
111 syslog(LOG_ERROR , "r4 = %u") , *((uint32_t*)((intptr_t)p_excinf + 17));
112 syslog(LOG_ERROR , "r5 = %u") , *((uint32_t*)((intptr_t)p_excinf + 18));
113 syslog(LOG_ERROR , "r6 = %u") , *((uint32_t*)((intptr_t)p_excinf + 1));
114 syslog(LOG_ERROR , "r7 = %u") , *((uint32_t*)((intptr_t)p_excinf + 2));
115 syslog(LOG_ERROR , "r8 = %u") , *((uint32_t*)((intptr_t)p_excinf + 3));
116 syslog(LOG_ERROR , "r9 = %u") , *((uint32_t*)((intptr_t)p_excinf + 4));
117 syslog(LOG_ERROR , "r10 = %u") , *((uint32_t*)((intptr_t)p_excinf + 5));
118 syslog(LOG_ERROR , "r11 = %u") , *((uint32_t*)((intptr_t)p_excinf + 6));
119 syslog(LOG_ERROR , "r12 = %u") , *((uint32_t*)((intptr_t)p_excinf + 7));
120 syslog(LOG_ERROR , "r13 = %u") , *((uint32_t*)((intptr_t)p_excinf + 8));
121 syslog(LOG_ERROR , "r14 = %u") , *((uint32_t*)((intptr_t)p_excinf + 12));
122 syslog(LOG_ERROR , "r15 = %u") , *((uint32_t*)((intptr_t)p_excinf + 13));
123 syslog(LOG_ERROR , "fpsw = %u") , *((uint32_t*)((intptr_t)p_excinf + 11));
124 syslog(LOG_ERROR , "acclo = %u") , *((uint32_t*)((intptr_t)p_excinf + 10));
125 syslog(LOG_ERROR , "acchi = %u") , *((uint32_t*)((intptr_t)p_excinf + 9));
126 syslog(LOG_ERROR , "pc = %x") , *((uint32_t*)((intptr_t)p_excinf + 19));
127 syslog(LOG_ERROR , "psw = %x") , *((uint32_t*)((intptr_t)p_excinf + 20));
128}
129#endif /* SUPPORT_XLOG_SYS */
130
131
132/*
133 * 割込み要求ラインの属性の設定
134 *
135 * ASPカーネルでの利用を想定して,パラメータエラーはアサーションでチェッ
136 * クしている.cfg_intサービスコールを設ける場合には,エラーを返すよう
137 * にすべきであろう.
138 */
139void
140x_config_int( INTNO intno, ATR intatr, PRI intpri )
141{
142 uint8_t irq_offset;
143 uint8_t irq_val;
144
145 assert( VALID_INTNO_CFGINT(intno) );
146
147 assert( ( -15 <= intpri ) && ( intpri <= TMAX_INTPRI ) );
148#if TIPM_LOCK != -15
149 if( intatr == TA_NONKERNEL ){
150 assert( intpri < TMIN_INTPRI );
151 }
152 else{
153 assert( TMIN_INTPRI <= intpri );
154 }
155#endif
156
157 /*
158 * 割込みのマスク
159 *
160 * 割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
161 * 込み優先度の設定を行うのは危険なため,割込み属性にかかわらず,
162 * 一旦マスクする.
163 */
164 ( void )x_disable_int( intno );
165
166 /*
167 * レベルトリガ/エッジトリガの設定
168 *
169 * IRQのみサポートする
170 */
171 if( INTNO_IRQ( intno ) != 0U ){
172 irq_offset = INTNO_IRQ_OFFSET( intno );
173
174 if( ( intatr & TA_POSEDGE ) != 0U ){
175 irq_val = IRQ_POSEDGE;
176 }
177 else if( ( intatr & TA_NEGEDGE ) != 0U ){
178 irq_val = IRQ_NEGEDGE;
179 }
180 else if( ( intatr & TA_BOTHEDGE ) != 0U ){
181 irq_val = IRQ_BOTHEDGE;
182 }
183 else if( ( intatr & TA_LOWLEVEL ) != 0U ){
184 irq_val = IRQ_LOWLEVEL;
185 }
186 else{
187 /*
188 * コンフィギュレータにてチェックしているため,
189 * ここへくることはありえない.
190 */
191 irq_val = 0U;
192 }
193
194 sil_wrb_mem((uint8_t *)irqcr_reg_addr[irq_offset], irq_val);
195 }
196
197 /*
198 * 割込みレベルの設定
199 *
200 * 割込み番号に対応したIPR値を設定する.
201 */
202 sil_wrb_mem((uint8_t *)ipr_reg_addr[intno], cfg_int_table[intno].intpri);
203
204 /*
205 * 割込みのマスク解除
206 */
207 if( ( intatr & TA_ENAINT ) != 0U ){
208 ( void )x_enable_int( intno );
209 }
210}
211
212
213#ifndef OMIT_DEFAULT_INT_HANDLER
214/*
215 * 未登録の割込みが発生した場合に呼び出される
216 */
217void
218default_int_handler( void )
219{
220 syslog(LOG_EMERG, "Unregistered Interrupt occurs.");
221}
222#endif /* OMIT_DEFAULT_INT_HANDLER */
223
224#ifndef OMIT_DEFAULT_EXC_HANDLER
225/*
226 * 未登録の例外が発生した場合に呼び出される
227 */
228void
229default_exc_handler( void )
230{
231 syslog(LOG_EMERG, "Unregistered Expevt error occurs.");
232}
233#endif /* OMIT_DEFAULT_EXC_HANDLER */
234
Note: See TracBrowser for help on using the repository browser.