source: atk2-sc3_fl850f1l/target/fl850f1l_gcc/target_hw_counter.h@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 7.8 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2014 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2014 by FUJI SOFT INCORPORATED, JAPAN
9 * Copyright (C) 2014 by Spansion LLC, USA
10 * Copyright (C) 2014 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2014 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2014 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2014 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2014 by Witz Corporation, JAPAN
16 *
17 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
18 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
25 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
29 * と.
30 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
33 * 報告すること.
34 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
36 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
37 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
38 * 免責すること.
39 *
40 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
41 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
42 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
43 * 用する者に対して,AUTOSARパートナーになることを求めている.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
47 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
48 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
49 * の責任を負わない.
50 *
51 * $Id: target_hw_counter.h 165 2015-06-04 05:24:57Z t_ishikawa $
52 */
53
54/*
55 * ハードウェアカウンタのターゲット依存定義(fl850f1l用)
56 */
57
58#ifndef TOPPERS_TARGET_HW_COUNTER_H
59#define TOPPERS_TARGET_HW_COUNTER_H
60
61/*
62 * 使用するタイマーのユニット番号と差分タイマと現在値タイマのチャネル
63 */
64#define HWC_DTIM_UNIT 0 /* 0 or 1 */
65#define HWC_DTIM_ID 0
66#define HWC_CTIM_UNIT 0 /* 0 or 1 */
67#define HWC_CTIM_ID 1
68
69/*
70 * 割込み番号
71 */
72#if (HWC_DTIM_UNIT == 0)
73#define HWC_DTIM_INTNO (TAUFJ0I0_INTNO + HWC_DTIM_ID)
74#elif (HWC_DTIM_UNIT == 1)
75#define HWC_DTIM_INTNO (TAUFJ1I0_INTNO + HWC_DTIM_ID)
76#else /*(HWC_DTIM_UNIT == 1) */
77#error define HWC_UNIT 0 or 1.
78#endif /* (HWC_DTIM_UNIT == 0) */
79
80/*
81 * 割込み優先度
82 */
83#define HWC_DTIM_INTPRI 1
84
85/*
86 * タイマクロック周波数(Hz)(8MHz)
87 */
88#define TIMER_CLOCK_HZ ((uint32) 8000000)
89
90/*
91 * TAUJ関連レジスタ
92 */
93#define TAUJ_BASE(n) ((uint32) (0xffe50000U + (n * 0x1000U)))
94#define TAUJTPS(n) (TAUJ_BASE(n) + 0x90U)
95#define TAUJCDR(n, ch) (TAUJ_BASE(n) + (ch * 0x04U))
96#define TAUJCNT(n, ch) (TAUJ_BASE(n) + 0x10U + (ch * 0x04U))
97#define TAUJCMOR(n, ch) (TAUJ_BASE(n) + 0x80U + (ch * 0x04U))
98#define TAUJCMUR(n, ch) (TAUJ_BASE(n) + 0x20U + (ch * 0x04U))
99#define TAUJTS(n) (TAUJ_BASE(n) + 0x54U)
100#define TAUJTT(n) (TAUJ_BASE(n) + 0x58U)
101
102#define MCU_TAUJ_MASK_CK0 ((uint16) 0xfff0)
103#define MCU_TAUJ_CK0_0 ((uint16) 0x0000) /* 分周なし */
104#define MCU_TAUJ00_CMOR ((uint16) 0x0000)
105#define MCU_TAUJ00_CMUR ((uint8) 0x01)
106
107/*
108 * TAUJのユニット番号とチャネルから入力割込み番号への変換
109 */
110#define TAUJ_INTNO(n, ch) (n == 0)? ((uint32) ((TAUFJ0I0_INTNO + ch))) : ((uint32) (TAUFJ1I0_INTNO + ch))
111
112/*
113 * 割込み要求のクリア
114 */
115LOCAL_INLINE void
116HwcounterClearInterrupt(uint32 intno)
117{
118 /* 割込み制御レジスタ */
119 uint32 eic_address = EIC_ADDRESS(intno);
120
121 /* 割込み要求ビットのクリア */
122 sil_wrh_mem((void *) eic_address,
123 sil_reh_mem((void *) eic_address) & ~EIRFn);
124}
125
126/*
127 * 割込み禁止/許可設定
128 */
129LOCAL_INLINE void
130HwcounterDisableInterrupt(uint32 intno)
131{
132 /* 割込み制御レジスタ */
133 uint32 eic_address = EIC_ADDRESS(intno);
134
135 /* 割込みマスクビットのセット */
136 sil_wrh_mem((void *) eic_address,
137 sil_reh_mem((void *) eic_address) | EIMKn);
138}
139
140LOCAL_INLINE void
141HwcounterEnableInterrupt(uint32 intno)
142{
143 /* 割込み制御レジスタ */
144 uint32 eic_address = EIC_ADDRESS(intno);
145
146 /* 割込みマスクビットのセット */
147 sil_wrh_mem((void *) eic_address,
148 sil_reh_mem((void *) eic_address) & ~EIMKn);
149}
150
151/*
152 * TAUJn タイマの動作開始/停止処理
153 */
154LOCAL_INLINE void
155SetTimerStartTAUJ(uint8 n, uint8 ch)
156{
157 /* タイマ開始処理 */
158 sil_wrh_mem((void *) TAUJTS(n), (1 << ch));
159}
160
161LOCAL_INLINE void
162SetTimerStopTAUJ(uint8 n, uint8 ch)
163{
164 /* タイマ停止処理 */
165 sil_wrh_mem((void *) TAUJTT(n), (1 << ch));
166}
167
168/*
169 * TAUJnハードウェアカウンタ現在ティック値取得
170 */
171LOCAL_INLINE TickType
172GetCurrentTimeTAUJ(uint8 n, uint8 ch, TickType maxval)
173{
174 TickType count;
175 TickType curr_time = 0U;
176
177 count = sil_rew_mem((void *) (TAUJCNT(n, ch)));
178
179 /* ダウンカウンタの為,現在チック値に変換 */
180 curr_time = maxval - count;
181 curr_time = (curr_time % maxval);
182
183 return(curr_time);
184}
185
186/*
187 * TAUB関連レジスタ
188 */
189#define TAUB_BASE(n) ((uint32) (0xffe30000U + (n * 0x1000U)))
190#define TAUBTPS(n) (TAUB_BASE(n) + 0x240U)
191#define TAUBCDR(n, ch) (TAUB_BASE(n) + (ch * 0x04U))
192#define TAUBCNT(n, ch) (TAUB_BASE(n) + 0x80U + (ch * 0x04U))
193#define TAUBCMOR(n, ch) (TAUB_BASE(n) + 0x2000U + (ch * 0x04U))
194#define TAUBCMUR(n, ch) (TAUB_BASE(n) + 0xC0U + (ch * 0x04U))
195#define TAUBTS(n) (TAUB_BASE(n) + 0x1C4U)
196#define TAUBTT(n) (TAUB_BASE(n) + 0x1C8U)
197
198#define MCU_TAUB_MASK_CK0 ((uint16) 0xfff0)
199#define MCU_TAUB_CK0_0 ((uint16) 0x0000) /* 分周なし */
200#define MCU_TAUB00_CMOR ((uint16) 0x0000)
201#define MCU_TAUB00_CMUR ((uint8) 0x01)
202
203#define TAUB_INTNO(n, ch) (n == 0)? ((uint32) ((134 + ch))) : ((uint32) (248 + ch))
204
205/*
206 * TAUBn タイマの動作開始/停止処理
207 */
208LOCAL_INLINE void
209SetTimerStartTAUB(uint8 n, uint8 ch)
210{
211 /* タイマ開始処理 */
212 sil_wrh_mem((void *) TAUBTS(n), (1 << ch));
213}
214
215LOCAL_INLINE void
216SetTimerStopTAUB(uint8 n, uint8 ch)
217{
218 /* タイマ停止処理 */
219 sil_wrh_mem((void *) TAUBTT(n), (1 << ch));
220}
221
222/*
223 * TAUBnハードウェアカウンタ現在ティック値取得
224 */
225LOCAL_INLINE TickType
226GetCurrentTimeTAUB(uint8 n, uint8 ch, TickType maxval)
227{
228 TickType count;
229 TickType curr_time = 0U;
230
231 count = (TickType)sil_reh_mem((void *) (TAUBCNT(n, ch)));
232
233 /* ダウンカウンタの為,現在チック値に変換 */
234 curr_time = maxval - count;
235 curr_time = (curr_time % maxval);
236
237 return(curr_time);
238}
239
240
241/* MAIN_HW_COUNTERの定義 */
242extern void init_hwcounter_MAIN_HW_COUNTER(TickType maxval, TimeType nspertick);
243extern void start_hwcounter_MAIN_HW_COUNTER(void);
244extern void stop_hwcounter_MAIN_HW_COUNTER(void);
245extern void set_hwcounter_MAIN_HW_COUNTER(TickType exprtick);
246extern TickType get_hwcounter_MAIN_HW_COUNTER(void);
247extern void cancel_hwcounter_MAIN_HW_COUNTER(void);
248extern void trigger_hwcounter_MAIN_HW_COUNTER(void);
249extern void int_clear_hwcounter_MAIN_HW_COUNTER(void);
250extern void int_cancel_hwcounter_MAIN_HW_COUNTER(void);
251extern void increment_hwcounter_MAIN_HW_COUNTER(void);
252
253/*
254 * 10msと一致するティック値(サンプルプログラム用)
255 */
256#define TICK_FOR_10MS TIMER_CLOCK_HZ / 100
257
258#endif /* TOPPERS_TARGET_HW_COUNTER_H */
Note: See TracBrowser for help on using the repository browser.