|
|
hw_timer.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: hw_timer.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00037 */ 00038 00039 #ifndef _HW_TIMER_H_ 00040 #define _HW_TIMER_H_ 00041 00042 /* 00043 * CPU依存タイマモジュール(Nios2用) 00044 */ 00045 #include <s_services.h> 00046 #include <nios2.h> 00047 00048 /* 00049 * タイマ割込みハンドラの割込み番号 00050 */ 00051 #define INHNO_TIMER TIM_INTLVL 00052 00053 #ifndef _MACRO_ONLY 00054 00055 /* 00056 * タイマ値の内部表現の型 00057 */ 00058 typedef UW CLOCK; 00059 00060 /* 00061 * タイマ値の内部表現とミリ秒・μ秒単位との変換 00062 * TIMER_CLOCK はターゲットボード毎に設定 00063 */ 00064 #define TO_CLOCK(nume, deno) (TIMER_CLOCK * (nume) / (deno)) 00065 #define TO_USEC(clock) ((clock) * 1000 / TIMER_CLOCK) 00066 00067 /* 00068 * 設定できる最大タイマ周期(単位は内部表現) 00069 */ 00070 #define MAX_CLOCK ((CLOCK) 0xffffffff) 00071 00072 /* 00073 * 性能評価用システム時刻を取り出す際の処理時間の見積り値(単位は内部表現) 00074 */ 00075 #define GET_TOLERANCE 100 00076 #define BEFORE_IREQ(clock) \ 00077 ((clock) >= TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE) 00078 00079 00080 /* 00081 * タイマの起動処理 00082 * 00083 * タイマを初期化し,周期的なタイマ割込みを発生させる 00084 */ 00085 Inline void 00086 hw_timer_initialize(void) 00087 { 00088 00089 CLOCK cyc = TO_CLOCK(TIC_NUME, TIC_DENO); 00090 00091 /* タイマーストップ */ 00092 sil_wrw_mem((VP)TIM_CONTROL,TIM_CONTROL_STOP); 00093 /* タイムアウトステータスクリア */ 00094 sil_wrw_mem((VP)TIM_STATUS, 0x00); 00095 00096 00097 assert(cyc <= MAX_CLOCK); /* タイマ上限値のチェック */ 00098 sil_wrw_mem((VP)TIM_PERIODL, (cyc & 0xffff)); /* カウンターセット 下位16bit */ 00099 sil_wrw_mem((VP)TIM_PERIODH, (cyc >> 16)); /* カウンターセット 上位16bit */ 00100 00101 /* 00102 * タイマースタート,オートリロード,割込み許可 00103 */ 00104 sil_wrw_mem((VP)TIM_CONTROL, TIM_CONTROL_START 00105 |TIM_CONTROL_COUNT|TIM_CONTROL_ITO); 00106 00107 /* 00108 * 割込みコントローラの許可 00109 */ 00110 ena_int(TIM_INTLVL); 00111 } 00112 00113 00114 /* 00115 * タイマ割込み要求のクリア 00116 */ 00117 Inline void 00118 hw_timer_int_clear() 00119 { 00120 /* TOビットのクリア */ 00121 sil_wrw_mem((VP)TIM_STATUS,0x00); 00122 } 00123 00124 00125 /* 00126 * タイマの禁止処理 00127 */ 00128 Inline void 00129 hw_timer_terminate() 00130 { 00131 /* タイマ停止 */ 00132 sil_wrw_mem((VP)TIM_CONTROL, TIM_CONTROL_STOP); 00133 00134 /* 割込み要求のクリア */ 00135 sil_wrw_mem((VP)TIM_STATUS, 0x00); 00136 } 00137 00138 00139 /* 00140 * タイマの現在値の読み出し 00141 * 00142 * 割込み禁止区間中で呼び出すこと 00143 */ 00144 Inline CLOCK 00145 hw_timer_get_current(void) 00146 { 00147 CLOCK count; 00148 00149 /* スナップレジスタに書き込むと値をホールドする */ 00150 sil_wrw_mem((VP)TIM_SNAPL, 0x00); 00151 00152 /* カウント値を読み込む */ 00153 count = sil_rew_mem((VP)TIM_SNAPL); 00154 count |= sil_rew_mem((VP)TIM_SNAPH) << 16; 00155 00156 return(TIMER_CLOCK - count); 00157 } 00158 00159 00160 /* 00161 * 割込みが発生しているかの判定 00162 */ 00163 Inline BOOL 00164 hw_timer_fetch_interrupt(void) 00165 { 00166 return(sil_rew_mem((VP)TIM_STATUS) & TIM_STATUS_TO); 00167 } 00168 00169 #endif /* _MACRO_ONLY */ 00170 #endif /* _HW_TIMER_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。 |