source: azure_iot_hub_f767zi/trunk/asp_baseplatform/monitor/monsil.h@ 457

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

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 8.7 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2003-2004 by Ryosuke Takeuchi
9 * Platform Development Center RICOH COMPANY,LTD. JAPAN
10 *
11 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
12 * によって公表されている GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15 * 利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25 * と.
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29 * 報告すること.
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37 *
38 * @(#) $Id$
39 */
40
41/*
42 * システムインタフェースレイヤ(ターゲット共通部)
43 *
44 * アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
45 * イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
46 * おくことで,マクロ定義以外の記述を除くことができる.
47 *
48 * このインクルードファイルは,標準インクルードファイル(s_services.h)
49 * でインクルードされる.また,カーネルから呼ばれるデバイスドライバの
50 * インクルードファイルで,インライン関数などでシステムインタフェース
51 * レイヤを用いている場合にも,このファイルがインクルードされる.この
52 * 例外を除いて,他のファイルから直接インクルードされることはない.
53 *
54 * この中でインクルードしているファイルを除いて,他のインクルードファ
55 * イルに依存していない.
56 */
57
58#ifndef _MONSIL_H_
59#define _MONSIL_H_
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65/*
66 * カーネル・アプリケーション 共通インクルードファイル
67 */
68#include <t_stddef.h>
69
70/*
71 * ITRON仕様共通規定のデータ型・定数・マクロ
72 */
73#include <itron.h>
74
75/*
76 * システムやプロセッサに依存する定義
77 */
78#include <sys_defs.h>
79#include <cpu_defs.h>
80
81/*
82 * システムログサービスのための定義
83 */
84#include <t_syslog.h>
85
86/*
87 * ポートログ設定の定義
88 */
89#include <task_expansion.h>
90
91/*
92 * エンディアン定数の定義
93 */
94#define SIL_ENDIAN_LITTLE 0 /* リトルエンディアン */
95#define SIL_ENDIAN_BIG 1 /* ビッグエンディアン */
96
97#ifndef _MACRO_ONLY
98
99/*
100 * 割込みロック状態の制御
101 */
102#ifndef SIL_PRE_LOC
103#define SIL_PRE_LOC BOOL _sil_loc_ = sns_loc()
104#define SIL_LOC_INT() ((void)(!(_sil_loc_) \
105 && (sns_ctx() ? iloc_cpu() : loc_cpu())))
106#define SIL_UNL_INT() ((void)(!(_sil_loc_) \
107 && (sns_ctx() ? iunl_cpu() : unl_cpu())))
108#endif /* SIL_PRE_LOC */
109
110/*
111 * 微少時間待ち
112 */
113extern void sil_dly_nse(UINT dlytim) throw();
114
115/*
116 * エンディアンの反転
117 */
118#ifndef SIL_REV_ENDIAN_H
119#define SIL_REV_ENDIAN_H(data) \
120 ((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff)))
121#endif /* SIL_REV_ENDIAN_H */
122
123#ifndef SIL_REV_ENDIAN_W
124#define SIL_REV_ENDIAN_W(data) \
125 ((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \
126 | (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff)))
127#endif /* SIL_REV_ENDIAN_H */
128
129/*
130 * メモリ空間アクセス関数
131 */
132#ifndef OMIT_SIL_ACCESS
133
134/*
135 * 8ビット単位の読出し/書込み
136 */
137#ifdef _int8_
138
139Inline VB
140sil_reb_mem(VP mem)
141{
142 VB data;
143
144 MemoryRead((unsigned long)mem, (void *)&data, sizeof(VB));
145 ana_rdv((UW)mem, (UW)data, 1);
146 return(data);
147}
148
149Inline void
150sil_wrb_mem(VP mem, VB data)
151{
152 ana_wdv((UW)mem, (UW)data, 1);
153 MemoryWrite((unsigned long)mem, (void *)&data, sizeof(VB));
154}
155
156#endif /* _int8_ */
157
158/*
159 * 16ビット単位の読出し/書込み
160 */
161#ifdef _int16_
162
163Inline VH
164sil_reh_mem(VP mem)
165{
166 VH data;
167
168 MemoryRead((unsigned long)mem, (void *)&data, sizeof(VH));
169 ana_rdv((UW)mem, (UW)data, 2);
170 return(data);
171}
172
173Inline void
174sil_wrh_mem(VP mem, VH data)
175{
176 ana_wdv((UW)mem, (UW)data, 2);
177 MemoryWrite((unsigned long)mem, (void *)&data, sizeof(VH));
178}
179
180#if SIL_ENDIAN == SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
181
182#define sil_reh_bem(mem) sil_reh_mem(mem)
183#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
184
185#ifndef OMIT_SIL_REH_LEM
186
187Inline VH
188sil_reh_lem(VP mem)
189{
190 VH data;
191
192 data = *((volatile VH *) mem);
193 data = (SIL_REV_ENDIAN_H(data));
194 ana_rdv((UW)mem, (UW)data, 2);
195 return(data);
196}
197
198#endif /* OMIT_SIL_REH_LEM */
199#ifndef OMIT_SIL_WRH_LEM
200
201Inline void
202sil_wrh_lem(VP mem, VH data)
203{
204 ana_wdv((UW)mem, (UW)data, 2);
205 *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
206}
207
208#endif /* OMIT_SIL_WRH_LEM */
209#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* リトルエンディアンプロセッサ */
210
211#define sil_reh_lem(mem) sil_reh_mem(mem)
212#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
213
214#ifndef OMIT_SIL_REH_BEM
215
216Inline VH
217sil_reh_bem(VP mem)
218{
219 VH data;
220
221 data = *((volatile VH *) mem);
222 data = (SIL_REV_ENDIAN_H(data));
223 ana_rdv((UW)mem, (UW)data, 2);
224 return(data);
225}
226
227#endif /* OMIT_SIL_REH_BEM */
228#ifndef OMIT_SIL_WRH_BEM
229
230Inline void
231sil_wrh_bem(VP mem, VH data)
232{
233 ana_wdv((UW)mem, (UW)data, 2);
234 *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
235}
236
237#endif /* OMIT_SIL_WRH_BEM */
238#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
239#endif /* _int16_ */
240
241/*
242 * 32ビット単位の読出し/書込み
243 */
244
245Inline VW
246sil_rew_mem(VP mem)
247{
248 VW data;
249
250 MemoryRead((unsigned long)mem, (void *)&data, sizeof(VW));
251 ana_rdv((UW)mem, (UW)data, 4);
252 return(data);
253}
254
255Inline void
256sil_wrw_mem(VP mem, VW data)
257{
258 ana_wdv((UW)mem, (UW)data, 4);
259 MemoryWrite((unsigned long)mem, (void *)&data, sizeof(VW));
260}
261
262#if SIL_ENDIAN == SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
263
264#define sil_rew_bem(mem) sil_rew_mem(mem)
265#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
266
267#ifndef OMIT_SIL_REW_LEM
268
269Inline VW
270sil_rew_lem(VP mem)
271{
272 VW data;
273
274 data = *((volatile VW *) mem);
275 data = (SIL_REV_ENDIAN_W(data));
276 ana_rdv((UW)mem, (UW)data, 4);
277 return(data);
278}
279
280#endif /* OMIT_SIL_REW_LEM */
281#ifndef OMIT_SIL_WRW_LEM
282
283Inline void
284sil_wrw_lem(VP mem, VW data)
285{
286 ana_wdv((UW)mem, (UW)data, 4);
287 *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
288}
289
290#endif /* OMIT_SIL_WRW_LEM */
291#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* リトルエンディアンプロセッサ */
292
293#define sil_rew_lem(mem) sil_rew_mem(mem)
294#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
295
296#ifndef OMIT_SIL_REW_BEM
297
298Inline VW
299sil_rew_bem(VP mem)
300{
301 VW data;
302
303 data = *((volatile VW *) mem);
304 data = (SIL_REV_ENDIAN_W(data));
305 ana_rdv((UW)mem, (UW)data, 4);
306 return(data);
307}
308
309#endif /* OMIT_SIL_REW_BEM */
310#ifndef OMIT_SIL_WRW_BEM
311
312Inline void
313sil_wrw_bem(VP mem, VW data)
314{
315 ana_wdv((UW)mem, (UW)data, 4);
316 *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
317}
318
319#endif /* OMIT_SIL_WRW_BEM */
320#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
321#endif /* OMIT_SIL_ACCESS */
322
323#endif /* _MACRO_ONLY */
324
325#ifdef __cplusplus
326}
327#endif
328
329#endif /* _MONSIL_H_ */
Note: See TracBrowser for help on using the repository browser.