source: azure_iot_hub/trunk/asp3_dcre/include/sil.h@ 389

Last change on this file since 389 was 389, checked in by coas-nagasima, 5 years ago

ビルドが通るよう更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 7.7 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$
40 */
41
42/*
43 * システムインタフェースレイヤ
44 *
45 * システムインタフェースレイヤのサービスコールの定義・宣言とマクロな
46 * どの定義を含むヘッダファイル.
47 *
48 * アセンブリ言語のソースファイルからこのファイルをインクルードする時
49 * は,TOPPERS_MACRO_ONLYを定義しておくことで,マクロ定義以外の記述を
50 * 除くことができる.
51 */
52
53#ifndef TOPPERS_SIL_H
54#define TOPPERS_SIL_H
55
56#ifdef __cplusplus
57extern "C" {
58#endif
59
60/*
61 * TOPPERS共通のデータ型・定数・マクロ
62 */
63#include <t_stddef.h>
64
65/*
66 * ターゲット依存部
67 */
68#include "target_sil.h"
69
70#ifndef TOPPERS_MACRO_ONLY
71
72/*
73 * 全割込みロック状態の制御
74 *
75 * SIL_PRE_LOC,SIL_LOC_INT(),SIL_UNL_INT()は,ターゲット依存部で用
76 * 意する.デフォルトの定義は用意していない.
77 */
78
79/*
80 * 微少時間待ち
81 */
82extern void sil_dly_nse(ulong_t dlytim) throw();
83
84/*
85 * エンディアンの反転
86 */
87#ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
88#define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \
89 ((((data) & 0xffU) << 8) | (((data) >> 8) & 0xffU))
90#endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */
91
92#ifndef TOPPERS_SIL_REV_ENDIAN_UINT32
93#define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \
94 ((((data) & 0xffU) << 24) | (((data) & 0xff00U) << 8) \
95 | (((data) >> 8) & 0xff00U) | (((data) >> 24) & 0xffU))
96#endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */
97
98/*
99 * メモリ空間アクセス関数
100 */
101#ifndef TOPPERS_OMIT_SIL_ACCESS
102
103/*
104 * 8ビット単位の読出し/書込み
105 */
106#ifdef UINT8_MAX
107
108Inline uint8_t
109sil_reb_mem(const uint8_t *mem)
110{
111 uint8_t data;
112
113 data = *((const volatile uint8_t *) mem);
114 return(data);
115}
116
117Inline void
118sil_wrb_mem(uint8_t *mem, uint8_t data)
119{
120 *((volatile uint8_t *) mem) = data;
121}
122
123#endif /* UINT8_MAX */
124
125/*
126 * 16ビット単位の読出し/書込み
127 */
128
129Inline uint16_t
130sil_reh_mem(const uint16_t *mem)
131{
132 uint16_t data;
133
134 data = *((const volatile uint16_t *) mem);
135 return(data);
136}
137
138Inline void
139sil_wrh_mem(uint16_t *mem, uint16_t data)
140{
141 *((volatile uint16_t *) mem) = data;
142}
143
144#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
145
146#define sil_reh_bem(mem) sil_reh_mem(mem)
147#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
148
149#ifndef TOPPERS_OMIT_SIL_REH_LEM
150
151Inline uint16_t
152sil_reh_lem(const uint16_t *mem)
153{
154 uint16_t data;
155
156 data = *((const volatile uint16_t *) mem);
157 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
158}
159
160#endif /* TOPPERS_OMIT_SIL_REH_LEM */
161#ifndef TOPPERS_OMIT_SIL_WRH_LEM
162
163Inline void
164sil_wrh_lem(uint16_t *mem, uint16_t data)
165{
166 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
167}
168
169#endif /* TOPPERS_OMIT_SIL_WRH_LEM */
170#else /* SIL_ENDIAN_BIG */
171#ifdef SIL_ENDIAN_LITTLE /* リトルエンディアンプロセッサ */
172
173#define sil_reh_lem(mem) sil_reh_mem(mem)
174#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
175
176#ifndef TOPPERS_OMIT_SIL_REH_BEM
177
178Inline uint16_t
179sil_reh_bem(const uint16_t *mem)
180{
181 uint16_t data;
182
183 data = *((const volatile uint16_t *) mem);
184 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
185}
186
187#endif /* TOPPERS_OMIT_SIL_REH_BEM */
188#ifndef TOPPERS_OMIT_SIL_WRH_BEM
189
190Inline void
191sil_wrh_bem(uint16_t *mem, uint16_t data)
192{
193 *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
194}
195
196#endif /* TOPPERS_OMIT_SIL_WRH_BEM */
197#else /* SIL_ENDIAN_LITTLE */
198
199#error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
200
201#endif /* SIL_ENDIAN_LITTLE */
202#endif /* SIL_ENDIAN_BIG */
203
204/*
205 * 32ビット単位の読出し/書込み
206 */
207
208Inline uint32_t
209sil_rew_mem(const uint32_t *mem)
210{
211 uint32_t data;
212
213 data = *((const volatile uint32_t *) mem);
214 return(data);
215}
216
217Inline void
218sil_wrw_mem(uint32_t *mem, uint32_t data)
219{
220 *((volatile uint32_t *) mem) = data;
221}
222
223#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
224
225#define sil_rew_bem(mem) sil_rew_mem(mem)
226#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
227
228#ifndef TOPPERS_OMIT_SIL_REW_LEM
229
230Inline uint32_t
231sil_rew_lem(const uint32_t *mem)
232{
233 uint32_t data;
234
235 data = *((const volatile uint32_t *) mem);
236 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
237}
238
239#endif /* TOPPERS_OMIT_SIL_REW_LEM */
240#ifndef TOPPERS_OMIT_SIL_WRW_LEM
241
242Inline void
243sil_wrw_lem(uint32_t *mem, uint32_t data)
244{
245 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
246}
247
248#endif /* TOPPERS_OMIT_SIL_WRW_LEM */
249#else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
250
251#define sil_rew_lem(mem) sil_rew_mem(mem)
252#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
253
254#ifndef TOPPERS_OMIT_SIL_REW_BEM
255
256Inline uint32_t
257sil_rew_bem(const uint32_t *mem)
258{
259 uint32_t data;
260
261 data = *((const volatile uint32_t *) mem);
262 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
263}
264
265#endif /* TOPPERS_OMIT_SIL_REW_BEM */
266#ifndef TOPPERS_OMIT_SIL_WRW_BEM
267
268Inline void
269sil_wrw_bem(uint32_t *mem, uint32_t data)
270{
271 *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
272}
273
274#endif /* TOPPERS_OMIT_SIL_WRW_BEM */
275#endif /* SIL_ENDIAN_BIG */
276#endif /* TOPPERS_OMIT_SIL_ACCESS */
277
278#endif /* TOPPERS_MACRO_ONLY */
279
280#ifdef __cplusplus
281}
282#endif
283
284#endif /* TOPPERS_SIL_H */
Note: See TracBrowser for help on using the repository browser.