|
|
nios2.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: nios2.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00037 */ 00038 00039 #ifndef _NIOSII_H_ 00040 #define _NIOSII_H_ 00041 00042 #ifndef _MACRO_ONLY 00043 #include <itron.h> 00044 #endif /* _MACRO_ONLY */ 00045 00046 /* 00047 * 割込みビット 00048 */ 00049 #define STATUS_U 0x02 00050 #define STATUS_PIE 0x01 00051 00052 /* 00053 * 割込みの数 00054 */ 00055 #define MAX_INT_NUM 32 00056 00057 /* 00058 * 例外の個数 00059 */ 00060 #define MAX_EXC_NUM 32 00061 00062 00063 /* 00064 * Timer 00065 * Full-featuredをサポート 00066 */ 00067 /* 00068 * オフセット値 00069 */ 00070 #define TIM_STATUS_OFFSET 0x00 00071 #define TIM_CONTROL_OFFSET 0x04 00072 #define TIM_PERIODL_OFFSET 0x08 00073 #define TIM_PERIODH_OFFSET 0x0C 00074 #define TIM_SNAPL_OFFSET 0x10 00075 #define TIM_SNAPH_OFFSET 0x14 00076 00077 #define TIM_STATUS_RUN 0x02 00078 #define TIM_STATUS_TO 0x01 00079 00080 #define TIM_CONTROL_STOP 0x08 00081 #define TIM_CONTROL_START 0x04 00082 #define TIM_CONTROL_COUNT 0x02 00083 #define TIM_CONTROL_ITO 0x01 00084 00085 #define TIM_STATUS (TIM_BASE + TIM_STATUS_OFFSET) 00086 #define TIM_CONTROL (TIM_BASE + TIM_CONTROL_OFFSET) 00087 #define TIM_PERIODL (TIM_BASE + TIM_PERIODL_OFFSET) 00088 #define TIM_PERIODH (TIM_BASE + TIM_PERIODH_OFFSET) 00089 #define TIM_SNAPL (TIM_BASE + TIM_SNAPL_OFFSET) 00090 #define TIM_SNAPH (TIM_BASE + TIM_SNAPH_OFFSET) 00091 00092 00093 /* 00094 * UART 00095 */ 00096 #define UART_RXDATA_OFFSET 0x00 00097 #define UART_TXDATA_OFFSET 0x04 00098 #define UART_STATUS_OFFSET 0x08 00099 #define UART_CONTROL_OFFSET 0x0C 00100 #define UART_DIVISOR_OFFSET 0x10 00101 #define UART_ENDOFPACKET_OFFSET 0x1C 00102 00103 #define UART_STATUS_EOP 0x1000 00104 #define UART_STATUS_CTS 0x0800 00105 #define UART_STATUS_DCTS 0x0400 00106 #define UART_STATUS_E 0x0100 00107 #define UART_STATUS_RRDY 0x0080 00108 #define UART_STATUS_TRDY 0x0040 00109 #define UART_STATUS_TMT 0x0020 00110 #define UART_STATUS_TOE 0x0010 00111 #define UART_STATUS_ROE 0x0008 00112 #define UART_STATUS_BRK 0x0004 00113 #define UART_STATUS_FE 0x0002 00114 #define UART_STATUS_PE 0x0001 00115 00116 #define UART_CONTROL_IEOP 0x1000 00117 #define UART_CONTROL_RTS 0x0800 00118 #define UART_CONTROL_IDCTS 0x0400 00119 #define UART_CONTROL_TRDK 0x0200 00120 #define UART_CONTROL_IE 0x0100 00121 #define UART_CONTROL_IRRDY 0x0080 00122 #define UART_CONTROL_ITRD 0x0040 00123 #define UART_CONTROL_ITMT 0x0020 00124 #define UART_CONTROL_ITOE 0x0010 00125 #define UART_CONTROL_IROE 0x0008 00126 #define UART_CONTROL_IBRK 0x0004 00127 #define UART_CONTROL_IFE 0x0002 00128 #define UART_CONTROL_IPE 0x0001 00129 00130 #define UART_RXDATA (UART_BASE + UART_RXDATA_OFFSET) 00131 #define UART_TXDATA (UART_BASE + UART_TXDATA_OFFSET) 00132 #define UART_STATUS (UART_BASE + UART_STATUS_OFFSET) 00133 #define UART_CONTROL (UART_BASE + UART_CONTROL_OFFSET) 00134 #define UART_DIVISOR (UART_BASE + UART_DIVISOR_OFFSET) 00135 #define UART_ENDOFPACKET (UART_BASE + UART_ENDOFPACKET_OFFSET) 00136 00137 00138 /* 00139 * JTAG UART関連 00140 */ 00141 #define JTAG_UART_DATA_OFFSET 0x00 00142 #define JTAG_UART_CONTROL_OFFSET 0x04 00143 00144 #define JTAG_UART_DATA_RVALID 0x8000 00145 00146 #define JTAG_UART_CONTROL_RIE 0x01 00147 #define JTAG_UART_CONTROL_WIE 0x02 00148 #define JTAG_UART_CONTROL_RIP 0x04 00149 #define JTAG_UART_CONTROL_WIP 0x08 00150 #define JTAG_UART_CONTROL_WSAPCE 0x0ffff0000 00151 00152 #define JTAG_UART_DATA (UART_BASE + JTAG_UART_DATA_OFFSET) 00153 #define JTAG_UART_CONTROL (UART_BASE + JTAG_UART_CONTROL_OFFSET) 00154 00155 00156 /* 00157 * Mutex 00158 */ 00159 #define MUTEX_MUTEX_OFFSET 0x00 00160 #define MUTEX_RESET_OFFSET 0x04 00161 00162 #define MUTEX_MUTEX_OWNER_MASK 0xffff0000 00163 #define MUTEX_MUTEX_VALUE_MASK 0x0000ffff 00164 #define MUTEX_MUTEX_OWNER_OFFSET (16) 00165 00166 #define MUTEX_RESET_RESET_MASK 0x01 00167 #define MUTEX_VALUE_DATA 0x1234 00168 00169 #ifndef _MACRO_ONLY 00170 00171 /* 00172 * 内蔵UART用 簡易SIOドライバ 00173 */ 00174 00175 /* 00176 * シリアルI/Oポート初期化ブロック 00177 */ 00178 typedef struct sio_port_initialization_block { 00179 00180 } SIOPINIB; 00181 00182 /* 00183 * シリアルI/Oポート管理ブロック 00184 */ 00185 typedef struct sio_port_control_block { 00186 const SIOPINIB *siopinib; /* シリアルI/Oポート初期化ブロック */ 00187 VP_INT exinf; /* 拡張情報 */ 00188 BOOL openflag; /* オープン済みフラグ */ 00189 BOOL sendflag; /* 送信割込みイネーブルフラグ */ 00190 BOOL getready; /* 文字を受信した状態 */ 00191 BOOL putready; /* 文字を送信できる状態 */ 00192 } SIOPCB; 00193 00194 extern SIOPCB siopcb_table[]; 00195 00196 #define uart_openflag (siopcb_table[0].openflag) 00197 00198 Inline void 00199 uart_putc(unsigned char c){ 00200 #ifndef USE_JTAG_UART 00201 while(!(sil_rew_mem((VP)UART_STATUS) & UART_STATUS_TRDY)); 00202 sil_wrw_mem((VP)UART_TXDATA, c); 00203 #else 00204 while(!((sil_rew_mem((VP)JTAG_UART_CONTROL) & JTAG_UART_CONTROL_WSAPCE) > 0)); 00205 sil_wrw_mem((VP)JTAG_UART_DATA, c); 00206 #endif /* USE_JTAG_UART */ 00207 00208 } 00209 00210 Inline unsigned char 00211 uart_getc(void){ 00212 #ifndef USE_JTAG_UART 00213 while(!(sil_rew_mem((VP)UART_STATUS) & UART_STATUS_RRDY)); 00214 return (char)(sil_rew_mem((VP)UART_RXDATA)); 00215 #else 00216 int tmp; 00217 do{ 00218 tmp = sil_rew_mem((VP)JTAG_UART_DATA); 00219 }while((tmp &JTAG_UART_DATA_RVALID) == 0); 00220 00221 return (char)tmp; 00222 #endif /* USE_JTAG_UART */ 00223 } 00224 00225 /* 00226 * コールバックルーチンの識別番号 00227 * OPB_UARTLITE は,送受信割込みが分かれていないため,意味はない. 00228 */ 00229 #define SIO_ERDY_SND 1u /* 送信可能コールバック */ 00230 #define SIO_ERDY_RCV 2u /* 受信通知コールバック */ 00231 00232 /* 00233 * SIOドライバの初期化ルーチン 00234 */ 00235 extern void uart_initialize(void); 00236 00237 /* 00238 * シリアルI/Oポートのオープン 00239 */ 00240 extern SIOPCB *uart_opn_por(ID siopid, VP_INT exinf); 00241 00242 /* 00243 * シリアルI/Oポートのクローズ 00244 */ 00245 extern void uart_cls_por(SIOPCB *siopcb); 00246 00247 /* 00248 * シリアルI/Oポートへの文字送信 00249 */ 00250 extern BOOL uart_snd_chr(SIOPCB *siopcb, INT chr); 00251 00252 /* 00253 * シリアルI/Oポートからの文字受信 00254 */ 00255 extern INT uart_rcv_chr(SIOPCB *siopcb); 00256 00257 00258 /* 00259 * シリアルI/Oポートからのコールバックの許可 00260 */ 00261 extern void uart_ena_cbr(SIOPCB *siopcb, UINT cbrtn); 00262 00263 /* 00264 * シリアルI/Oポートからのコールバックの禁止 00265 */ 00266 extern void uart_dis_cbr(SIOPCB *siopcb, UINT cbrtn); 00267 00268 /* 00269 * SIOの割込みサービスルーチン 00270 */ 00271 extern void uart_isr(void); 00272 00273 /* 00274 * シリアルI/Oポートからの送信可能コールバック 00275 */ 00276 extern void uart_ierdy_snd(VP_INT exinf); 00277 00278 /* 00279 * シリアルI/Oポートからの受信通知コールバック 00280 */ 00281 extern void uart_ierdy_rcv(VP_INT exinf); 00282 00283 00284 /* 00285 * Mutex 00286 */ 00287 00288 /* 00289 * ミューテックスの取得 00290 * 取得できれば1を取得できなければ0を返す 00291 */ 00292 Inline int 00293 mutex_try_lock(unsigned int addr, unsigned int id){ 00294 unsigned int data; 00295 unsigned int check; 00296 00297 data = (id << MUTEX_MUTEX_OWNER_OFFSET) | MUTEX_VALUE_DATA; 00298 00299 sil_wrw_mem((VP)(addr + MUTEX_MUTEX_OFFSET), data); 00300 check = sil_rew_mem((VP)(addr + MUTEX_MUTEX_OFFSET)); 00301 00302 if ( data == check ){ 00303 return 1; 00304 } 00305 else { 00306 return 0; 00307 } 00308 } 00309 00310 /* 00311 * ミューテックスの開放 00312 */ 00313 Inline void 00314 mutex_unlock(unsigned int addr, unsigned int id){ 00315 sil_wrw_mem((VP)(addr + MUTEX_RESET_OFFSET), MUTEX_RESET_RESET_MASK); 00316 sil_wrw_mem((VP)(addr + MUTEX_MUTEX_OFFSET), (id << MUTEX_MUTEX_OWNER_OFFSET)); 00317 } 00318 00319 /* 00320 * ミューテクスの初期化 00321 */ 00322 Inline void 00323 mutex_init(unsigned int addr, unsigned int id){ 00324 unsigned int data; 00325 unsigned int check; 00326 00327 check = sil_rew_mem((VP)(addr + MUTEX_RESET_OFFSET)); 00328 00329 //リセットがされたかのチェック 00330 if ( check == MUTEX_RESET_RESET_MASK ){ 00331 sil_wrw_mem((VP)(addr + MUTEX_RESET_OFFSET), MUTEX_RESET_RESET_MASK); 00332 } 00333 else { 00334 data = sil_rew_mem((VP)(addr + MUTEX_MUTEX_OFFSET)); 00335 sil_wrw_mem((VP)(addr + MUTEX_MUTEX_OFFSET), (data & MUTEX_MUTEX_OWNER_MASK)); 00336 sil_wrw_mem((VP)(addr + MUTEX_MUTEX_OFFSET), (id << MUTEX_MUTEX_OWNER_OFFSET)); 00337 } 00338 } 00339 00340 #endif /* _MACRO_ONLY */ 00341 00342 #endif /* _NIOSII_H_ */ 00343 Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。 |