|
|
cpu_defs.h説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00007 * Graduate School of Information Science, Nagoya Univ., JAPAN 00008 * 00009 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00010 * によって公表されている GNU General Public License の Version 2 に記 00011 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00012 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00013 * 利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * 00031 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00032 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00033 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00034 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00035 * 00036 * @(#) $Id: cpu_defs.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00037 */ 00038 00039 /* 00040 * プロセッサに依存する定義(Nios2用) 00041 * 00042 * このインクルードファイルは,kernel.h と sil.h でインクルードされる. 00043 * 他のファイルから直接インクルードすることはない.このファイルをイン 00044 * クルードする前に,t_stddef.h と itron.h がインクルードされるので, 00045 * それらに依存してもよい. 00046 */ 00047 00048 #ifndef _CPU_DEFS_H_ 00049 #define _CPU_DEFS_H_ 00050 00051 #define OMIT_SIL_ACCESS 00052 00053 #ifndef NIOS2 00054 #define NIOS2 /* プロセッサ略称 */ 00055 #endif 00056 /* 00057 * プロセッサに依存する定義 00058 */ 00059 #ifndef _MACRO_ONLY 00060 00061 typedef UINT INHNO; /* 割込みハンドラ番号 */ 00062 typedef UINT IPM; /* 割込みマスク */ 00063 typedef UINT EXCNO; /* CPU例外ハンドラ番号 */ 00064 00065 00066 /* 00067 * INTNO型と割込みの禁止/許可 00068 */ 00069 00070 typedef UINT INTNO; /* 割込み番号 */ 00071 00072 extern ER dis_int(INTNO intno) throw(); 00073 extern ER ena_int(INTNO intno) throw(); 00074 00075 00076 /* 00077 * ターゲットシステム依存のサービスコール 00078 */ 00079 typedef UD SYSUTIM; /* 性能評価用システム時刻 */ 00080 extern ER vxget_tim(SYSUTIM *pk_sysutim) throw(); 00081 00082 00083 /* 00084 * 割込み許可ビット 00085 */ 00086 #define STATUS_PIE 0x01 00087 00088 /* 00089 * すべての割込みを禁止 00090 */ 00091 Inline void 00092 _disint_() 00093 { 00094 UW status; 00095 00096 Asm("rdctl %0, status" : "=r" (status)); 00097 status &= ~STATUS_PIE; 00098 Asm("wrctl status, %0" :: "r" (status)); 00099 } 00100 00101 00102 /* 00103 * 割込みを許可 00104 */ 00105 Inline void 00106 _enaint_() 00107 { 00108 UW status; 00109 00110 Asm("rdctl %0, status" : "=r" (status)); 00111 status |= STATUS_PIE; 00112 Asm("wrctl status, %0" :: "r" (status)); 00113 } 00114 00115 00116 /* 00117 * 割込みロック状態の制御 00118 */ 00119 #define SIL_PRE_LOC 00120 #define SIL_LOC_INT() _disint_() 00121 #define SIL_UNL_INT() _enaint_() 00122 00123 /* 00124 * システムの中断処理 00125 */ 00126 Inline void 00127 kernel_abort() 00128 { 00129 00130 } 00131 00132 00133 #endif /* _MACRO_ONLY */ 00134 00135 /* 00136 * プロセッサのエンディアン 00137 */ 00138 #define SIL_ENDIAN SIL_ENDIAN_LITTLE 00139 00140 #ifndef _MACRO_ONLY 00141 00142 /* 00143 * メモリアクセス関数 00144 */ 00145 00146 /* 00147 * 8ビット単位の読出し/書込み 00148 */ 00149 Inline VB 00150 sil_reb_mem(VP mem) 00151 { 00152 return(__builtin_ldbuio(mem)); 00153 } 00154 00155 Inline void 00156 sil_wrb_mem(VP mem, VB data) 00157 { 00158 __builtin_stbio(mem, data); 00159 } 00160 00161 00162 /* 00163 * 16ビット単位の読出し/書込み 00164 */ 00165 Inline VH 00166 sil_reh_mem(VP mem) 00167 { 00168 return(__builtin_ldhuio(mem)); 00169 } 00170 00171 Inline void 00172 sil_wrh_mem(VP mem, VH data) 00173 { 00174 __builtin_sthio(mem, data); 00175 } 00176 00177 00178 #define sil_reh_lem(mem) sil_reh_mem(mem) 00179 #define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data) 00180 00181 #ifndef SIL_REV_ENDIAN_H 00182 #define SIL_REV_ENDIAN_H(data) \ 00183 ((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff))) 00184 #endif /* SIL_REV_ENDIAN_H */ 00185 00186 #ifndef SIL_REV_ENDIAN_W 00187 #define SIL_REV_ENDIAN_W(data) \ 00188 ((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \ 00189 | (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff))) 00190 #endif /* SIL_REV_ENDIAN_W */ 00191 00192 Inline VH 00193 sil_reh_bem(VP mem) 00194 { 00195 VH data; 00196 00197 data = __builtin_ldhuio(mem); 00198 return(SIL_REV_ENDIAN_H(data)); 00199 } 00200 00201 Inline void 00202 sil_wrh_bem(VP mem, VH data) 00203 { 00204 __builtin_sthio(mem, SIL_REV_ENDIAN_H(data)); 00205 } 00206 00207 00208 /* 00209 * 32ビット単位の読出し/書込み 00210 */ 00211 Inline VW 00212 sil_rew_mem(VP mem) 00213 { 00214 return(__builtin_ldwio(mem)); 00215 } 00216 00217 Inline void 00218 sil_wrw_mem(VP mem, VW data) 00219 { 00220 __builtin_stwio(mem, data); 00221 } 00222 00223 00224 #define sil_rew_lem(mem) sil_rew_mem(mem) 00225 #define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data) 00226 00227 Inline VW 00228 sil_rew_bem(VP mem) 00229 { 00230 VW data; 00231 00232 data = __builtin_ldwio(mem); 00233 return(SIL_REV_ENDIAN_W(data)); 00234 } 00235 00236 Inline void 00237 sil_wrw_bem(VP mem, VW data) 00238 { 00239 __builtin_stwio(mem, SIL_REV_ENDIAN_W(data)); 00240 } 00241 00242 /* 00243 * 微少時間待ち 00244 */ 00245 Inline void 00246 sil_dly_nse(UINT dlytim) 00247 { 00248 00249 } 00250 00251 #endif /* _MACRO_ONLY */ 00252 00253 00254 #endif /* _CPU_DEFS_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。 |