source: rubycfg_asp/trunk/asp_dcre/arch/rx630_gcc/prc_config.c@ 313

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

ソースを追加

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