source: UsbWattMeter/trunk/asp_dcre/include/sil.h

Last change on this file 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-chdr; charset=SHIFT_JIS
File size: 6.8 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2004-2011 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * @(#) $Id: sil.h 167 2016-03-08 11:37:45Z coas-nagasima $
40 */
41
42/*
43 * システムインタフェースレイヤ
44 *
45 * システムインタフェースレイヤのサービスコールの定義・宣言とマクロな
46 * どの定義を含むヘッダファイル.
47 *
48 * アセンブリ言語のソースファイルからこのファイルをインクルードする時
49 * は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を
50 * 除くことができる.
51 *
52 * このファイルをインクルードする前にインクルードしておくべきファイル
53 * はない.
54 */
55
56#ifndef TOPPERS_SIL_H
57#define TOPPERS_SIL_H
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62
63/*
64 * TOPPERS共通のデータ型・定数・マクロ
65 */
66#include <t_stddef.h>
67
68/*
69 * ターゲット依存部
70 */
71#include "target_sil.h"
72
73#ifndef TOPPERS_MACRO_ONLY
74
75/*
76 * 全割込みロック状態の制御
77 *
78 * SIL_PRE_LOC,SIL_LOC_INT(),SIL_UNL_INT()は,ターゲット依存部で用
79 * 意する.デフォルトの定義は用意していない.
80 */
81
82/*
83 * 微少時間待ち
84 */
85extern void sil_dly_nse(ulong_t dlytim) throw();
86
87/*
88 * エンディアンの反転
89 */
90#ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
91#define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \
92 ((((data) & 0xffU) << 8) | (((data) >> 8) & 0xffU))
93#endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */
94
95#ifndef TOPPERS_SIL_REV_ENDIAN_UINT32
96#define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \
97 ((((data) & 0xffU) << 24) | (((data) & 0xff00U) << 8) \
98 | (((data) >> 8) & 0xff00U) | (((data) >> 24) & 0xffU))
99#endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */
100
101/*
102 * メモリ空間アクセス関数
103 */
104#ifndef TOPPERS_OMIT_SIL_ACCESS
105
106/*
107 * 8ビット単位の読出し/書込み
108 */
109#ifdef UINT8_MAX
110
111Inline uint8_t
112sil_reb_mem(const uint8_t *mem)
113{
114 uint8_t data;
115
116 data = *((const volatile uint8_t *) mem);
117 return(data);
118}
119
120Inline void
121sil_wrb_mem(uint8_t *mem, uint8_t data)
122{
123 *((volatile uint8_t *) mem) = data;
124}
125
126#endif /* UINT8_MAX */
127
128/*
129 * 16ビット単位の読出し/書込み
130 */
131
132Inline uint16_t
133sil_reh_mem(const uint16_t *mem)
134{
135 uint16_t data;
136
137 data = *((const volatile uint16_t *) mem);
138 return(data);
139}
140
141Inline void
142sil_wrh_mem(uint16_t *mem, uint16_t data)
143{
144 *((volatile uint16_t *) mem) = data;
145}
146
147#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
148
149#define sil_reh_bem(mem) sil_reh_mem(mem)
150#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
151
152#ifndef TOPPERS_OMIT_SIL_REH_LEM
153
154Inline uint16_t
155sil_reh_lem(const uint16_t *mem)
156{
157 uint16_t data;
158
159 data = *((const volatile uint16_t *) mem);
160 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
161}
162
163#endif /* TOPPERS_OMIT_SIL_REH_LEM */
164#ifndef TOPPERS_OMIT_SIL_WRH_LEM
165
166Inline void
167sil_wrh_lem(uint16_t *mem, uint16_t data)
168{
169 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
170}
171
172#endif /* TOPPERS_OMIT_SIL_WRH_LEM */
173#else /* SIL_ENDIAN_BIG */
174#ifdef SIL_ENDIAN_LITTLE /* リトルエンディアンプロセッサ */
175
176#define sil_reh_lem(mem) sil_reh_mem(mem)
177#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
178
179#ifndef TOPPERS_OMIT_SIL_REH_BEM
180
181Inline uint16_t
182sil_reh_bem(const uint16_t *mem)
183{
184 uint16_t data;
185
186 data = *((const volatile uint16_t *) mem);
187 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
188}
189
190#endif /* TOPPERS_OMIT_SIL_REH_BEM */
191#ifndef TOPPERS_OMIT_SIL_WRH_BEM
192
193Inline void
194sil_wrh_bem(uint16_t *mem, uint16_t data)
195{
196 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
197}
198
199#endif /* TOPPERS_OMIT_SIL_WRH_BEM */
200#else /* SIL_ENDIAN_LITTLE */
201
202#error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
203
204#endif /* SIL_ENDIAN_LITTLE */
205#endif /* SIL_ENDIAN_BIG */
206
207/*
208 * 32ビット単位の読出し/書込み
209 */
210
211Inline uint32_t
212sil_rew_mem(const uint32_t *mem)
213{
214 uint32_t data;
215
216 data = *((const volatile uint32_t *) mem);
217 return(data);
218}
219
220Inline void
221sil_wrw_mem(uint32_t *mem, uint32_t data)
222{
223 *((volatile uint32_t *) mem) = data;
224}
225
226#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
227
228#define sil_rew_bem(mem) sil_rew_mem(mem)
229#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
230
231#ifndef TOPPERS_OMIT_SIL_REW_LEM
232
233Inline uint32_t
234sil_rew_lem(const uint32_t *mem)
235{
236 uint32_t data;
237
238 data = *((const volatile uint32_t *) mem);
239 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
240}
241
242#endif /* TOPPERS_OMIT_SIL_REW_LEM */
243#ifndef TOPPERS_OMIT_SIL_WRW_LEM
244
245Inline void
246sil_wrw_lem(uint32_t *mem, uint32_t data)
247{
248 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
249}
250
251#endif /* TOPPERS_OMIT_SIL_WRW_LEM */
252#else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
253
254#define sil_rew_lem(mem) sil_rew_mem(mem)
255#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
256
257#ifndef TOPPERS_OMIT_SIL_REW_BEM
258
259Inline uint32_t
260sil_rew_bem(const uint32_t *mem)
261{
262 uint32_t data;
263
264 data = *((const volatile uint32_t *) mem);
265 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
266}
267
268#endif /* TOPPERS_OMIT_SIL_REW_BEM */
269#ifndef TOPPERS_OMIT_SIL_WRW_BEM
270
271Inline void
272sil_wrw_bem(uint32_t *mem, uint32_t data)
273{
274 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
275}
276
277#endif /* TOPPERS_OMIT_SIL_WRW_BEM */
278#endif /* SIL_ENDIAN_BIG */
279#endif /* TOPPERS_OMIT_SIL_ACCESS */
280
281#endif /* TOPPERS_MACRO_ONLY */
282
283#ifdef __cplusplus
284}
285#endif
286
287#endif /* TOPPERS_SIL_H */
Note: See TracBrowser for help on using the repository browser.