source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/arch/rx630_gcc/prc_sil.h

Last change on this file was 337, checked in by coas-nagasima, 6 years ago

ASP3版ECNLを追加

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