source: uKadecot/trunk/ssp/include/sil.h@ 108

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

MIMEプロパティの変更

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