(toppers-users 4372) カウンタ最大値2倍+1までカウントする理由について。
hisae @ jp.tdk.com
hisae @ jp.tdk.com
2015年 5月 14日 (木) 16:31:50 JST
各位
お世話になっております。
TDK株式会社の久江と申します。
現在、TOPPERS/ATK2のFL850F1L(テセラ・テクノロジー)簡易パッケージ の
ソースコードを解析させて頂いております。
下記ファイル
・arch\v850_gcc\tauj_hw_counter.c
のヘッダコメント部分を読みますと、OSのカウンタオブジェクトの一つは、
二つのハードウェアタイマを使用して構成されているようです。
一つが現在値タイマで、もう一つが差分タイマです。
* 使用するタイマ:
* 差分タイマ:目的の時間を設定する時の現在時間(現在値タイマ)
* と次の満了時間との相対時間をカウントすることで
* 目的の絶対時間に満了したこととする
* count mode:count down once
*
* 現在値タイマ:カウンタ周期分のベースタイマを実現
* (絶対時間をカウント)
* count mode:continuous count down
*
* また上記のタイマは32bitのダウンカウンタタイマである
*
* 制御方針:
*
* 現在値タイマはユーザ定義カウンタ最大値2倍+1までカウントし,
* 周期タイマとして連続カウントダウンして,常に現在時刻を
* 取得する.割込み発生する必要がないため,割込みなしモード
*
* 差分タイマは,満了処理を行うため,割込みありモードで動く
* アラームなどの満了点とタイマー1で示した現在時刻の差を
* 現在値タイマに設定する
*
* ポイント:
* 満了処理は,現在時刻を影響しないため,現在値タイマを設けている>・サン
プルプログラムにて,TAUJ0, TAUJ1を使用.
二つのハードウェアタイマを使用する理由は理解できたのですが、
「制御方針」に書いてある内容で、「現在値タイマはユーザ定義
カウンタ最大値2倍+1までカウント」する必要がある理由が分かりません。
「ユーザ定義カウンタ最大値」とは、コンフィギュレーションファイルに
設定される値、詳しくはtarget_hw_counter.yamlにて記述する、
コンテナOsCounterMaxAllowedValueの値になります。
サンプルでは次のように定義されていますので、
OsCounterMaxAllowedValue: 0x1FFFFFFF
このカウンタオブジェクトは0から0x1FFFFFFFまでカウントしたら
0に戻るカウンタということになります。
普通に考えれば、現在値タイマは0から0x1FFFFFFFまでカウント
すれば必要十分に思えます。
にも関わらず、「現在値タイマはユーザ定義カウンタ最大値2倍+1
までカウント」する必要がある理由について、ご教示頂きたく
お願い申し上げます。
よろしくお願いいたします。