source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/arch/arm_gcc/rza1/chip_timer.h@ 352

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

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 6.8 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) 2005-2016 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32 * 免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id$
41 */
42
43/*
44 * タイマドライバ(RZ/A1 OSタイマ用)
45 *
46 * RZ/A1は2チャンネルのOSタイマを持つが,その内の1つを用いて高分解能タ
47 * イマを,もう1つを用いてオーバランタイマを実現する.
48 */
49
50#ifndef TOPPERS_CHIP_TIMER_H
51#define TOPPERS_CHIP_TIMER_H
52
53#include <sil.h>
54#include "rza1.h"
55
56/*
57 * タイマ割込みハンドラ登録のための定数
58 */
59#define INHNO_TIMER INTNO_OSTM0 /* 割込みハンドラ番号 */
60#define INTNO_TIMER INTNO_OSTM0 /* 割込み番号 */
61#define INTPRI_TIMER (TMAX_INTPRI - 1) /* 割込み優先度 */
62#define INTATR_TIMER TA_EDGE /* 割込み属性 */
63
64/*
65 * オーバランタイマ割込みハンドラ登録のための定数
66 */
67#ifdef TOPPERS_SUPPORT_OVRHDR
68#define INHNO_OVRTIMER INTNO_OSTM1 /* 割込みハンドラ番号 */
69#define INTNO_OVRTIMER INTNO_OSTM1 /* 割込み番号 */
70#define INTPRI_OVRTIMER TMAX_INTPRI /* 割込み優先度 */
71#define INTATR_OVRTIMER TA_EDGE /* 割込み属性 */
72#endif /* TOPPERS_SUPPORT_OVRHDR */
73
74/*
75 * OSタイマの周波数の想定値のチェック
76 *
77 * 現在の実装は,クロックが33.33…MHzの場合のみに対応している.
78 */
79#if OSTM_CLK != 33333333UL
80#error Unsupported OS time clock.
81#endif /* OSTM_CLK != 33333333UL */
82
83/*
84 * OSタイマレジスタの番地の定義
85 */
86#define OSTM_CMP(base) ((uint32_t *)(base + 0x00U))
87#define OSTM_CNT(base) ((uint32_t *)(base + 0x04U))
88#define OSTM_TE(base) ((uint8_t *)(base + 0x10U))
89#define OSTM_TS(base) ((uint8_t *)(base + 0x14U))
90#define OSTM_TT(base) ((uint8_t *)(base + 0x18U))
91#define OSTM_CTL(base) ((uint8_t *)(base + 0x20U))
92
93/*
94 * OSタイマ カウント開始トリガレジスタの設定値の定義
95 */
96#define OSTM_TS_START 0x01U
97
98/*
99 * OSタイマ カウント停止トリガレジスタの設定値の定義
100 */
101#define OSTM_TT_STOP 0x01U
102
103/*
104 * OSタイマ 制御レジスタの設定値の定義
105 */
106#define OSTM_CTL_INTERVAL 0x00U /* インターバルタイマモード */
107#define OSTM_CTL_FRCMP 0x02U /* フリーランニングコンペアモード */
108
109#ifndef TOPPERS_MACRO_ONLY
110
111/*
112 * 高分解能タイマの起動処理
113 */
114extern void target_hrt_initialize(intptr_t exinf);
115
116/*
117 * 高分解能タイマの停止処理
118 */
119extern void target_hrt_terminate(intptr_t exinf);
120
121/*
122 * 高分解能タイマの現在のカウント値の読出し
123 */
124Inline HRTCNT
125target_hrt_get_current(void)
126{
127 uint32_t cnt, cnt1;
128
129 cnt = sil_rew_mem(OSTM_CNT(OSTM0_BASE));
130
131 /* μ秒単位に変換(クロックが33.33…MHzである前提)*/
132 cnt1 = cnt / 1000000000;
133 return((HRTCNT)((cnt - cnt1 * 999999999) * 3 / 100 + cnt1 * 30000000));
134}
135
136/*
137 * 高分解能タイマへの割込みタイミングの設定
138 *
139 * 高分解能タイマを,hrtcntで指定した値カウントアップしたら割込みを発
140 * 生させるように設定する.
141 */
142extern void target_hrt_set_event(HRTCNT hrtcnt);
143
144/*
145 * 高分解能タイマ割込みの要求
146 */
147extern void target_hrt_raise_event(void);
148
149/*
150 * 割込みタイミングに指定する最大値
151 */
152#define HRTCNT_BOUND 100000002U
153
154/*
155 * 高分解能タイマ割込みハンドラ
156 */
157extern void target_hrt_handler(void);
158
159#ifdef TOPPERS_SUPPORT_OVRHDR
160
161/*
162 * オーバランタイマの初期化処理
163 */
164extern void target_ovrtimer_initialize(intptr_t exinf);
165
166/*
167 * オーバランタイマの停止処理
168 */
169extern void target_ovrtimer_terminate(intptr_t exinf);
170
171/*
172 * オーバランタイマの動作開始
173 */
174Inline void
175target_ovrtimer_start(PRCTIM ovrtim)
176{
177 uint32_t cnt = ovrtim * 33 + ovrtim / 3 + 1;
178
179 sil_wrw_mem(OSTM_CMP(OSTM1_BASE), cnt);
180 sil_wrb_mem(OSTM_TS(OSTM1_BASE), OSTM_TS_START);
181}
182
183/*
184 * オーバランタイマの停止
185 */
186extern PRCTIM target_ovrtimer_stop(void);
187
188/*
189 * オーバランタイマの現在値の読出し
190 */
191extern PRCTIM target_ovrtimer_get_current(void);
192
193/*
194 * オーバランタイマ割込みハンドラ
195 */
196extern void target_ovrtimer_handler(void);
197
198#endif /* TOPPERS_SUPPORT_OVRHDR */
199#endif /* TOPPERS_MACRO_ONLY */
200#endif /* TOPPERS_CHIP_TIMER_H */
Note: See TracBrowser for help on using the repository browser.