source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.h@ 337

Last change on this file since 337 was 337, checked in by coas-nagasima, 6 years ago

ASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 8.7 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced 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) 2008-2010 by Witz Corporation, JAPAN
13 * Copyright (C) 2013 by Mitsuhiro Matsuura
14 * Copyright (C) 2017 by Cores Co., Ltd. Japan
15 *
16 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
17 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
18 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
24 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
28 * と.
29 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
30 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
31 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
32 * 報告すること.
33 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
35 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
36 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
37 * 免責すること.
38 *
39 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
40 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
41 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
42 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
43 * の責任を負わない.
44 *
45 * @(#) $Id$
46 */
47
48/*
49 * タイマドライバ(GR-SAKURA用)
50 */
51
52#ifndef TOPPERS_TARGET_TIMER_H
53#define TOPPERS_TARGET_TIMER_H
54
55#include "gr_sakura.h"
56#include "rx630_kernel_impl.h"
57#include "target_syssvc.h"
58
59/*
60 * タイマ割込みハンドラ登録のための定数
61 */
62#define INHNO_TIMER0 INT_CMT0_CMI /* 割込みハンドラ番号 */
63#define INTNO_TIMER0 INT_CMT0_CMI /* 割込み番号 */
64#define INTPRI_TIMER0 -5 /* 割込み優先度 */
65#define INTATR_TIMER0 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
66
67#define INHNO_TIMER1 INT_CMT1_CMI /* 割込みハンドラ番号 */
68#define INTNO_TIMER1 INT_CMT1_CMI /* 割込み番号 */
69#define INTPRI_TIMER1 -5 /* 割込み優先度 */
70#define INTATR_TIMER1 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
71
72/*
73 * オーバランタイマ割込みハンドラ登録のための定数
74 */
75#define INHNO_TIMER2 INT_CMT2_CMI /* 割込みハンドラ番号 */
76#define INTNO_TIMER2 INT_CMT2_CMI /* 割込み番号 */
77#define INTPRI_TIMER2 -5 /* 割込み優先度 */
78#define INTATR_TIMER2 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
79#define INTNO_OVR_BASE_TIMER INTNO_TIMER1 /* 基本タイマに使うタイマ割込み番号 */
80#define INTNO_DUMMY_TIMER 255 /* ダミータイマ割込み番号 */
81
82#ifndef TOPPERS_MACRO_ONLY
83
84/*
85 * タイマ値の内部表現の型
86 */
87typedef uint16_t CLOCK;
88
89/*
90 * タイマ値の内部表現とミリ秒単位との変換
91 *
92 * 1msのタイマー割り込みを使用するのでそのクロックを定義する.
93 */
94#define TIMER_CLOCK (FREQ_PCLK / 8U) /* PCLK/最低分周比8 = 6MHz */
95#define TO_CLOCK(nume, deno) ((CLOCK)(TIMER_CLOCK * (nume) / (deno)))
96#define TO_USEC(clock) ((SYSUTM)((clock) * 1000U / TIMER_CLOCK))
97
98/*
99 * コンペアマッチタイマコンスタントレジスタ(CMCOR)
100 *
101 * コンペアマッチ周期
102 * 周辺モジュールクロック(PCLK)48MHzを8分周するので,
103 * 6カウント = 1us : max 10922.667us
104 */
105#define CMCOR_PERIOD (0x10000U)
106
107/*
108 * カウント < - > マイクロ秒 変換値
109 * 48MHz / 8 / 1000
110 */
111#define USEC_CONVERT_VALUE 6U
112
113/*
114 * 高分解能タイマのタイマ周期
115 *
116 * 2^32 / 6
117 */
118#define TCYC_HRTCNT 715827882U /* (0x100000000 / 6) = 715827882.667usec */
119
120/*
121 * 高分解能タイマのカウント値の進み幅
122 */
123#define TSTEP_HRTCNT 1U
124
125/*
126 * 性能評価用システム時刻を取り出す際の処理時間の見積り値(単位は内部表現)
127 */
128#define GET_TOLERANCE (100U) /* 処理遅れの見積り値(単位は内部表現)*/
129#define BEFORE_IREQ(clock) \
130 ((clock) >= (TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE))
131
132/*
133 * コンペアマッチタイマコントロールレジスタの設定値
134 */
135/*
136 * クロック選択ビット
137 *
138 * bit7は予約領域であり, 書込みは1固定
139 */
140#define CMT_PCLK_DIV_8 (0x0080U)
141#define CMT_PCLK_DIV_32 (0x0081U)
142#define CMT_PCLK_DIV_128 (0x0082U)
143#define CMT_PCLK_DIV_512 (0x0083U)
144
145/*
146 * コンペアマッチタイマ割り込み要求先設定レジスタi(ISELRi)(i= 割り込みベクタ番号)
147 */
148#define ICU_ISEL_CPU (0x00U)
149
150/*
151 * タイマの起動処理
152 *
153 * タイマを初期化し,周期的なタイマ割込み要求を発生させる.
154 */
155extern void target_timer_initialize(intptr_t exinf);
156
157/*
158 * タイマの停止処理
159 *
160 * タイマの動作を停止させる.
161 */
162extern void target_timer_terminate(intptr_t exinf);
163
164/*
165 * タイマレジスタ値の読み出し
166 */
167Inline uint16_t rx630_cmt_getcount(void)
168{
169 return sil_reh_mem((uint16_t *)CMT0_CMCNT_ADDR);
170}
171
172/*
173 * タイマレジスタ値の書き込み
174 */
175Inline void rx630_cmt_setcount(uint16_t count)
176{
177 sil_wrh_mem(CMT0_CMCNT_ADDR, count);
178}
179
180/*
181 * タイマの現在値の読出し
182 */
183Inline CLOCK
184target_timer_get_current(void)
185{
186 /* アップカウントのためタイマレジスタ値をそのまま返す */
187 return (rx630_cmt_getcount());
188}
189
190/*
191 * タイマ割込み要求のチェック
192 */
193Inline bool_t
194target_timer_probe_int(void)
195{
196 return(probe_int(INTNO_TIMER0));
197}
198
199/*
200 * タイマ割込みハンドラ
201 */
202extern void target_lower_timer_handler(void);
203extern void target_upper_timer_handler(void);
204
205/*
206 * 割込みタイミングに指定する最大値
207 */
208#define HRTCNT_BOUND 100000002U
209
210/*
211 * 高分解能タイマへの割込みタイミングの設定
212 *
213 * 高分解能タイマを,hrtcntで指定した値カウントアップしたら割込みを発
214 * 生させるように設定する.
215 */
216extern void target_hrt_set_event(HRTCNT hrtcnt);
217
218/*
219 * 高分解能タイマ割込みの要求
220 */
221extern void target_hrt_raise_event(void);
222
223/*
224 * 高分解能タイマの現在のカウント値の読出し 内部処理
225 */
226extern HRTCNT target_hrt_get_current_convert(void);
227
228/*
229 * 高分解能タイマの現在のカウント値の読出し
230 */
231Inline HRTCNT
232target_hrt_get_current(void)
233{
234 return (target_hrt_get_current_convert());
235}
236
237#ifdef TOPPERS_SUPPORT_OVRHDR
238
239/*
240 * オーバランタイマの初期化処理
241 */
242extern void target_ovrtimer_initialize(intptr_t exinf);
243
244/*
245 * オーバランタイマの停止処理
246 */
247extern void target_ovrtimer_terminate(intptr_t exinf);
248
249/*
250 * オーバランタイマの動作開始
251 */
252extern void target_ovrtimer_start(PRCTIM ovrtim);
253
254/*
255 * オーバランタイマの停止
256 */
257extern PRCTIM target_ovrtimer_stop(uint_t int_num);
258
259/*
260 * オーバランタイマの現在値の読出し
261 */
262extern PRCTIM target_ovrtimer_get_current(void);
263
264/*
265 * オーバランタイマの割込みの要求
266 */
267extern void target_ovrtimer_raise_event(void);
268
269/*
270 * オーバランタイマ割込みハンドラ
271 */
272extern void target_ovrtimer_handler(void);
273
274#endif /* TOPPERS_SUPPORT_OVRHDR */
275
276#endif /* TOPPERS_MACRO_ONLY */
277#endif /* TOPPERS_TARGET_TIMER_H */
Note: See TracBrowser for help on using the repository browser.