source: include/sil.h

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 6.8 KB
Rev 
[7]1/*
2 *  TOPPERS Software
3 *      Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 *                              Toyohashi Univ. of Technology, JAPAN
7 *  Copyright (C) 2004-2011 by Embedded and Real-Time Systems Laboratory
8 *              Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
11 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
12 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
13 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
14 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
15 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
16 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
17 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
18 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
19 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
20 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
21 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
22 *      €È¡¥
23 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
24 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
25 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
26 *        Êó¹ð€¹€ë€³€È¡¥
27 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
28 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
29 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
30 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
31 *      ÌÈÀÕ€¹€ë€³€È¡¥
32 *
33 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
34 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
35 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
36 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
37 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
38 *
39 *  @(#) $Id$
40 */
41
42/*
43 *              ¥·¥¹¥Æ¥à¥€¥ó¥¿¥Õ¥§¡Œ¥¹¥ì¥€¥ä
44 *
45 *  ¥·¥¹¥Æ¥à¥€¥ó¥¿¥Õ¥§¡Œ¥¹¥ì¥€¥ä€Î¥µ¡Œ¥Ó¥¹¥³¡Œ¥ë€ÎÄêµÁ¡ŠÀëžÀ€È¥Þ¥¯¥í€Ê
46 *  €É€ÎÄêµÁ€òŽÞ€à¥Ø¥Ã¥À¥Õ¥¡¥€¥ë¡¥
47 *
48 *  ¥¢¥»¥ó¥Ö¥êžÀžì€Î¥œ¡Œ¥¹¥Õ¥¡¥€¥ë€«€é€³€Î¥Õ¥¡¥€¥ë€ò¥€¥ó¥¯¥ë¡Œ¥É€¹€ë»þ
49 *  €Ï¡€TOPPERS_MACRO_ONLY€òÄêµÁ€·€Æ€ª€¯€³€È€Ç¡€¥Þ¥¯¥íÄêµÁ°Ê³°€Îµ­œÒ€ò
50 *  œü€¯€³€È€¬€Ç€­€ë¡¥
51 *
52 *  €³€Î¥Õ¥¡¥€¥ë€ò¥€¥ó¥¯¥ë¡Œ¥É€¹€ëÁ°€Ë¥€¥ó¥¯¥ë¡Œ¥É€·€Æ€ª€¯€Ù€­¥Õ¥¡¥€¥ë
53 *  €Ï€Ê€€¡¥
54 */
55
56#ifndef TOPPERS_SIL_H
57#define TOPPERS_SIL_H
58
59#ifdef __cplusplus
60extern "C" {
61#endif
62
63/*
64 *      TOPPERS¶ŠÄ̀ΥǡŒ¥¿·¿¡ŠÄê¿ô¡Š¥Þ¥¯¥í
65 */
66#include <t_stddef.h>
67
68/*
69 *  ¥¿¡Œ¥²¥Ã¥È°ÍžÉô
70 */
71#include "target_sil.h"
72
73#ifndef TOPPERS_MACRO_ONLY
74
75/*
76 *  Á޳ä¹þ€ß¥í¥Ã¥¯ŸõÂÖ€ÎÀ©žæ
77 *
78 *  SIL_PRE_LOC¡€SIL_LOC_INT()¡€SIL_UNL_INT()€Ï¡€¥¿¡Œ¥²¥Ã¥È°ÍžÉô€ÇÍÑ
79 *  °Õ€¹€ë¡¥¥Ç¥Õ¥©¥ë¥È€ÎÄêµÁ€ÏÍѰՀ·€Æ€€€Ê€€¡¥
80 */
81
82/*
83 *  ÈùŸ¯»þŽÖÂÔ€Á
84 */
85extern void     sil_dly_nse(ulong_t dlytim) throw();
86
87/*
88 *  ¥š¥ó¥Ç¥£¥¢¥ó€Îȿş
89 */
90#ifndef TOPPERS_SIL_REV_ENDIAN_UINT16
91#define TOPPERS_SIL_REV_ENDIAN_UINT16(data) \
92                                ((((data) & 0xffU) << 8) | (((data) >> 8) & 0xffU))
93#endif /* TOPPERS_SIL_REV_ENDIAN_UINT16 */
94
95#ifndef TOPPERS_SIL_REV_ENDIAN_UINT32
96#define TOPPERS_SIL_REV_ENDIAN_UINT32(data) \
97                                ((((data) & 0xffU) << 24) | (((data) & 0xff00U) << 8) \
98                                        | (((data) >> 8) & 0xff00U) | (((data) >> 24) & 0xffU))
99#endif /* TOPPERS_SIL_REV_ENDIAN_UINT32 */
100
101/*
102 *  ¥á¥â¥ê¶õŽÖ¥¢¥¯¥»¥¹ŽØ¿ô
103 */
104#ifndef TOPPERS_OMIT_SIL_ACCESS
105
106/*
107 *  8¥Ó¥Ã¥Èñ°Ì€ÎÆÉœÐ€·¡¿œñ¹þ€ß
108 */
109#ifdef UINT8_MAX
110
111Inline uint8_t
112sil_reb_mem(const uint8_t *mem)
113{
114        uint8_t data;
115
116        data = *((const volatile uint8_t *) mem);
117        return(data);
118}
119
120Inline void
121sil_wrb_mem(uint8_t *mem, uint8_t data)
122{
123        *((volatile uint8_t *) mem) = data;
124}
125
126#endif /* UINT8_MAX */
127
128/*
129 *  16¥Ó¥Ã¥Èñ°Ì€ÎÆÉœÐ€·¡¿œñ¹þ€ß
130 */
131
132Inline uint16_t
133sil_reh_mem(const uint16_t *mem)
134{
135        uint16_t        data;
136
137        data = *((const volatile uint16_t *) mem);
138        return(data);
139}
140
141Inline void
142sil_wrh_mem(uint16_t *mem, uint16_t data)
143{
144        *((volatile uint16_t *) mem) = data;
145}
146
147#ifdef SIL_ENDIAN_BIG                   /* ¥Ó¥Ã¥°¥š¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
148
149#define sil_reh_bem(mem)                sil_reh_mem(mem)
150#define sil_wrh_bem(mem, data)  sil_wrh_mem(mem, data)
151
152#ifndef TOPPERS_OMIT_SIL_REH_LEM
153
154Inline uint16_t
155sil_reh_lem(const uint16_t *mem)
156{
157        uint16_t        data;
158
159        data = *((const volatile uint16_t *) mem);
160        return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
161}
162
163#endif /* TOPPERS_OMIT_SIL_REH_LEM */
164#ifndef TOPPERS_OMIT_SIL_WRH_LEM
165
166Inline void
167sil_wrh_lem(uint16_t *mem, uint16_t data)
168{
169        *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
170}
171
172#endif /* TOPPERS_OMIT_SIL_WRH_LEM */
173#else /* SIL_ENDIAN_BIG */
174#ifdef SIL_ENDIAN_LITTLE                /* ¥ê¥È¥ë¥š¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
175
176#define sil_reh_lem(mem)                sil_reh_mem(mem)
177#define sil_wrh_lem(mem, data)  sil_wrh_mem(mem, data)
178
179#ifndef TOPPERS_OMIT_SIL_REH_BEM
180
181Inline uint16_t
182sil_reh_bem(const uint16_t *mem)
183{
184        uint16_t        data;
185
186        data = *((const volatile uint16_t *) mem);
187        return(TOPPERS_SIL_REV_ENDIAN_UINT16(data));
188}
189
190#endif /* TOPPERS_OMIT_SIL_REH_BEM */
191#ifndef TOPPERS_OMIT_SIL_WRH_BEM
192
193Inline void
194sil_wrh_bem(uint16_t *mem, uint16_t data)
195{
196        *((volatile uint16_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT16(data);
197}
198
199#endif /* TOPPERS_OMIT_SIL_WRH_BEM */
200#else /* SIL_ENDIAN_LITTLE */
201
202#error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
203
204#endif /* SIL_ENDIAN_LITTLE */
205#endif /* SIL_ENDIAN_BIG */
206
207/*
208 *  32¥Ó¥Ã¥Èñ°Ì€ÎÆÉœÐ€·¡¿œñ¹þ€ß
209 */
210
211Inline uint32_t
212sil_rew_mem(const uint32_t *mem)
213{
214        uint32_t        data;
215
216        data = *((const volatile uint32_t *) mem);
217        return(data);
218}
219
220Inline void
221sil_wrw_mem(uint32_t *mem, uint32_t data)
222{
223        *((volatile uint32_t *) mem) = data;
224}
225
226#ifdef SIL_ENDIAN_BIG                   /* ¥Ó¥Ã¥°¥š¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
227
228#define sil_rew_bem(mem)                sil_rew_mem(mem)
229#define sil_wrw_bem(mem, data)  sil_wrw_mem(mem, data)
230
231#ifndef TOPPERS_OMIT_SIL_REW_LEM
232
233Inline uint32_t
234sil_rew_lem(const uint32_t *mem)
235{
236        uint32_t        data;
237
238        data = *((const volatile uint32_t *) mem);
239        return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
240}
241
242#endif /* TOPPERS_OMIT_SIL_REW_LEM */
243#ifndef TOPPERS_OMIT_SIL_WRW_LEM
244
245Inline void
246sil_wrw_lem(uint32_t *mem, uint32_t data)
247{
248        *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
249}
250
251#endif /* TOPPERS_OMIT_SIL_WRW_LEM */
252#else /* SIL_ENDIAN_BIG */              /* ¥ê¥È¥ë¥š¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */
253
254#define sil_rew_lem(mem)                sil_rew_mem(mem)
255#define sil_wrw_lem(mem, data)  sil_wrw_mem(mem, data)
256
257#ifndef TOPPERS_OMIT_SIL_REW_BEM
258
259Inline uint32_t
260sil_rew_bem(const uint32_t *mem)
261{
262        uint32_t        data;
263
264        data = *((const volatile uint32_t *) mem);
265        return(TOPPERS_SIL_REV_ENDIAN_UINT32(data));
266}
267
268#endif /* TOPPERS_OMIT_SIL_REW_BEM */
269#ifndef TOPPERS_OMIT_SIL_WRW_BEM
270
271Inline void
272sil_wrw_bem(uint32_t *mem, uint32_t data)
273{
274        *((volatile uint32_t *) mem) = TOPPERS_SIL_REV_ENDIAN_UINT32(data);
275}
276
277#endif /* TOPPERS_OMIT_SIL_WRW_BEM */
278#endif /* SIL_ENDIAN_BIG */
279#endif /* TOPPERS_OMIT_SIL_ACCESS */
280
281#endif /* TOPPERS_MACRO_ONLY */
282
283#ifdef __cplusplus
284}
285#endif
286
287#endif /* TOPPERS_SIL_H */
詳しい使い方は TracBrowser を参照してください。