X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=nxtOSEK%2Ftoppers_jsp%2Finclude%2Fsil.h;fp=nxtOSEK%2Ftoppers_jsp%2Finclude%2Fsil.h;h=af5bfd5f24f16ba5e1d4157ff77aa6f8a2dce296;hb=bd265b6ada077a9f7a6bbe88a6e59504d0bda643;hp=0000000000000000000000000000000000000000;hpb=166474068a1cbe3c023a172b66bdf2e91bd5d6a4;p=nxt-jsp%2Fetrobo-atk.git diff --git a/nxtOSEK/toppers_jsp/include/sil.h b/nxtOSEK/toppers_jsp/include/sil.h new file mode 100644 index 0000000..af5bfd5 --- /dev/null +++ b/nxtOSEK/toppers_jsp/include/sil.h @@ -0,0 +1,307 @@ +/* + * TOPPERS/JSP Kernel + * Toyohashi Open Platform for Embedded Real-Time Systems/ + * Just Standard Profile Kernel + * + * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory + * Toyohashi Univ. of Technology, JAPAN + * Copyright (C) 2005,2006 by Embedded and Real-Time Systems Laboratory + * Graduate School of Information Science, Nagoya Univ., JAPAN + * + * ¾åµ­Ãøºî¸¢¼Ô¤Ï¡¤°Ê²¼¤Î (1)¡Á(4) ¤Î¾ò·ï¤«¡¤Free Software Foundation + * ¤Ë¤è¤Ã¤Æ¸øɽ¤µ¤ì¤Æ¤¤¤ë GNU General Public License ¤Î Version 2 ¤Ëµ­ + * ½Ò¤µ¤ì¤Æ¤¤¤ë¾ò·ï¤òËþ¤¿¤¹¾ì¹ç¤Ë¸Â¤ê¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¡ÊËÜ¥½¥Õ¥È¥¦¥§¥¢ + * ¤ò²þÊѤ·¤¿¤â¤Î¤ò´Þ¤à¡¥°Ê²¼Æ±¤¸¡Ë¤ò»ÈÍÑ¡¦Ê£À½¡¦²þÊÑ¡¦ºÆÇÛÉۡʰʲ¼¡¤ + * ÍøÍѤȸƤ֡ˤ¹¤ë¤³¤È¤ò̵½þ¤ÇµöÂú¤¹¤ë¡¥ + * (1) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¥½¡¼¥¹¥³¡¼¥É¤Î·Á¤ÇÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¤¾åµ­¤ÎÃøºî + * ¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Ä꤬¡¤¤½¤Î¤Þ¤Þ¤Î·Á¤Ç¥½¡¼ + * ¥¹¥³¡¼¥ÉÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤³¤È¡¥ + * (2) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤¥é¥¤¥Ö¥é¥ê·Á¼°¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È + * ÍѤǤ­¤ë·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ + * ¼Ô¥Þ¥Ë¥å¥¢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃøºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­ + * ¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥ + * (3) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ò¡¤µ¡´ï¤ËÁȤ߹þ¤à¤Ê¤É¡¤Â¾¤Î¥½¥Õ¥È¥¦¥§¥¢³«È¯¤Ë»È + * ÍѤǤ­¤Ê¤¤·Á¤ÇºÆÇÛÉÛ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¤¼¡¤Î¤¤¤º¤ì¤«¤Î¾ò·ï¤òËþ¤¿¤¹¤³ + * ¤È¡¥ + * (a) ºÆÇÛÉÛ¤Ëȼ¤¦¥É¥­¥å¥á¥ó¥È¡ÊÍøÍѼԥޥ˥奢¥ë¤Ê¤É¡Ë¤Ë¡¤¾åµ­¤ÎÃø + * ºî¸¢É½¼¨¡¤¤³¤ÎÍøÍѾò·ï¤ª¤è¤Ó²¼µ­¤Î̵Êݾڵ¬Äê¤ò·ÇºÜ¤¹¤ë¤³¤È¡¥ + * (b) ºÆÇÛÉۤηÁÂÖ¤ò¡¤Ê̤ËÄê¤á¤ëÊýË¡¤Ë¤è¤Ã¤Æ¡¤TOPPERS¥×¥í¥¸¥§¥¯¥È¤Ë + * Êó¹ð¤¹¤ë¤³¤È¡¥ + * (4) ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤ë¤¤¤«¤Ê¤ë» + * ³²¤«¤é¤â¡¤¾åµ­Ãøºî¸¢¼Ô¤ª¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤òÌÈÀÕ¤¹¤ë¤³¤È¡¥ + * + * ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ï¡¤ÌµÊݾڤÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¢¤ë¡¥¾åµ­Ãøºî¸¢¼Ô¤ª + * ¤è¤ÓTOPPERS¥×¥í¥¸¥§¥¯¥È¤Ï¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤Ë´Ø¤·¤Æ¡¤¤½¤ÎŬÍѲÄǽÀ­¤â + * ´Þ¤á¤Æ¡¤¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤ï¤Ê¤¤¡¥¤Þ¤¿¡¤ËÜ¥½¥Õ¥È¥¦¥§¥¢¤ÎÍøÍѤˤè¤êľ + * ÀÜŪ¤Þ¤¿¤Ï´ÖÀÜŪ¤ËÀ¸¤¸¤¿¤¤¤«¤Ê¤ë»³²¤Ë´Ø¤·¤Æ¤â¡¤¤½¤ÎÀÕǤ¤òÉé¤ï¤Ê¤¤¡¥ + * + * @(#) $Id: sil.h,v 1.9 2006/02/12 05:27:25 hiro Exp $ + */ + +/* + * ¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥ì¥¤¥ä¡Ê¥¿¡¼¥²¥Ã¥È¶¦ÄÌÉô¡Ë + * + * ¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ä¥·¥¹¥Æ¥à¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥Õ¥¡ + * ¥¤¥ë¤«¤é¤³¤Î¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë»þ¤Ï¡¤_MACRO_ONLY ¤òÄêµÁ¤·¤Æ + * ¤ª¤¯¤³¤È¤Ç¡¤¥Þ¥¯¥íÄêµÁ°Ê³°¤Îµ­½Ò¤ò½ü¤¯¤³¤È¤¬¤Ç¤­¤ë¡¥ + * + * ¤³¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ï¡¤É¸½à¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¡Ês_services.h¡Ë + * ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤Þ¤¿¡¤¥«¡¼¥Í¥ë¤«¤é¸Æ¤Ð¤ì¤ë¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤Î + * ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ç¡¤¥¤¥ó¥é¥¤¥ó´Ø¿ô¤Ê¤É¤Ç¥·¥¹¥Æ¥à¥¤¥ó¥¿¥Õ¥§¡¼¥¹ + * ¥ì¥¤¥ä¤òÍѤ¤¤Æ¤¤¤ë¾ì¹ç¤Ë¤â¡¤¤³¤Î¥Õ¥¡¥¤¥ë¤¬¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡¥¤³¤Î + * Îã³°¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥Õ¥¡¥¤¥ë¤«¤éľÀÜ¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¤³¤È¤Ï¤Ê¤¤¡¥ + * + * ¤³¤ÎÃæ¤Ç¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ò½ü¤¤¤Æ¡¤Â¾¤Î¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡ + * ¥¤¥ë¤Ë°Í¸¤·¤Æ¤¤¤Ê¤¤¡¥ + */ + +#ifndef _SIL_H_ +#define _SIL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ¥«¡¼¥Í¥ë¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó ¶¦ÄÌ¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë + */ +#include + +/* + * ITRON»ÅÍͶ¦Ä̵¬Äê¤Î¥Ç¡¼¥¿·¿¡¦Äê¿ô¡¦¥Þ¥¯¥í + */ +#include + +/* + * ¥·¥¹¥Æ¥à¤ä¥×¥í¥»¥Ã¥µ¤Ë°Í¸¤¹¤ëÄêµÁ + */ +#include +#include + +/* + * ¥·¥¹¥Æ¥à¥í¥°¥µ¡¼¥Ó¥¹¤Î¤¿¤á¤ÎÄêµÁ + */ +#include + +/* + * ¥¨¥ó¥Ç¥£¥¢¥óÄê¿ô¤ÎÄêµÁ + */ +#define SIL_ENDIAN_LITTLE 0 /* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó */ +#define SIL_ENDIAN_BIG 1 /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó */ + +#ifndef _MACRO_ONLY + +/* + * ³ä¹þ¤ß¥í¥Ã¥¯¾õÂÖ¤ÎÀ©¸æ + */ +#ifndef SIL_PRE_LOC +#include +#define SIL_PRE_LOC BOOL _sil_loc_ = sns_loc() +#define SIL_LOC_INT() ((void)(!(_sil_loc_) \ + && (sns_ctx() ? iloc_cpu() : loc_cpu()))) +#define SIL_UNL_INT() ((void)(!(_sil_loc_) \ + && (sns_ctx() ? iunl_cpu() : unl_cpu()))) +#endif /* SIL_PRE_LOC */ + +/* + * Èù¾¯»þ´ÖÂÔ¤Á + */ +extern void sil_dly_nse(UINT dlytim) throw(); + +/* + * ¥¨¥ó¥Ç¥£¥¢¥ó¤Îȿž + */ +#ifndef SIL_REV_ENDIAN_H +#define SIL_REV_ENDIAN_H(data) \ + ((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff))) +#endif /* SIL_REV_ENDIAN_H */ + +#ifndef SIL_REV_ENDIAN_W +#define SIL_REV_ENDIAN_W(data) \ + ((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \ + | (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff))) +#endif /* SIL_REV_ENDIAN_H */ + +/* + * ¥á¥â¥ê¶õ´Ö¥¢¥¯¥»¥¹´Ø¿ô + */ +#ifndef OMIT_SIL_ACCESS + +/* + * 8¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß + */ +#ifdef _int8_ + +Inline VB +sil_reb_mem(VP mem) +{ + VB data; + + data = *((volatile VB *) mem); + return(data); +} + +Inline void +sil_wrb_mem(VP mem, VB data) +{ + *((volatile VB *) mem) = data; +} + +#endif /* _int8_ */ + +/* + * 16¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß + */ +#ifdef _int16_ + +Inline VH +sil_reh_mem(VP mem) +{ + VH data; + + data = *((volatile VH *) mem); + return(data); +} + +Inline void +sil_wrh_mem(VP mem, VH data) +{ + *((volatile VH *) mem) = data; +} + +#if SIL_ENDIAN == SIL_ENDIAN_BIG /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */ + +#define sil_reh_bem(mem) sil_reh_mem(mem) +#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data) + +#ifndef OMIT_SIL_REH_LEM + +Inline VH +sil_reh_lem(VP mem) +{ + VH data; + + data = *((volatile VH *) mem); + return(SIL_REV_ENDIAN_H(data)); +} + +#endif /* OMIT_SIL_REH_LEM */ +#ifndef OMIT_SIL_WRH_LEM + +Inline void +sil_wrh_lem(VP mem, VH data) +{ + *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data); +} + +#endif /* OMIT_SIL_WRH_LEM */ +#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */ + +#define sil_reh_lem(mem) sil_reh_mem(mem) +#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data) + +#ifndef OMIT_SIL_REH_BEM + +Inline VH +sil_reh_bem(VP mem) +{ + VH data; + + data = *((volatile VH *) mem); + return(SIL_REV_ENDIAN_H(data)); +} + +#endif /* OMIT_SIL_REH_BEM */ +#ifndef OMIT_SIL_WRH_BEM + +Inline void +sil_wrh_bem(VP mem, VH data) +{ + *((volatile VH *) mem) = SIL_REV_ENDIAN_H(data); +} + +#endif /* OMIT_SIL_WRH_BEM */ +#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */ +#endif /* _int16_ */ + +/* + * 32¥Ó¥Ã¥Èñ°Ì¤ÎÆɽФ·¡¿½ñ¹þ¤ß + */ + +Inline VW +sil_rew_mem(VP mem) +{ + VW data; + + data = *((volatile VW *) mem); + return(data); +} + +Inline void +sil_wrw_mem(VP mem, VW data) +{ + *((volatile VW *) mem) = data; +} + +#if SIL_ENDIAN == SIL_ENDIAN_BIG /* ¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */ + +#define sil_rew_bem(mem) sil_rew_mem(mem) +#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data) + +#ifndef OMIT_SIL_REW_LEM + +Inline VW +sil_rew_lem(VP mem) +{ + VW data; + + data = *((volatile VW *) mem); + return(SIL_REV_ENDIAN_W(data)); +} + +#endif /* OMIT_SIL_REW_LEM */ +#ifndef OMIT_SIL_WRW_LEM + +Inline void +sil_wrw_lem(VP mem, VW data) +{ + *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data); +} + +#endif /* OMIT_SIL_WRW_LEM */ +#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* ¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¥×¥í¥»¥Ã¥µ */ + +#define sil_rew_lem(mem) sil_rew_mem(mem) +#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data) + +#ifndef OMIT_SIL_REW_BEM + +Inline VW +sil_rew_bem(VP mem) +{ + VW data; + + data = *((volatile VW *) mem); + return(SIL_REV_ENDIAN_W(data)); +} + +#endif /* OMIT_SIL_REW_BEM */ +#ifndef OMIT_SIL_WRW_BEM + +Inline void +sil_wrw_bem(VP mem, VW data) +{ + *((volatile VW *) mem) = SIL_REV_ENDIAN_W(data); +} + +#endif /* OMIT_SIL_WRW_BEM */ +#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */ +#endif /* OMIT_SIL_ACCESS */ + +#endif /* _MACRO_ONLY */ + +#ifdef __cplusplus +} +#endif + +#endif /* _SIL_H_ */