00001 /* 00002 * TOPPERS Software 00003 * Toyohashi Open Platform for Embedded Real-Time Systems 00004 * 00005 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00006 * Toyohashi Univ. of Technology, JAPAN 00007 * Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory 00008 * Graduate School of Information Science, Nagoya Univ., JAPAN 00009 * 00010 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00011 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00012 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00013 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00014 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00015 * スコード中に含まれていること. 00016 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00017 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00018 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00019 * の無保証規定を掲載すること. 00020 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00021 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00022 * と. 00023 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00024 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00025 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00026 * 報告すること. 00027 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00028 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00029 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00030 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00031 * 免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00035 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00036 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00037 * の責任を負わない. 00038 * 00039 * @(#) $Id: sil.h 883 2008-04-11 10:45:20Z hiro $ 00040 */ 00041 00042 /* 00043 * システムインタフェースレイヤ 00044 * 00045 * システムインタフェースレイヤのサービスコールの定義・宣言とマクロな 00046 * どの定義を含むヘッダファイル. 00047 * 00048 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 00049 * は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を 00050 * 除くことができる. 00051 * 00052 * このファイルをインクルードする前にインクルードしておくべきファイル 00053 * はない. 00054 */ 00055 00056 #ifndef TOPPERS_SIL_H 00057 #define TOPPERS_SIL_H 00058 00059 #ifdef __cplusplus 00060 extern "C" { 00061 #endif 00062 00063 /* 00064 * TOPPERS共通のデータ型・定数・マクロ 00065 */ 00066 #include <t_stddef.h> 00067 00068 /* 00069 * ターゲット依存部 00070 */ 00071 #include "target_sil.h" 00072 00073 #ifndef TOPPERS_MACRO_ONLY 00074 00075 /* 00076 * 全割込みロック状態の制御 00077 * 00078 * SIL_PRE_LOC,SIL_LOC_INT(),SIL_UNL_INT()は,ターゲット依存部で用 00079 * 意する.デフォルトの定義は用意していない. 00080 */ 00081 00082 /* 00083 * 微少時間待ち 00084 */ 00085 extern void sil_dly_nse(ulong_t dlytim) throw(); 00086 00087 /* 00088 * エンディアンの反転 00089 */ 00090 #ifndef TOPPERS_SIL_REV_ENDIAN_UINT16 00091 #define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \ 00092 ((((data) & 0xff) << 8) | (((data) >> 8) & 0xff)) 00093 #endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */ 00094 00095 #ifndef TOPPERS_SIL_REV_ENDIAN_UINT32 00096 #define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \ 00097 ((((data) & 0xff) << 24) | (((data) & 0xff00) << 8) \ 00098 | (((data) >> 8) & 0xff00) | (((data) >> 24) & 0xff)) 00099 #endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */ 00100 00101 /* 00102 * メモリ空間アクセス関数 00103 */ 00104 #ifndef TOPPERS_OMIT_SIL_ACCESS 00105 00106 /* 00107 * 8ビット単位の読出し/書込み 00108 */ 00109 #ifdef UINT8_MAX 00110 00111 Inline uint8_t 00112 sil_reb_mem(void *mem) 00113 { 00114 uint8_t data; 00115 00116 data = *((volatile uint8_t *) mem); 00117 return(data); 00118 } 00119 00120 Inline void 00121 sil_wrb_mem(void *mem, uint8_t data) 00122 { 00123 *((volatile uint8_t *) mem) = data; 00124 } 00125 00126 #endif /* UINT8_MAX */ 00127 00128 /* 00129 * 16ビット単位の読出し/書込み 00130 */ 00131 00132 Inline uint16_t 00133 sil_reh_mem(void *mem) 00134 { 00135 uint16_t data; 00136 00137 data = *((volatile uint16_t *) mem); 00138 return(data); 00139 } 00140 00141 Inline void 00142 sil_wrh_mem(void *mem, uint16_t data) 00143 { 00144 *((volatile uint16_t *) mem) = data; 00145 } 00146 00147 #ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */ 00148 00149 #define sil_reh_bem(mem) sil_reh_mem(mem) 00150 #define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data) 00151 00152 #ifndef TOPPERS_OMIT_SIL_REH_LEM 00153 00154 Inline uint16_t 00155 sil_reh_lem(void *mem) 00156 { 00157 uint16_t data; 00158 00159 data = *((volatile uint16_t *) mem); 00160 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data)); 00161 } 00162 00163 #endif /* TOPPERS_OMIT_SIL_REH_LEM */ 00164 #ifndef TOPPERS_OMIT_SIL_WRH_LEM 00165 00166 Inline void 00167 sil_wrh_lem(void *mem, uint16_t data) 00168 { 00169 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data); 00170 } 00171 00172 #endif /* TOPPERS_OMIT_SIL_WRH_LEM */ 00173 #else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */ 00174 00175 #define sil_reh_lem(mem) sil_reh_mem(mem) 00176 #define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data) 00177 00178 #ifndef TOPPERS_OMIT_SIL_REH_BEM 00179 00180 Inline uint16_t 00181 sil_reh_bem(void *mem) 00182 { 00183 uint16_t data; 00184 00185 data = *((volatile uint16_t *) mem); 00186 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data)); 00187 } 00188 00189 #endif /* TOPPERS_OMIT_SIL_REH_BEM */ 00190 #ifndef TOPPERS_OMIT_SIL_WRH_BEM 00191 00192 Inline void 00193 sil_wrh_bem(void *mem, uint16_t data) 00194 { 00195 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data); 00196 } 00197 00198 #endif /* TOPPERS_OMIT_SIL_WRH_BEM */ 00199 #endif /* SIL_ENDIAN_BIG */ 00200 00201 /* 00202 * 32ビット単位の読出し/書込み 00203 */ 00204 00205 Inline uint32_t 00206 sil_rew_mem(void *mem) 00207 { 00208 uint32_t data; 00209 00210 data = *((volatile uint32_t *) mem); 00211 return(data); 00212 } 00213 00214 Inline void 00215 sil_wrw_mem(void *mem, uint32_t data) 00216 { 00217 *((volatile uint32_t *) mem) = data; 00218 } 00219 00220 #ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */ 00221 00222 #define sil_rew_bem(mem) sil_rew_mem(mem) 00223 #define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data) 00224 00225 #ifndef TOPPERS_OMIT_SIL_REW_LEM 00226 00227 Inline uint32_t 00228 sil_rew_lem(void *mem) 00229 { 00230 uint32_t data; 00231 00232 data = *((volatile uint32_t *) mem); 00233 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data)); 00234 } 00235 00236 #endif /* TOPPERS_OMIT_SIL_REW_LEM */ 00237 #ifndef TOPPERS_OMIT_SIL_WRW_LEM 00238 00239 Inline void 00240 sil_wrw_lem(void *mem, uint32_t data) 00241 { 00242 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data); 00243 } 00244 00245 #endif /* TOPPERS_OMIT_SIL_WRW_LEM */ 00246 #else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */ 00247 00248 #define sil_rew_lem(mem) sil_rew_mem(mem) 00249 #define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data) 00250 00251 #ifndef TOPPERS_OMIT_SIL_REW_BEM 00252 00253 Inline uint32_t 00254 sil_rew_bem(void *mem) 00255 { 00256 uint32_t data; 00257 00258 data = *((volatile uint32_t *) mem); 00259 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data)); 00260 } 00261 00262 #endif /* TOPPERS_OMIT_SIL_REW_BEM */ 00263 #ifndef TOPPERS_OMIT_SIL_WRW_BEM 00264 00265 Inline void 00266 sil_wrw_bem(void *mem, uint32_t data) 00267 { 00268 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data); 00269 } 00270 00271 #endif /* TOPPERS_OMIT_SIL_WRW_BEM */ 00272 #endif /* SIL_ENDIAN_BIG */ 00273 #endif /* TOPPERS_OMIT_SIL_ACCESS */ 00274 00275 #endif /* TOPPERS_MACRO_ONLY */ 00276 00277 #ifdef __cplusplus 00278 } 00279 #endif 00280 00281 #endif /* TOPPERS_SIL_H */
Copyright © 2008 by Kijineko Inc.