タイマ

タイマ APIでは、システム起動からの経過時間の取得、およびタイマの登録/解除ができます。

タイマで登録した関数は、コアサービスが内部で所有しているスタックを使用して、SVCモードで呼び出されます。

API

タイマ関連のAPIを使用するには、solid_timer.h をインクルードしてください。

#include "solid_timer.h"

タイマタイプ

SOLID_TIMER_TYPE_ONESHOT
SOLID_TIMER_TYPE_INTERVAL

定数

名前

説明

SOLID_TIMER_TYPE_ONESHOT

0

ワンショットタイマ : 自動的に登録解除

SOLID_TIMER_TYPE_INTERVAL

1

インターバルタイマ : UnRegisterするまで定期的に呼ばれる

SOLID_TIMER_HANDLER

typedef struct _SOLID_TIMER_HANDLER_ SOLID_TIMER_HANDLER

説明

タイマ登録用ハンドラ

定義

typedef struct _SOLID_TIMER_HANDLER_ {
    struct _SOLID_TIMER_HANDLER_ *pNext;
    struct _SOLID_TIMER_HANDLER_ *pCallQ;
    unsigned long nextticks;
    unsigned long toticks;
    int type;
    unsigned long time;
    void (*func)(void*, SOLID_CPU_CONTEXT*);
    void* param;
} SOLID_TIMER_HANDLER;

メンバー

pNext

SOLID側で使用

pCallQ

SOLID側で使用

nextticks

SOLID側で使用

toticks

SOLID側で使用

type

タイマのタイプ(SOLID_TIMER_TYPE_XXX)

time

タイマ通知をする時間(usec)

func

タイマ通知時に呼び出される関数

param

タイマ通知時に呼び出される関数のパラメータ

SOLID_TIMER_GetCurrentTick

unsigned long long SOLID_TIMER_GetCurrentTick()

タイマの現在の経過tickを取得します

戻り値:

現在のtick値

SOLID_TIMER_ToUsec

unsigned long long SOLID_TIMER_ToUsec(unsigned long long ticks)

tick値から時間(usec)に変換します

パラメータ:

ticks -- tick値

戻り値:

変換した時間(usec)

SOLID_TIMER_RegisterTimer

int SOLID_TIMER_RegisterTimer(SOLID_TIMER_HANDLER *pHandler)

タイマを登録します

パラメータ:

pHandler -- 登録するタイマの情報(関数呼び出し後も保持する必要があります)

戻り値:

SOLID_TIMER_UnRegisterTimer

int SOLID_TIMER_UnRegisterTimer(SOLID_TIMER_HANDLER *pHandler)

タイマの登録を解除します

ワンショットタイマの場合、自動的に解除されますのでこの関数を呼び出す必要はありません

パラメータ:

pHandler -- 登録時に使用したタイマの情報

戻り値:

SOLID_TIMER_WaitNsec

void SOLID_TIMER_WaitNsec(unsigned long nsec)

指定された時間(nsec)以下を待ちます(ビジーループ)

パラメータ:

nsec -- 待ち時間

SOLID_TIMER_GetTicksPerSec

unsigned long SOLID_TIMER_GetTicksPerSec(void)

1秒当たりのtick数を取得

戻り値:

1秒当たりのtick数

SOLID_TIMER_GetMaxTicks

unsigned long long SOLID_TIMER_GetMaxTicks(void)

タイマで設定可能な最長時間(tick)を取得

: return : タイマで設定可能な最大tick値

SOLID_TIMER_GetMaxTimerTime

unsigned long long SOLID_TIMER_GetMaxTimerTime(void)

タイマで設定可能な最長時間(us)を取得

: return : タイマで設定可能な最長時間(us)

SOLID_TIMER_Suspend

void SOLID_TIMER_Suspend(void)

タイマの一時停止

省電力等により、タイマを一時停止する場合に呼び出してください。この呼び出しにより、タイマの一時停止および使用している割り込みの無効化を行います。

SOLID_TIMER_Resume

void SOLID_TIMER_Resume(void)
タイマの再開

省電力等により、タイマを再開する場合に呼び出してください。この呼び出しにより、タイマの再開および使用している割り込みの有効化を行います。

タイマの要実装関数

SOLIDのタイマは、1つのハードウェアタイマで動作しますが、誤差を軽減するためにフリーランのカウンタを別に用意すること( SOLID_USE_GLOBALTICK )で、より精度の高いタイマ動作が可能な設計になっています。

タイマ関連の要実装関数の定義は、impl_timer.h にあります。

#include "impl_timer.h"

IMPL_TIMER_INFO

typedef struct _IMPL_TIMER_INFO_ IMPL_TIMER_INFO

説明

タイマ情報の構造体

定義

typedef struct _IMPL_TIMER_INFO_ {
     unsigned long tickspersec;
     unsigned long maxticks;
     int intno;
     int priority;
     int config;
} IMPL_TIMER_INFO;

メンバー

tickspersec

1秒当たりのtick数

maxticks

タイマで設定可能な最大tick数

intno

タイマ発火時の割り込み番号

priority

タイマの割り込み優先度

config

タイマの割り込み設定: SOLID_INTC_HANDLER 参照

IMPL_TIMER_Init

void IMPL_TIMER_Init(IMPL_TIMER_INFO *pInfo)

SOLID用のタイマを初期化します

初期化後、pInfo にタイマに関する情報を格納してください

パラメータ:

pInfo -- タイマの情報

IMPL_TIMER_GetTimerTick

unsigned long IMPL_TIMER_GetTimerTick()

直前の IMPL_TIMER_SetTimer() からの経過時間(tick数)を返してください

戻り値:

経過したtick数

IMPL_TIMER_SetTimer

void IMPL_TIMER_SetTimer(unsigned long ticks)

タイマを設定します

設定時間が経過したら、IMPL_TIMER_Init() で通知した割り込みを発生させてください

パラメータ:

ticks -- 設定するタイマ値(tick数)

IMPL_TIMER_ClearInterrupt

void IMPL_TIMER_ClearInterrupt(void)

タイマの割り込みをクリアします

割込み発生時にタイマ内部の割込みクリア・終了処理が必要な場合は後処理を実装してください

IMPL_TIMER_Suspend

void IMPL_TIMER_Suspend(void)

タイマの一時停止

省電力等によりタイマを一時停止する時に呼びだされます。タイマを停止できる場合は、ここで停止処理を行ってください。

IMPL_TIMER_Resume

void IMPL_TIMER_Resume(void)

タイマの再開

省電力等によりタイマを再開する時に呼びだされます。タイマを停止した場合は、ここで再開処理を行ってください。

フリーランカウンタの要実装関数

フリーランカウンタの要実装関数の定義は、impl_globaltick.h にあります。

#include "impl_globaltick.h"

IMPL_GLOBAL_TICK_INFO

typedef struct _IMPL_GLOBAL_TICK_INFO_ IMPL_GLOBAL_TICK_INFO

説明

フリーランカウンタ情報の構造体

定義

typedef struct _IMPL_GLOBAL_TICK_INFO_ {
     unsigned long long maxticks;
     unsigned long long tickspersec;
} IMPL_GLOBAL_TICK_INFO;

メンバー

maxticks

フリーランカウンタで計測可能な最大tick数

tickspersec

1秒当たりのtick数

IMPL_GLOBAL_TICK_Init

void IMPL_GLOBAL_TICK_Init(IMPL_GLOBAL_TICK_INFO *pInfo)

SOLID用のフリーランカウンタを初期化します

ハードウェアをフリーランモード(最大値までカウントしたら0に戻る状態)で初期化し、pInfo にフリーランカウンタに関する情報を格納してください

パラメータ:

pInfo -- フリーランカウンタの情報を格納するバッファ

IMPL_GLOBAL_TICK_GetCurrent

unsigned long long IMPL_GLOBAL_TICK_GetCurrent(void)

フリーランカウンタの現在のtick値を取得します。

戻り値:

現在のtick値

IMPL_GLOBAL_TICK_Suspend

void IMPL_GLOBAL_TICK_Suspend(void)

フリーランカウンタの一時停止

省電力等によりタイマを一時停止する時に呼びだされます。フリーランカウンタを停止できる場合は、ここで停止処理を行ってください。

IMPL_GLOBAL_TICK_Resume

void IMPL_GLOBAL_TICK_Resume(void)

フリーランカウンタの再開

省電力等によりタイマを再開する時に呼びだされます。フリーランカウンタを停止した場合は、ここで再開処理を行ってください。