source: uKadecot/trunk/ssp/arch/rx630_ccrx/prc_sil.h@ 154

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

SDカードの中身を/~/でアクセスできるよう変更

  • 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 */
37
38/*
39 * sil.hのプロセッサ依存部(RX630用)
40 */
41
42#ifndef TOPPERS_PRC_SIL_H
43#define TOPPERS_PRC_SIL_H
44
45#define TOPPERS_OMIT_SIL_ACCESS
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 );
102
103#endif /* TOPPERS_MACRO_ONLY */
104
105
106/*
107 * プロセッサのエンディアン
108 */
109#ifdef __LIT
110#define SIL_ENDIAN_LITTLE /* リトルエンディアン */
111#endif
112#ifdef __BIG
113#define SIL_ENDIAN_BIG /* ビッグエンディアン */
114#endif
115
116
117/*
118 * 8ビット単位の読出し/書込み
119 */
120#ifdef UINT8_MAX
121
122#pragma inline(sil_reb_mem)
123static uint8_t
124sil_reb_mem(const volatile uint8_t __evenaccess *mem)
125{
126 uint8_t data;
127
128 data = *mem;
129 return(data);
130}
131
132#pragma inline(sil_wrb_mem)
133static void
134sil_wrb_mem(volatile uint8_t __evenaccess *mem, uint8_t data)
135{
136 *mem = data;
137}
138
139#endif /* UINT8_MAX */
140
141/*
142 * 16ビット単位の読出し/書込み
143 */
144
145#pragma inline(sil_reh_mem)
146static uint16_t
147sil_reh_mem(const volatile uint16_t __evenaccess *mem)
148{
149 uint16_t data;
150
151 data = *mem;
152 return(data);
153}
154
155#pragma inline(sil_wrh_mem)
156static void
157sil_wrh_mem(volatile uint16_t __evenaccess *mem, uint16_t data)
158{
159 *mem = data;
160}
161
162#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
163
164#define sil_reh_bem(mem) sil_reh_mem(mem)
165#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
166
167#ifndef TOPPERS_OMIT_SIL_REH_LEM
168
169#pragma inline(sil_reh_lem)
170static uint16_t
171sil_reh_lem(const volatile uint16_t __evenaccess *mem)
172{
173 uint16_t data;
174
175 data = *mem;
176 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
177}
178
179#endif /* TOPPERS_OMIT_SIL_REH_LEM */
180#ifndef TOPPERS_OMIT_SIL_WRH_LEM
181
182#pragma inline(sil_wrh_lem)
183static void
184sil_wrh_lem(volatile uint16_t __evenaccess *mem, uint16_t data)
185{
186 *mem = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
187}
188
189#endif /* TOPPERS_OMIT_SIL_WRH_LEM */
190#else /* SIL_ENDIAN_BIG */
191#ifdef SIL_ENDIAN_LITTLE /* リトルエンディアンプロセッサ */
192
193#define sil_reh_lem(mem) sil_reh_mem(mem)
194#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
195
196#ifndef TOPPERS_OMIT_SIL_REH_BEM
197
198#pragma inline(sil_reh_bem)
199static uint16_t
200sil_reh_bem(const volatile uint16_t __evenaccess *mem)
201{
202 uint16_t data;
203
204 data = *mem;
205 return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
206}
207
208#endif /* TOPPERS_OMIT_SIL_REH_BEM */
209#ifndef TOPPERS_OMIT_SIL_WRH_BEM
210
211#pragma inline(sil_wrh_bem)
212static void
213sil_wrh_bem(volatile uint16_t __evenaccess *mem, uint16_t data)
214{
215 *mem = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
216}
217
218#endif /* TOPPERS_OMIT_SIL_WRH_BEM */
219#else /* SIL_ENDIAN_LITTLE */
220
221#error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
222
223#endif /* SIL_ENDIAN_LITTLE */
224#endif /* SIL_ENDIAN_BIG */
225
226/*
227 * 32ビット単位の読出し/書込み
228 */
229
230#pragma inline(sil_rew_mem)
231static uint32_t
232sil_rew_mem(const volatile uint32_t __evenaccess *mem)
233{
234 uint32_t data;
235
236 data = *mem;
237 return(data);
238}
239
240#pragma inline(sil_wrw_mem)
241static void
242sil_wrw_mem(volatile uint32_t __evenaccess *mem, uint32_t data)
243{
244 *mem = data;
245}
246
247#ifdef SIL_ENDIAN_BIG /* ビッグエンディアンプロセッサ */
248
249#define sil_rew_bem(mem) sil_rew_mem(mem)
250#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
251
252#ifndef TOPPERS_OMIT_SIL_REW_LEM
253
254#pragma inline(sil_rew_lem)
255static uint32_t
256sil_rew_lem(const volatile uint32_t __evenaccess *mem)
257{
258 uint32_t data;
259
260 data = *mem;
261 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
262}
263
264#endif /* TOPPERS_OMIT_SIL_REW_LEM */
265#ifndef TOPPERS_OMIT_SIL_WRW_LEM
266
267#pragma inline(sil_wrw_lem)
268static void
269sil_wrw_lem(volatile uint32_t __evenaccess *mem, uint32_t data)
270{
271 *mem = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
272}
273
274#endif /* TOPPERS_OMIT_SIL_WRW_LEM */
275#else /* SIL_ENDIAN_BIG */ /* リトルエンディアンプロセッサ */
276
277#define sil_rew_lem(mem) sil_rew_mem(mem)
278#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
279
280#ifndef TOPPERS_OMIT_SIL_REW_BEM
281
282#pragma inline(sil_rew_bem)
283static uint32_t
284sil_rew_bem(const volatile uint32_t __evenaccess *mem)
285{
286 uint32_t data;
287
288 data = *mem;
289 return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
290}
291
292#endif /* TOPPERS_OMIT_SIL_REW_BEM */
293#ifndef TOPPERS_OMIT_SIL_WRW_BEM
294
295#pragma inline(sil_wrw_bem)
296static void
297sil_wrw_bem(volatile uint32_t __evenaccess *mem, uint32_t data)
298{
299 *mem = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
300}
301
302#endif /* TOPPERS_OMIT_SIL_WRW_BEM */
303#endif /* SIL_ENDIAN_BIG */
304
305#endif /* TOPPERS_PRC_SIL_H */
Note: See TracBrowser for help on using the repository browser.