source: azure_iot_hub/trunk/asp3_dcre/target/gr_citrus_gcc/target_timer.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
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 * 上記著作権者
17は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
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およびTOPPERSプロジェクトを
50 * å…
51è²¬ã™ã‚‹ã“と.
52 *
53 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
54お
55 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
56 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
57 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
58 * の責任を負わない.
59 *
60 * @(#) $Id: target_timer.h 388 2019-05-22 11:25:18Z coas-nagasima $
61 */
62
63/*
64 * タイマドライバ(GR-CITRUS用)
65 */
66
67#ifndef TOPPERS_TARGET_TIMER_H
68#define TOPPERS_TARGET_TIMER_H
69
70#include "gr_citrus.h"
71#include "rx630_kernel_impl.h"
72#include "target_syssvc.h"
73
74/*
75 * タイマ割込みハンドラ登録のための定数
76 */
77#define INHNO_TIMER0 INT_CMT0_CMI /* 割込みハンドラ番号 */
78#define INTNO_TIMER0 INT_CMT0_CMI /* 割込み番号 */
79#define INTPRI_TIMER0 -5 /* 割込み優å…
80ˆåº¦ */
81#define INTATR_TIMER0 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
82
83#define INHNO_TIMER1 INT_CMT1_CMI /* 割込みハンドラ番号 */
84#define INTNO_TIMER1 INT_CMT1_CMI /* 割込み番号 */
85#define INTPRI_TIMER1 -5 /* 割込み優å…
86ˆåº¦ */
87#define INTATR_TIMER1 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
88
89/*
90 * オーバランタイマ割込みハンドラ登録のための定数
91 */
92#define INHNO_TIMER2 INT_CMT2_CMI /* 割込みハンドラ番号 */
93#define INTNO_TIMER2 INT_CMT2_CMI /* 割込み番号 */
94#define INTPRI_TIMER2 -5 /* 割込み優å…
95ˆåº¦ */
96#define INTATR_TIMER2 (TA_ENAINT | TA_EDGE) /* 割込み属性 */
97#define INTNO_OVR_BASE_TIMER INTNO_TIMER1 /* 基本タイマに使うタイマ割込み番号 */
98#define INTNO_DUMMY_TIMER 255 /* ダミータイマ割込み番号 */
99
100#ifndef TOPPERS_MACRO_ONLY
101
102/*
103 * タイマ値の内
104部表現の型
105 */
106typedef uint16_t CLOCK;
107
108/*
109 * タイマ値の内
110部表現とミリ秒単位との変換
111 *
112 * 1msのタイマー割り込みを使用するのでそのクロックを定義する.
113 */
114#define TIMER_CLOCK (FREQ_PCLK / 8U) /* PCLK/最低分周比8 = 6MHz */
115#define TO_CLOCK(nume, deno) ((CLOCK)(TIMER_CLOCK * (nume) / (deno)))
116#define TO_USEC(clock) ((SYSUTM)((clock) * 1000U / TIMER_CLOCK))
117
118/*
119 * コンペアマッチタイマコンスタントレジスタ(CMCOR)
120 *
121 * コンペアマッチ周期
122 * 周辺モジュールクロック(PCLK)48MHzを8分周するので,
123 * 6カウント = 1us : max 10922.667us
124 */
125#define CMCOR_PERIOD (0x10000U)
126
127/*
128 * カウント < - > マイクロ秒 変換値
129 * 48MHz / 8 / 1000
130 */
131#define USEC_CONVERT_VALUE 6U
132
133/*
134 * 高分解能タイマのタイマ周期
135 *
136 * 2^32 / 6
137 */
138#define TCYC_HRTCNT 715827882U /* (0x100000000 / 6) = 715827882.667usec */
139
140/*
141 * 高分解能タイマのカウント値の進み幅
142
143 */
144#define TSTEP_HRTCNT 1U
145
146/*
147 * 性能評価用システム時刻を取り出す際の処理時間の見積り値(単位は内
148部表現)
149 */
150#define GET_TOLERANCE (100U) /* 処理遅
151れの見積り値(単位は内
152部表現)*/
153#define BEFORE_IREQ(clock) \
154 ((clock) >= (TO_CLOCK(TIC_NUME, TIC_DENO) - GET_TOLERANCE))
155
156/*
157 * コンペアマッチタイマコントロールレジスタの設定値
158 */
159/*
160 * クロック選択ビット
161 *
162 * bit7は予約領域であり, 書込みは1固定
163 */
164#define CMT_PCLK_DIV_8 (0x0080U)
165#define CMT_PCLK_DIV_32 (0x0081U)
166#define CMT_PCLK_DIV_128 (0x0082U)
167#define CMT_PCLK_DIV_512 (0x0083U)
168
169/*
170 * コンペアマッチタイマ割り込み要求å…
171ˆè¨­å®šãƒ¬ã‚¸ã‚¹ã‚¿i(ISELRi)(i= 割り込みベクタ番号)
172 */
173#define ICU_ISEL_CPU (0x00U)
174
175/*
176 * タイマの起動処理
177 *
178 * タイマを初期化し,周期的なタイマ割込み要求を発生させる.
179 */
180extern void target_timer_initialize(intptr_t exinf);
181
182/*
183 * タイマの停止処理
184 *
185 * タイマの動作を停止させる.
186 */
187extern void target_timer_terminate(intptr_t exinf);
188
189/*
190 * タイマレジスタ値の読み出し
191 */
192Inline uint16_t rx630_cmt_getcount(void)
193{
194 return sil_reh_mem((uint16_t *)CMT0_CMCNT_ADDR);
195}
196
197/*
198 * タイマレジスタ値の書き込み
199 */
200Inline void rx630_cmt_setcount(uint16_t count)
201{
202 sil_wrh_mem(CMT0_CMCNT_ADDR, count);
203}
204
205/*
206 * タイマの現在値の読出し
207 */
208Inline CLOCK
209target_timer_get_current(void)
210{
211 /* アップカウントのためタイマレジスタ値をそのまま返す */
212 return (rx630_cmt_getcount());
213}
214
215/*
216 * タイマ割込み要求のチェック
217 */
218Inline bool_t
219target_timer_probe_int(void)
220{
221 return(probe_int(INTNO_TIMER0));
222}
223
224/*
225 * タイマ割込みハンドラ
226 */
227extern void target_lower_timer_handler(void);
228extern void target_upper_timer_handler(void);
229
230/*
231 * 割込みタイミングに指定する最大値
232 */
233#define HRTCNT_BOUND 100000002U
234
235/*
236 * 高分解能タイマへの割込みタイミングの設定
237 *
238 * 高分解能タイマを,hrtcntで指定した値カウントアップしたら割込みを発
239 * 生させるように設定する.
240 */
241extern void target_hrt_set_event(HRTCNT hrtcnt);
242
243/*
244 * 高分解能タイマ割込みの要求
245 */
246extern void target_hrt_raise_event(void);
247
248/*
249 * 高分解能タイマの現在のカウント値の読出し 内
250部処理
251 */
252extern HRTCNT target_hrt_get_current_convert(void);
253
254/*
255 * 高分解能タイマの現在のカウント値の読出し
256 */
257Inline HRTCNT
258target_hrt_get_current(void)
259{
260 return (target_hrt_get_current_convert());
261}
262
263#ifdef TOPPERS_SUPPORT_OVRHDR
264
265/*
266 * オーバランタイマの初期化処理
267 */
268extern void target_ovrtimer_initialize(intptr_t exinf);
269
270/*
271 * オーバランタイマの停止処理
272 */
273extern void target_ovrtimer_terminate(intptr_t exinf);
274
275/*
276 * オーバランタイマの動作開始
277 */
278extern void target_ovrtimer_start(PRCTIM ovrtim);
279
280/*
281 * オーバランタイマの停止
282 */
283extern PRCTIM target_ovrtimer_stop(uint_t int_num);
284
285/*
286 * オーバランタイマの現在値の読出し
287 */
288extern PRCTIM target_ovrtimer_get_current(void);
289
290/*
291 * オーバランタイマの割込みの要求
292 */
293extern void target_ovrtimer_raise_event(void);
294
295/*
296 * オーバランタイマ割込みハンドラ
297 */
298extern void target_ovrtimer_handler(void);
299
300#endif /* TOPPERS_SUPPORT_OVRHDR */
301
302#endif /* TOPPERS_MACRO_ONLY */
303#endif /* TOPPERS_TARGET_TIMER_H */
Note: See TracBrowser for help on using the repository browser.