sil.h

説明を見る。
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.

ホームページ制作