source: UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/prc_config.c@ 167

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

MIMEにSJISを設定

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