source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/m16c-renesas/m3029/hw_timer.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 6.9 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2003-2004 by Naoki Saito
9 * Nagoya Municipal Industrial Research Institute, JAPAN
10 * Copyright (C) 2003-2004 by Platform Development Center
11 * RICOH COMPANY,LTD. JAPAN
12 * Copyright (C) 2006 by Embedded and Real-Time Systems Laboratory
13 * Graduate School of Information Science, Nagoya Univ., JAPAN
14 *
15 * 上記著作権者
16は,Free Software Foundation によってå…
17¬è¡¨ã•ã‚Œã¦ã„ã‚‹
18 * GNU General Public License の Version 2 に記述されている条件か,以
19 * 下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ
20 * アを改変したものを含む.以下同じ)を使用・複製・改変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
22 * 利用と呼ぶ)することを無償で許諾する.
23 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 * スコード中に含まれていること.
26 * (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ
27 * ジェクトファイルやライブラリなど)の形で利用する場合には,利用
28 * に伴うドキュメント(利用者
29マニュアルなど)に,上記の著作権表示,
30 * この利用条件および下記の無保証規定を掲載すること.
31 * (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組
32 * み込んだ形で利用する場合には,次のいずれかの条件を満たすこと.
33 * (a) 利用に伴うドキュメント(利用者
34マニュアルなど)に,上記の著作
35 * 権表示,この利用条件および下記の無保証規定を掲載すること.
36 * (b) 利用の形æ…
37‹ã‚’,別に定める方法によって,上記著作権者
38に報告する
39 * こと.
40 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
41 * 害からも,上記著作権者
42をå…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46は,
47 * 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ
48 * ない.また,本ソフトウェアの利用により直接的または間接的に生じたい
49 * かなる損害に関しても,その責任を負わない.
50 *
51 * @(#) $Id: hw_timer.h,v 1.2 2006/08/03 04:14:02 honda Exp $
52 */
53
54/*
55 * タイマドライバ(M3029用)
56 */
57
58#ifndef _HW_TIMER_H_
59#define _HW_TIMER_H_
60
61#include <s_services.h>
62#include <sil.h>
63#include <m3029.h>
64
65
66/*
67 * タイマーの割り込みレベル
68 */
69#define INT_LEVEL_TIMER 0x05
70
71/*
72 * タイマ割込みハンドラのベクタ番号
73 */
74#ifdef USE_TA0
75#define INHNO_TIMER INT_TA0
76#elif defined(USE_TA1)
77#define INHNO_TIMER INT_TA1
78#endif
79
80
81/*
82 * タイマモードレジスタ
83 */
84#ifdef USE_TA0
85#define TADR_SFR_TAMR TADR_SFR_TA0MR
86#elif defined(USE_TA1)
87#define TADR_SFR_TAMR TADR_SFR_TA1MR
88#endif
89
90/*
91 * アップダウンフラグ
92 */
93#ifdef USE_TA0
94#define TBIT_UDF_TAUD TBIT_UDF_TA0UD
95#elif defined(USE_TA1)
96#define TBIT_UDF_TAUD TBIT_UDF_TA1UD
97#endif
98
99/*
100 * タイマレジスタ
101 */
102#ifdef USE_TA0
103#define TADR_SFR_TA TADR_SFR_TA0
104#elif defined(USE_TA1)
105#define TADR_SFR_TA TADR_SFR_TA1
106#endif
107
108/*
109 * カウント開始ビット
110 */
111#ifdef USE_TA0
112#define TBIT_TABSR_TS TBIT_TABSR_TA0S
113#elif defined(USE_TA1)
114#define TBIT_TABSR_TS TBIT_TABSR_TA1S
115#endif
116
117/*
118 * 割込み制御レジスタのオフセット
119 */
120#ifdef USE_TA0
121#define TADR_SFR_TAIC_OFFSET TADR_SFR_TA0IC_OFFSET
122#elif defined(USE_TA1)
123#define TADR_SFR_TAIC_OFFSET TADR_SFR_TA1IC_OFFSET
124#endif
125
126
127#ifndef _MACRO_ONLY
128
129
130/*
131 * タイマ値の内
132部表現の型
133 */
134typedef UH CLOCK;
135
136
137/*
138 * タイマ値の内
139部表現とミリ秒単位との変換
140 *
141 * 1msのタイマー割り込みを使用するのでそのクロックを定義する.
142 */
143#define TIMER_CLOCK 20000
144#define TO_CLOCK(nume, deno) (TIMER_CLOCK * (nume) / (deno))
145#define TO_USEC(clock) ((unsigned long)(clock) * 1000 / TIMER_CLOCK)
146
147
148/*
149 * 設定できる最大のタイマ周期(単位は内
150部表現)
151 */
152#define MAX_CLOCK ((CLOCK) 0xffff)
153
154
155/*
156 * 性能評価用システム時刻を取り出す際の処理時間の見積り値(単位は内
157部表現)
158 */
159#define GET_TOLERANCE 100 /* 処理遅
160れの見積り値(単位は内
161部表現)*/
162#define BEFORE_IREQ(clock) \
163 ((clock) >= TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE)
164
165
166/*
167 * タイマの起動処理
168 *
169 * タイマを初期化し,周期的なタイマ割込み要求を発生させる.
170 */
171Inline void
172hw_timer_initialize()
173{
174 /*
175 * タイマ初期化
176 */
177 /* タイマカウント停止 */
178 sil_wrb_mem((VP)TADR_SFR_TABSR,
179 sil_reb_mem((VP)TADR_SFR_TABSR) & ~TBIT_TABSR_TS);
180 /* ダウンカウント設定 */
181 sil_wrb_mem((VP)TADR_SFR_UDF,
182 sil_reb_mem((VP)TADR_SFR_UDF) & ~TBIT_UDF_TAUD);
183 /* カウントソースf1, タイマモード */
184 sil_wrb_mem((VP)TADR_SFR_TAMR, 0x00);
185
186 /*
187 * タイマ値の初期化
188 * タイマは 1msで TIMER_CLOCK カウント,
189 * レジスタ設定値はマイナス1する.
190 */
191 sil_wrh_mem((VP)TADR_SFR_TA, (TIMER_CLOCK - 1));
192
193 /* 割り込みレベルの設定 */
194 set_ic_ilvl((VP)(TADR_SFR_INT_BASE + TADR_SFR_TAIC_OFFSET), INT_LEVEL_TIMER);
195
196 /* カウント開始 */
197 sil_wrb_mem((VP)TADR_SFR_TABSR,
198 sil_reb_mem((VP)TADR_SFR_TABSR) | TBIT_TABSR_TS);
199}
200
201
202/*
203 * タイマ割込み要求のクリア
204 */
205Inline void
206hw_timer_int_clear()
207{
208 /*
209 * この関数はタイマ割り込みハンドラが
210 * isig_tim を呼び出す前に実行される.
211 * 割込みが受け付けられてから
212 * 割込みハンドラに処理が移った時点で
213 * 割込み要求ビットはクリアされるため
214 * 何もする必
215要がない.
216 */
217}
218
219
220/*
221 * タイマの停止処理
222 *
223 * タイマの動作を停止させる.
224 */
225Inline void
226hw_timer_terminate()
227{
228 /* カウント停止 */
229 sil_wrb_mem((VP)TADR_SFR_TABSR,
230 sil_reb_mem((VP)TADR_SFR_TABSR) & ~TBIT_TABSR_TS);
231}
232
233
234/*
235 * タイマの現在値の読出し
236 */
237Inline CLOCK
238hw_timer_get_current(void)
239{
240 return ((TIMER_CLOCK-1) - sil_reh_mem((VP)TADR_SFR_TA));
241}
242
243
244/*
245 * タイマ割込み要求のチェック
246 */
247Inline BOOL
248hw_timer_fetch_interrupt(void)
249{
250 return (sil_reb_mem((VP)(TADR_SFR_INT_BASE + TADR_SFR_TAIC_OFFSET)) & TBIT_IC_IR) != 0;
251}
252
253#endif /* _MACRO_ONLY */
254#endif /* _HW_TIMER_H_ */
Note: See TracBrowser for help on using the repository browser.