sil.h

説明を見る。
00001 /*
00002  *  TOPPERS/FDMP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Function Distributed Multiprocessor Kernel
00005  *
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  * 
00009  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00010  *  によって公表されている GNU General Public License の Version 2 に記
00011  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00012  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00013  *  利用と呼ぶ)することを無償で許諾する.
00014  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00015  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00016  *      スコード中に含まれていること.
00017  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00018  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00019  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00020  *      の無保証規定を掲載すること.
00021  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00022  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00023  *      と.
00024  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00025  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00026  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00027  *        報告すること.
00028  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00029  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00030  * 
00031  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00032  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00033  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00034  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00035  * 
00036  *  @(#) $Id: sil.h,v 1.1 2005/04/03 13:33:19 honda Exp $
00037  */
00038 
00056 #ifndef _SIL_H_
00057 #define _SIL_H_
00058 
00059 #ifdef __cplusplus
00060 extern "C" {
00061 #endif
00062 
00063 /*
00064  *  カーネル・アプリケーション 共通インクルードファイル
00065  */
00066 #include <t_stddef.h>
00067 
00068 /*
00069  *  ITRON仕様共通規定のデータ型・定数・マクロ
00070  */
00071 #include <itron.h>
00072 
00073 /*
00074  *  システムやプロセッサに依存する定義
00075  */
00076 #include <sys_defs.h>
00077 #include <cpu_defs.h>
00078 
00079 /*
00080  *  システムログサービスのための定義
00081  */
00082 #include <t_syslog.h>
00083 
00084 /*
00085  *  エンディアン定数の定義
00086  */
00087 #define SIL_ENDIAN_LITTLE   0   /* リトルエンディアン */
00088 #define SIL_ENDIAN_BIG      1   /* ビッグエンディアン */
00089 
00090 #ifndef _MACRO_ONLY
00091 
00092 /*
00093  *  割込みロック状態の制御
00094  */
00095 #ifndef SIL_PRE_LOC
00096 #define SIL_PRE_LOC BOOL _sil_loc_ = sns_loc()
00097 #define SIL_LOC_INT()   ((void)(!(_sil_loc_) \
00098                 && (sns_ctx() ? iloc_cpu() : loc_cpu())))
00099 #define SIL_UNL_INT()   ((void)(!(_sil_loc_) \
00100                 && (sns_ctx() ? iunl_cpu() : unl_cpu())))
00101 #endif /* SIL_PRE_LOC */
00102 
00103 /*
00104  *  微少時間待ち
00105  */
00106 extern void sil_dly_nse(UINT dlytim) throw();
00107 
00108 /*
00109  *  エンディアンの反転
00110  */
00111 #ifndef SIL_REV_ENDIAN_H
00112 #define SIL_REV_ENDIAN_H(data) \
00113     ((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff)))
00114 #endif /* SIL_REV_ENDIAN_H */
00115 
00116 #ifndef SIL_REV_ENDIAN_W
00117 #define SIL_REV_ENDIAN_W(data) \
00118     ((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \
00119         | (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff)))
00120 #endif /* SIL_REV_ENDIAN_H */
00121 
00122 /*
00123  *  メモリ空間アクセス関数
00124  */
00125 #ifndef OMIT_SIL_ACCESS
00126 
00127 /*
00128  *  8ビット単位の読出し/書込み
00129  */
00130 #ifdef _int8_
00131 
00132 Inline VB
00133 sil_reb_mem(VP mem)
00134 {
00135     return(*((volatile VB *) mem));
00136 }
00137 
00138 Inline void
00139 sil_wrb_mem(VP mem, VB data)
00140 {
00141     *((volatile VB *) mem) = data;
00142 }
00143 
00144 #endif /* _int8_ */
00145 
00146 /*
00147  *  16ビット単位の読出し/書込み
00148  */
00149 #ifdef _int16_
00150 
00151 Inline VH
00152 sil_reh_mem(VP mem)
00153 {
00154     return(*((volatile VH *) mem));
00155 }
00156 
00157 Inline void
00158 sil_wrh_mem(VP mem, VH data)
00159 {
00160     *((volatile VH *) mem) = data;
00161 }
00162 
00163 #if SIL_ENDIAN == SIL_ENDIAN_BIG    /* ビッグエンディアンプロセッサ */
00164 
00165 #define sil_reh_bem(mem)    sil_reh_mem(mem)
00166 #define sil_wrh_bem(mem, data)  sil_wrh_mem(mem, data)
00167 
00168 #ifndef OMIT_SIL_REH_LEM
00169 
00170 Inline VH
00171 sil_reh_lem(VP mem)
00172 {
00173     VH  data;
00174 
00175     data = *((volatile VH *) mem);
00176     return(SIL_REV_ENDIAN_H(data));
00177 }
00178 
00179 #endif /* OMIT_SIL_REH_LEM */
00180 #ifndef OMIT_SIL_WRH_LEM
00181 
00182 Inline void
00183 sil_wrh_lem(VP mem, VH data)
00184 {
00185     *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
00186 }
00187 
00188 #endif /* OMIT_SIL_WRH_LEM */
00189 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* リトルエンディアンプロセッサ */
00190 
00191 #define sil_reh_lem(mem)    sil_reh_mem(mem)
00192 #define sil_wrh_lem(mem, data)  sil_wrh_mem(mem, data)
00193 
00194 #ifndef OMIT_SIL_REH_BEM
00195 
00196 Inline VH
00197 sil_reh_bem(VP mem)
00198 {
00199     VH  data;
00200 
00201     data = *((volatile VH *) mem);
00202     return(SIL_REV_ENDIAN_H(data));
00203 }
00204 
00205 #endif /* OMIT_SIL_REH_BEM */
00206 #ifndef OMIT_SIL_WRH_BEM
00207 
00208 Inline void
00209 sil_wrh_bem(VP mem, VH data)
00210 {
00211     *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
00212 }
00213 
00214 #endif /* OMIT_SIL_WRH_BEM */
00215 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
00216 #endif /* _int16_ */
00217 
00218 /*
00219  *  32ビット単位の読出し/書込み
00220  */
00221 
00222 Inline VW
00223 sil_rew_mem(VP mem)
00224 {
00225     return(*((volatile VW *) mem));
00226 }
00227 
00228 Inline void
00229 sil_wrw_mem(VP mem, VW data)
00230 {
00231     *((volatile VW *) mem) = data;
00232 }
00233 
00234 #if SIL_ENDIAN == SIL_ENDIAN_BIG    /* ビッグエンディアンプロセッサ */
00235 
00236 #define sil_rew_bem(mem)    sil_rew_mem(mem)
00237 #define sil_wrw_bem(mem, data)  sil_wrw_mem(mem, data)
00238 
00239 #ifndef OMIT_SIL_REW_LEM
00240 
00241 Inline VW
00242 sil_rew_lem(VP mem)
00243 {
00244     VW  data;
00245 
00246     data = *((volatile VW *) mem);
00247     return(SIL_REV_ENDIAN_W(data));
00248 }
00249 
00250 #endif /* OMIT_SIL_REW_LEM */
00251 #ifndef OMIT_SIL_WRW_LEM
00252 
00253 Inline void
00254 sil_wrw_lem(VP mem, VW data)
00255 {
00256     *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
00257 }
00258 
00259 #endif /* OMIT_SIL_WRW_LEM */
00260 #else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* リトルエンディアンプロセッサ */
00261 
00262 #define sil_rew_lem(mem)    sil_rew_mem(mem)
00263 #define sil_wrw_lem(mem, data)  sil_wrw_mem(mem, data)
00264 
00265 #ifndef OMIT_SIL_REW_BEM
00266 
00267 Inline VW
00268 sil_rew_bem(VP mem)
00269 {
00270     VW  data;
00271 
00272     data = *((volatile VW *) mem);
00273     return(SIL_REV_ENDIAN_W(data));
00274 }
00275 
00276 #endif /* OMIT_SIL_REW_BEM */
00277 #ifndef OMIT_SIL_WRW_BEM
00278 
00279 Inline void
00280 sil_wrw_bem(VP mem, VW data)
00281 {
00282     *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
00283 }
00284 
00285 #endif /* OMIT_SIL_WRW_BEM */
00286 #endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
00287 #endif /* OMIT_SIL_ACCESS */
00288 
00289 #endif /* _MACRO_ONLY */
00290 
00291 #ifdef __cplusplus
00292 }
00293 #endif
00294 
00295 #endif /* _SIL_H_ */

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。