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