target_timer.h

説明を見る。
00001 /*
00002  *  TOPPERS/ASP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Advanced Standard Profile Kernel
00005  * 
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  *  Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
00009  *              Graduate School of Information Science, Nagoya Univ., JAPAN
00010  * 
00011  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
00012  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
00013  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
00014  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00015  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00016  *      スコード中に含まれていること.
00017  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00018  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00019  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00020  *      の無保証規定を掲載すること.
00021  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00022  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00023  *      と.
00024  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00025  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00026  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00027  *        報告すること.
00028  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00029  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00030  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
00031  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
00032  *      免責すること.
00033  * 
00034  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00035  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
00036  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
00037  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
00038  *  の責任を負わない.
00039  * 
00040  *  @(#) $Id: target_timer.h 889 2008-04-11 11:17:35Z hiro $
00041  */
00042 
00043 /*
00044  *      タイマドライバ(DVE68K/40用)
00045  */
00046 
00047 #ifndef TOPPERS_TARGET_TIMER_H
00048 #define TOPPERS_TARGET_TIMER_H
00049 
00050 #include <sil.h>
00051 #include "dve68k.h"
00052 
00053 /*
00054  *  タイマ割込みハンドラ登録のための定数
00055  */
00056 #define INHNO_TIMER     TINHNO_TT0      /* 割込みハンドラ番号 */
00057 #define INTNO_TIMER     TINTNO_TT0      /* 割込み番号 */
00058 #define INTPRI_TIMER    TIRQ_LEVEL4     /* 割込み優先度 */
00059 #define INTATR_TIMER    TA_EDGE         /* 割込み属性 */
00060 
00061 #ifndef TOPPERS_MACRO_ONLY
00062 
00063 /*
00064  *  タイマ値の内部表現の型
00065  */
00066 typedef uint32_t    CLOCK;
00067 
00068 /*
00069  *  タイマ値の内部表現とミリ秒・μ秒単位との変換
00070  *
00071  *  DVE68K/40では,タイマは1μ秒毎にカウントアップする.
00072  */
00073 #define TIMER_CLOCK             1000U
00074 #define TO_CLOCK(nume, deno)    ((CLOCK)(TIMER_CLOCK * (nume) / (deno)))
00075 #define TO_USEC(clock)          (((SYSUTM) clock) * 1000U / TIMER_CLOCK)
00076 
00077 /*
00078  *  設定できる最大のタイマ周期(単位は内部表現)
00079  */
00080 #define MAX_CLOCK       ((CLOCK) 0xffffffU)
00081 
00082 /*
00083  *  タイマ停止までの時間(nsec単位)
00084  *
00085  *  値に根拠はない.
00086  */
00087 #define TIMER_STOP_DELAY    200U
00088 
00089 /*
00090  *  レジスタの設定値
00091  */
00092 #define CSR12_START     0x80000000U     /* タイマ動作 */
00093 #define CSR12_STOP      0x00000000U     /* タイマ停止 */
00094 
00095 /*
00096  *  タイマの起動処理
00097  *
00098  *  タイマを初期化し,周期的なタイマ割込み要求を発生させる.
00099  */
00100 extern void target_timer_initialize(intptr_t exinf);
00101 
00102 /*
00103  *  タイマの停止処理
00104  *
00105  *  タイマの動作を停止させる.
00106  */
00107 extern void target_timer_terminate(intptr_t exinf);
00108 
00109 /*
00110  *  タイマの現在値の読出し
00111  */
00112 Inline CLOCK
00113 target_timer_get_current(void)
00114 {
00115     CLOCK       clk;
00116     uint32_t    saved_csr12;
00117     SIL_PRE_LOC;
00118 
00119     /*
00120      *  タイマの動作を一時的に停止し,タイマ値を読み出す.タイマの動作
00121      *  を一時的に停止させると,システム時刻がずれるために望ましくない
00122      *  が,DVE68K/40のハードウェア的な制約であり,やむをえない.ずれを
00123      *  最小に抑えるために,割込みロック状態とする.
00124      */
00125     SIL_LOC_INT();
00126     saved_csr12 = dga_read((void *) TADR_DGA_CSR12);
00127     dga_write((void *) TADR_DGA_CSR12, CSR12_STOP);
00128     sil_dly_nse(TIMER_STOP_DELAY);
00129     clk = dga_read((void *) TADR_DGA_CSR13) & 0x00ffffffU;
00130     dga_write((void *) TADR_DGA_CSR12, saved_csr12);
00131     SIL_UNL_INT();
00132     return(clk);
00133 }
00134 
00135 /*
00136  *  タイマ割込み要求のチェック
00137  */
00138 Inline bool_t
00139 target_timer_probe_int(void)
00140 {
00141     return(x_probe_int(INTNO_TIMER));
00142 }
00143 
00144 /*
00145  *  タイマ割込みハンドラ
00146  */
00147 extern void target_timer_handler(void);
00148 
00149 #endif /* TOPPERS_MACRO_ONLY */
00150 #endif /* TOPPERS_TARGET_TIMER_H */

Copyright © 2008 by Kijineko Inc.

ホームページ制作