3 * Toyohashi Open Platform for Embedded Real-Time Systems
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * @(#) $Id: sil.h 1844 2010-07-11 12:59:26Z ertl-hiro $
45 * システムインタフェースレイヤのサービスコールの定義・宣言とマクロな
48 * アセンブリ言語のソースファイルからこのファイルをインクルードする時
49 * は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を
52 * このファイルをインクルードする前にインクルードしておくべきファイル
64 * TOPPERS共通のデータ型・定数・マクロ
71 #include "target_sil.h"
73 #ifndef TOPPERS_MACRO_ONLY
78 * SIL_PRE_LOC,SIL_LOC_INT(),SIL_UNL_INT()は,ターゲット依存部で用
79 * 意する.デフォルトの定義は用意していない.
85 extern void sil_dly_nse(ulong_t dlytim) throw();
90 #ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
91 #define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \
92 ((((data) & 0xff) << 8) | (((data) >> 8) & 0xff))
93 #endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */
95 #ifndef TOPPERS_SIL_REV_ENDIAN_UINT32
96 #define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \
97 ((((data) & 0xff) << 24) | (((data) & 0xff00) << 8) \
98 | (((data) >> 8) & 0xff00) | (((data) >> 24) & 0xff))
99 #endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */
104 #ifndef TOPPERS_OMIT_SIL_ACCESS
112 sil_reb_mem(void *mem)
116 data = *((volatile uint8_t *) mem);
121 sil_wrb_mem(void *mem, uint8_t data)
123 *((volatile uint8_t *) mem) = data;
126 #endif /* UINT8_MAX */
133 sil_reh_mem(void *mem)
137 data = *((volatile uint16_t *) mem);
142 sil_wrh_mem(void *mem, uint16_t data)
144 *((volatile uint16_t *) mem) = data;
147 #ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
149 #define sil_reh_bem(mem) sil_reh_mem(mem)
150 #define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
152 #ifndef TOPPERS_OMIT_SIL_REH_LEM
155 sil_reh_lem(void *mem)
159 data = *((volatile uint16_t *) mem);
160 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
163 #endif /* TOPPERS_OMIT_SIL_REH_LEM */
164 #ifndef TOPPERS_OMIT_SIL_WRH_LEM
167 sil_wrh_lem(void *mem, uint16_t data)
169 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
172 #endif /* TOPPERS_OMIT_SIL_WRH_LEM */
173 #else /* SIL_ENDIAN_BIG */
174 #ifdef SIL_ENDIAN_LITTLE /* リトルエンディアンプロセッサ */
176 #define sil_reh_lem(mem) sil_reh_mem(mem)
177 #define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
179 #ifndef TOPPERS_OMIT_SIL_REH_BEM
182 sil_reh_bem(void *mem)
186 data = *((volatile uint16_t *) mem);
187 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
190 #endif /* TOPPERS_OMIT_SIL_REH_BEM */
191 #ifndef TOPPERS_OMIT_SIL_WRH_BEM
194 sil_wrh_bem(void *mem, uint16_t data)
196 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
199 #endif /* TOPPERS_OMIT_SIL_WRH_BEM */
200 #else /* SIL_ENDIAN_LITTLE */
202 #error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
204 #endif /* SIL_ENDIAN_LITTLE */
205 #endif /* SIL_ENDIAN_BIG */
212 sil_rew_mem(void *mem)
216 data = *((volatile uint32_t *) mem);
221 sil_wrw_mem(void *mem, uint32_t data)
223 *((volatile uint32_t *) mem) = data;
226 #ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
228 #define sil_rew_bem(mem) sil_rew_mem(mem)
229 #define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
231 #ifndef TOPPERS_OMIT_SIL_REW_LEM
234 sil_rew_lem(void *mem)
238 data = *((volatile uint32_t *) mem);
239 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
242 #endif /* TOPPERS_OMIT_SIL_REW_LEM */
243 #ifndef TOPPERS_OMIT_SIL_WRW_LEM
246 sil_wrw_lem(void *mem, uint32_t data)
248 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
251 #endif /* TOPPERS_OMIT_SIL_WRW_LEM */
252 #else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
254 #define sil_rew_lem(mem) sil_rew_mem(mem)
255 #define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
257 #ifndef TOPPERS_OMIT_SIL_REW_BEM
260 sil_rew_bem(void *mem)
264 data = *((volatile uint32_t *) mem);
265 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
268 #endif /* TOPPERS_OMIT_SIL_REW_BEM */
269 #ifndef TOPPERS_OMIT_SIL_WRW_BEM
272 sil_wrw_bem(void *mem, uint32_t data)
274 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
277 #endif /* TOPPERS_OMIT_SIL_WRW_BEM */
278 #endif /* SIL_ENDIAN_BIG */
279 #endif /* TOPPERS_OMIT_SIL_ACCESS */
281 #endif /* TOPPERS_MACRO_ONLY */
287 #endif /* TOPPERS_SIL_H */