source: rubycfg_asp/trunk/asp_dcre/arch/rx630_ccrx/prc_config.c@ 315

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

SVNプロパティを設定

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