00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 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 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: target_timer.h 889 2008-04-11 11:17:35Z hiro $ 00041 */ 00042 00043 /* 00044 * タイマドライバ(DVE68K/40用) 00045 */ 00046 00047 #ifndef TOPPERS_TARGET_TIMER_H 00048 #define TOPPERS_TARGET_TIMER_H 00049 00050 #include <sil.h> 00051 #include "dve68k.h" 00052 00053 /* 00054 * タイマ割込みハンドラ登録のための定数 00055 */ 00056 #define INHNO_TIMER TINHNO_TT0 /* 割込みハンドラ番号 */ 00057 #define INTNO_TIMER TINTNO_TT0 /* 割込み番号 */ 00058 #define INTPRI_TIMER TIRQ_LEVEL4 /* 割込み優先度 */ 00059 #define INTATR_TIMER TA_EDGE /* 割込み属性 */ 00060 00061 #ifndef TOPPERS_MACRO_ONLY 00062 00063 /* 00064 * タイマ値の内部表現の型 00065 */ 00066 typedef uint32_t CLOCK; 00067 00068 /* 00069 * タイマ値の内部表現とミリ秒・μ秒単位との変換 00070 * 00071 * DVE68K/40では,タイマは1μ秒毎にカウントアップする. 00072 */ 00073 #define TIMER_CLOCK 1000U 00074 #define TO_CLOCK(nume, deno) ((CLOCK)(TIMER_CLOCK * (nume) / (deno))) 00075 #define TO_USEC(clock) (((SYSUTM) clock) * 1000U / TIMER_CLOCK) 00076 00077 /* 00078 * 設定できる最大のタイマ周期(単位は内部表現) 00079 */ 00080 #define MAX_CLOCK ((CLOCK) 0xffffffU) 00081 00082 /* 00083 * タイマ停止までの時間(nsec単位) 00084 * 00085 * 値に根拠はない. 00086 */ 00087 #define TIMER_STOP_DELAY 200U 00088 00089 /* 00090 * レジスタの設定値 00091 */ 00092 #define CSR12_START 0x80000000U /* タイマ動作 */ 00093 #define CSR12_STOP 0x00000000U /* タイマ停止 */ 00094 00095 /* 00096 * タイマの起動処理 00097 * 00098 * タイマを初期化し,周期的なタイマ割込み要求を発生させる. 00099 */ 00100 extern void target_timer_initialize(intptr_t exinf); 00101 00102 /* 00103 * タイマの停止処理 00104 * 00105 * タイマの動作を停止させる. 00106 */ 00107 extern void target_timer_terminate(intptr_t exinf); 00108 00109 /* 00110 * タイマの現在値の読出し 00111 */ 00112 Inline CLOCK 00113 target_timer_get_current(void) 00114 { 00115 CLOCK clk; 00116 uint32_t saved_csr12; 00117 SIL_PRE_LOC; 00118 00119 /* 00120 * タイマの動作を一時的に停止し,タイマ値を読み出す.タイマの動作 00121 * を一時的に停止させると,システム時刻がずれるために望ましくない 00122 * が,DVE68K/40のハードウェア的な制約であり,やむをえない.ずれを 00123 * 最小に抑えるために,割込みロック状態とする. 00124 */ 00125 SIL_LOC_INT(); 00126 saved_csr12 = dga_read((void *) TADR_DGA_CSR12); 00127 dga_write((void *) TADR_DGA_CSR12, CSR12_STOP); 00128 sil_dly_nse(TIMER_STOP_DELAY); 00129 clk = dga_read((void *) TADR_DGA_CSR13) & 0x00ffffffU; 00130 dga_write((void *) TADR_DGA_CSR12, saved_csr12); 00131 SIL_UNL_INT(); 00132 return(clk); 00133 } 00134 00135 /* 00136 * タイマ割込み要求のチェック 00137 */ 00138 Inline bool_t 00139 target_timer_probe_int(void) 00140 { 00141 return(x_probe_int(INTNO_TIMER)); 00142 } 00143 00144 /* 00145 * タイマ割込みハンドラ 00146 */ 00147 extern void target_timer_handler(void); 00148 00149 #endif /* TOPPERS_MACRO_ONLY */ 00150 #endif /* TOPPERS_TARGET_TIMER_H */
Copyright © 2008 by Kijineko Inc.