source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/mips3/vr4131/hw_timer.h@ 26

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

initial

File size: 6.3 KB
RevLine 
[26]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) 2000-2003 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 */
52
53/*
54 * タイマドライバ(VR4131内
55蔵RTC内
56TClockタイマ用)
57 */
58
59#ifndef _HW_TIMER_H_
60#define _HW_TIMER_H_
61
62#include <vr4131_rtc.h>
63
64/*
65 * タイマ割込みハンドラのベクタ番号
66 */
67#define INHNO_TIMER INTNO_TCLK
68
69#ifndef _MACRO_ONLY
70
71/*
72 * タイマ値の内
73部表現の型
74 */
75typedef UH CLOCK;
76
77#endif /* _MACRO_ONLY */
78
79/*
80 * タイマ値の内
81部表現とミリ秒・μ秒単位との変換
82 * TIMER_CLOCKは、ボード関係のヘッダファイルに記載している。
83 */
84/* 1ミリ秒周期(isig_tim を呼び出す周期;1kHz)を発生させるためのカウント数 */
85#define TO_CLOCK(nume, deno) (TIMER_CLOCK * (nume) / (deno))
86/* clock を usec 単位に変換するマクロ */
87#define TO_USEC(clock) ((clock) * 1000u / TIMER_CLOCK)
88
89/*
90 * タイマ周期の単位を内
91部表現に変換
92 * (利用するタイマがダウンカウンタなので、このマクロがあると便利)
93 */
94#define CLOCK_PER_TICK ((CLOCK) TO_CLOCK(TIC_NUME, TIC_DENO))
95
96/*
97 * 設定できる最大のタイマ周期(単位は内
98部表現)
99 */
100#define MAX_CLOCK ((CLOCK) 0x1ffffff) /* 25ビット */
101
102/*
103 * タイマの現在値を割込み発生前の値とみなすかの判断
104 */
105#define GET_TOLERANCE 100u /* 処理遅
106れの見積り値(単位は内
107部表現)*/
108#define BEFORE_IREQ(clock) \
109 ((clock) >= TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE)
110
111/*
112 * タイマ停止までの時間(nsec単位)
113 * 値に根拠はない.
114 */
115#define TIMER_STOP_DELAY 200u
116
117#ifndef _MACRO_ONLY
118/*
119 * タイマ割込み要求のクリア
120 */
121Inline void hw_timer_int_clear() {
122
123 vr4131_wrh_mem( (VP) RTCINTREG, RTCINTR3 );
124}
125
126/*
127 * タイマの起動処理
128 * タイマを初期化し,周期的なタイマ割込み要求を発生させる.
129 */
130Inline void hw_timer_initialize() {
131
132 /*
133 * タイマ周期を設定し,タイマの動作を開始する.
134 */
135 assert( CLOCK_PER_TICK <= MAX_CLOCK );
136
137 vr4131_wrh_mem( (VP) TCLKLREG, (UH) LO16(CLOCK_PER_TICK) );
138 vr4131_wrh_mem( (VP) TCLKHREG, (UH) HI16(CLOCK_PER_TICK) );
139
140 /*
141 * タイマ割込みの割込みレベルを設定し,要求をクリアした後,
142 * マスクを解除する.
143 */
144 all_set_ilv( INHNO_TIMER, &((IPM) IPM_TIMER) ); /* 割込みレベルの設定 */
145
146 hw_timer_int_clear(); /* 割込み要求をクリア */
147
148 /* マスク解除処理(レベル1、レベル2に相当するレジスタは無い) */
149 vr4131_orh( (VP) MSYSINT2REG, TCLKINTR );
150}
151
152/*
153 * タイマの停止処理
154 * タイマの動作を停止させる.
155 */
156Inline void hw_timer_terminate() {
157
158 /* タイマの動作を停止する */
159 vr4131_wrh_mem( (VP) TCLKLREG, 0 );
160 vr4131_wrh_mem( (VP) TCLKHREG, 0 );
161
162 /*
163 * タイマ割込みをマスクし,要求をクリアする.
164 */
165 /* マスク設定処理(レベル1、レベル2に相当するレジスタは無い) */
166 vr4131_andh( (VP) MSYSINT2REG, ~TCLKINTR );
167
168 hw_timer_int_clear(); /* 割込み要求をクリア */
169}
170
171/*
172 * タイマの現在値の読出し
173 */
174Inline CLOCK hw_timer_get_current() {
175
176 UH count;
177 UH hi1, lo1, hi2, lo2;
178
179 /* カウンタ値の読み出し */
180 /* 2回読み出している理由は、ハードウェア編p261参ç…
181§ */
182 lo1 = vr4131_reh_mem( (VP) TCLKCNTLREG );
183 hi1 = vr4131_reh_mem( (VP) TCLKCNTHREG );
184
185 lo2 = vr4131_reh_mem( (VP) TCLKCNTLREG );
186 hi2 = vr4131_reh_mem( (VP) TCLKCNTHREG );
187
188 if( hi2 == hi1 )
189 count = JOIN16( hi1, lo1 );
190 else
191 count = JOIN16( hi2, lo2 );
192
193 return (CLOCK_PER_TICK - count);
194}
195
196/*
197 * タイマ割込み要求のチェック
198 */
199Inline BOOL hw_timer_fetch_interrupt() {
200
201 return( ( vr4131_reh_mem( (VP) RTCINTREG ) & RTCINTR3 ) != 0);
202}
203
204#endif /* _MACRO_ONLY */
205#endif /* _HW_TIMER_H_ */
Note: See TracBrowser for help on using the repository browser.