source: UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/prc_sil.h@ 167

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