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

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

initial

File size: 6.2 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-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2004 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 * Copyright (C) 2002-2004 by Hokkaido Industrial Research Institute, JAPAN
11 * Copyright (C) 2006 by GJ Business Division RICOH COMPANY,LTD. JAPAN
12 *
13 * 上記著作権者
14は,以下の (1)〜(4) の条件か,Free Software Foundation
15 * によってå…
16¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
17 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
18 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
19å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
20 * 利用と呼ぶ)することを無償で許諾する.
21 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
22 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
23 * スコード中に含まれていること.
24 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
25 * 用できる形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
28 * 者
29マニュアルなど)に,上記の著作権表示,この利用条件および下記
30 * の無保証規定を掲載すること.
31 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32 * 用できない形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
34 * と.
35 * (a) 再é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
37マニュアルなど)に,上記の著
38 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
39 * (b) 再é…
40å¸ƒã®å½¢æ…
41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
42 * 報告すること.
43 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
44 * 害からも,上記著作権者
45およびTOPPERSプロジェクトをå…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
51 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
52 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
53 *
54 * @(#) $Id$
55 */
56
57/*
58 * CPU依存タイマモジュール(SH7047用)
59 * CMT0を使用
60 *
61 */
62
63#ifndef _HW_TIMER_H_
64#define _HW_TIMER_H_
65
66#include <s_services.h>
67#include "crb_h3.h"
68
69/*
70 * コンペアマッチタイマスタートレジスタCMSTRのビット設定
71 */
72#define CMSTR_STR1 0x0002 /* カウントスタート1 */
73#define CMSTR_STR0 0x0001 /* カウントスタート0 */
74
75/*
76 * コンペアマッチタイマコントロール/ステータスレジスタCMCSRのビット設定
77 */
78#define CMCSR_CMF 0x0080 /* コンペアマッチフラグ */
79#define CMCSR_CMIE 0x0040 /* コンペアマッチ割込みイネーブル */
80#define CMCSR_CKS8 0x0000 /* 8分周クロックセレクト */
81
82/*
83 * タイマ割込みハンドラのベクタ番号
84 */
85#define INHNO_TIMER CMI0
86
87/*
88 * タイマに供給されるクロック周波数[kHz]
89 * 40.000MHz/8 =5.0000MHz =5000.0kHz
90 */
91#define TIMER_CLOCK (CLOCK_RATE/8000L)
92
93#ifndef _MACRO_ONLY
94/*
95 * タイマ値の内
96部表現の型
97 */
98typedef UH CLOCK;
99
100/*
101 * タイマ値の内
102部表現とミリ秒・μ秒単位との変換
103 *
104 */
105#define TO_CLOCK(nume, deno) (TIMER_CLOCK * (nume) / (deno))
106#define TO_USEC(clock) ((clock) * 1000 / TIMER_CLOCK)
107#define CLOCK_PER_TICK ((CLOCK) TO_CLOCK(TIC_NUME, TIC_DENO))
108
109/*
110 * 設定できる最大のタイマ周期(単位は内
111部表現)
112 */
113#define MAX_CLOCK ((CLOCK) 0xffff)
114
115/*
116 * タイマの現在値を割込み発生前の値とみなすかの判断
117 */
118#define GET_TOLERANCE 100 /* 処理遅
119れの見積り値(単位は内
120部表現) */
121#define BEFORE_IREQ(clock) \
122 ((clock) >= TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE)
123
124
125/* 割込みレベルを設定レジスタに代å…
126¥ã™ã‚‹ã¨ãã®ã‚·ãƒ•ãƒˆæ•° */
127#define FRT_BIT_SHIFT 4
128
129/*
130 * タイマの起動処理
131 *
132 * タイマを初期化し,周期的なタイマ割込み要求を発生させる.
133 */
134Inline void
135hw_timer_initialize()
136{
137 /* タイマデバイス自体の初期化 */
138 sil_wrh_mem((VP)IOREG_CMSTR_BASE, 0x0000); /* タイマストップ */
139 /* カウンタ値設定 */
140 sil_wrh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCOR_OFFSET), TO_CLOCK(TIC_NUME, TIC_DENO));
141
142 /* 割り込みレベル設定 */
143 define_int_plevel ((VH*)(IOREG_INTC_BASE+IOREG_IPRG_OFFSET), TIMER_INTLVL, FRT_BIT_SHIFT);
144
145 /* 割込み設定と要求をクリアとクロックセット */
146 sil_wrh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCSR_OFFSET), (CMCSR_CMIE|CMCSR_CKS8));
147 sil_wrh_mem((VP)IOREG_CMSTR_BASE, CMSTR_STR0); /* タイマスタート */
148}
149
150/*
151 * タイマ割込み要求のクリア
152 */
153Inline void
154hw_timer_int_clear()
155{
156 sil_wrh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCSR_OFFSET),
157 (sil_reh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCSR_OFFSET)) & ~CMCSR_CMF));
158}
159
160/*
161 * タイマの停止処理
162 *
163 * タイマの動作を停止させる.
164 */
165Inline void
166hw_timer_terminate()
167{
168 sil_wrh_mem((VP)IOREG_CMSTR_BASE, /* タイマの停止 */
169 (sil_reh_mem((VP)IOREG_CMSTR_BASE) & ~CMSTR_STR0));
170 sil_wrh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCSR_OFFSET), CMCSR_CKS8);/* 割込み停止と要因のクリア */
171}
172
173/*
174 * タイマの現在値の読出し
175 *   タイマの動作を一時的に停止し,タイマ値を読み出す.
176 */
177Inline CLOCK
178hw_timer_get_current(void)
179{
180 return sil_reh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCNT_OFFSET));
181}
182
183/*
184 * タイマ割込み要求のチェック
185 */
186Inline BOOL
187hw_timer_fetch_interrupt(void)
188{
189 return ((sil_reh_mem((VP)(IOREG_CMT0_BASE+IOREG_CMCSR_OFFSET)) & CMCSR_CMIE) != 0);
190}
191
192#endif /* _MACRO_ONLY */
193#endif /* _HW_TIMER_H_ */
Note: See TracBrowser for help on using the repository browser.