#include <sil.h>
#include "dve68k.h"
マクロ定義 | |
#define | INHNO_TIMER TINHNO_TT0 |
#define | INTNO_TIMER TINTNO_TT0 |
#define | INTPRI_TIMER TIRQ_LEVEL4 |
#define | INTATR_TIMER TA_EDGE |
#define | TIMER_CLOCK 1000U |
#define | TO_CLOCK(nume, deno) ((CLOCK)(TIMER_CLOCK * (nume) / (deno))) |
#define | TO_USEC(clock) (((SYSUTM) clock) * 1000U / TIMER_CLOCK) |
#define | MAX_CLOCK ((CLOCK) 0xffffffU) |
#define | TIMER_STOP_DELAY 200U |
#define | CSR12_START 0x80000000U |
#define | CSR12_STOP 0x00000000U |
型定義 | |
typedef uint32_t | CLOCK |
関数 | |
void | target_timer_initialize (intptr_t exinf) |
void | target_timer_terminate (intptr_t exinf) |
Inline CLOCK | target_timer_get_current (void) |
Inline bool_t | target_timer_probe_int (void) |
void | target_timer_handler (void) |
#define CSR12_START 0x80000000U |
#define CSR12_STOP 0x00000000U |
#define INHNO_TIMER TINHNO_TT0 |
target_timer.h の 56 行で定義されています。
#define INTATR_TIMER TA_EDGE |
target_timer.h の 59 行で定義されています。
#define INTNO_TIMER TINTNO_TT0 |
target_timer.h の 57 行で定義されています。
参照元 target_timer_handler(), target_timer_initialize(), と target_timer_probe_int().
#define INTPRI_TIMER TIRQ_LEVEL4 |
target_timer.h の 58 行で定義されています。
#define MAX_CLOCK ((CLOCK) 0xffffffU) |
#define TIMER_CLOCK 1000U |
target_timer.h の 73 行で定義されています。
#define TIMER_STOP_DELAY 200U |
#define TO_CLOCK | ( | nume, | |||
deno | ) | ((CLOCK)(TIMER_CLOCK * (nume) / (deno))) |
#define TO_USEC | ( | clock | ) | (((SYSUTM) clock) * 1000U / TIMER_CLOCK) |
target_timer.h の 75 行で定義されています。
typedef uint32_t CLOCK |
target_timer.h の 66 行で定義されています。
Inline CLOCK target_timer_get_current | ( | void | ) |
target_timer.h の 113 行で定義されています。
参照先 CSR12_STOP, dga_read(), dga_write(), sil_dly_nse(), SIL_LOC_INT, SIL_PRE_LOC, SIL_UNL_INT, TADR_DGA_CSR12, TADR_DGA_CSR13, と TIMER_STOP_DELAY.
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 }
void target_timer_handler | ( | void | ) |
target_timer.c の 86 行で定義されています。
参照先 i_begin_int(), i_end_int(), INTNO_TIMER, と signal_time.
00087 { 00088 i_begin_int(INTNO_TIMER); 00089 signal_time(); /* タイムティックの供給 */ 00090 i_end_int(INTNO_TIMER); 00091 }
void target_timer_initialize | ( | intptr_t | exinf | ) |
target_timer.c の 54 行で定義されています。
参照先 assert, CSR12_START, dga_write(), INTNO_TIMER, MAX_CLOCK, TADR_DGA_CSR12, TIC_DENO, TIC_NUME, TO_CLOCK, と x_clear_int().
00055 { 00056 CLOCK cyc = TO_CLOCK(TIC_NUME, TIC_DENO); 00057 00058 /* 00059 * タイマ周期を設定し,タイマの動作を開始する. 00060 */ 00061 assert(cyc <= MAX_CLOCK); 00062 dga_write((void *) TADR_DGA_CSR12, CSR12_START | cyc); 00063 00064 /* 00065 * タイマ割込み要求をクリアする. 00066 */ 00067 x_clear_int(INTNO_TIMER); 00068 }
Inline bool_t target_timer_probe_int | ( | void | ) |
target_timer.h の 139 行で定義されています。
参照先 INTNO_TIMER, と x_probe_int().
00140 { 00141 return(x_probe_int(INTNO_TIMER)); 00142 }
void target_timer_terminate | ( | intptr_t | exinf | ) |
target_timer.c の 74 行で定義されています。
参照先 CSR12_STOP, dga_write(), と TADR_DGA_CSR12.
00075 { 00076 /* 00077 * タイマの動作を停止する. 00078 */ 00079 dga_write((void *) TADR_DGA_CSR12, CSR12_STOP); 00080 }
Copyright © 2008 by Kijineko Inc.