source: rubycfg_asp/trunk/asp_dcre/arch/rx630_ccrx/prc_sil.h@ 315

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

SVNプロパティを設定

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