Timer
16bit カウンタを用いるハードウェアタイマー(TIMER0 .. 4) を利用可能です。
このタイマーは、PWM 出力などのペリフェラルとして利用することもできますし、ソフトウェア処理を行うハードウェアタイマーとして利用することも可能です。
ポートの割り当て
TIMER0
8, 9, 10
2,3,4
汎用タイマー機能利用可能
TIMER1
11
5
PWM 出力専用
TIMER2
12
6
DO0*
PWM 出力専用
TIMER3
13
7
DO1*
PWM 出力専用
TIMER4
17
8
PWM 出力専用
TWELITE RED ではさらにPWM出力系統が増えていますが、TWELITE NET での標準的な対応は TIMER0..4 とします。
初期化と開始、終了
事前にペリフェラルマニュアルを参照の上、Timer で利用しないポートを宣言します。この宣言をしないと、Timer の初期化後、該当ポートは汎用のIOポートとして利用できなくなります。
以下の例では bit0,1,2 をセットします。これは TIMER0 で使用する PWM 用のピンを全て汎用IO向けに解放します。
vAHI_TimerFineGrainDIOControl(0x7);tsTimerContext() のパラメータ
Bit
Timer Input/Output
0
TIMER 0 ゲート/イベント入力
1
TIMER 0 キャプチャー入力
2
TIMER 0 PWM 出力
3
TIMER 1 PWM 出力
4
TIMER 2 PWM 出力
5
TIMER 3 PWM 出力
6
TIMER 4 PWM 出力
7
予約
次に Timer ライブラリ用の初期化構造体 tsTimerContext を静的に確保し、設定を行います。
必要なタイマーの周波数に対して適切な PreScale を選択するようにします。
最後に、Timer を開始します。
Timer を一時的に停止させるには、vTimerStop() を呼び出します。完全に無効化するには vTimerDisable() を呼び出します。
タイマー割り込み
ToCoNet_u8HwInt() ToCoNet_vHwEvent() の u8DeviceID パラメータが E_AHI_DEVICE_TIMER0 から E_AHI_DEVICE_TIMER4 をとります。
割り込み周波数が高くなるとハード割り込みやイベントの処理が無視できなくなります。
不要なタイマーの割り込みは無効にしておく
tsTimerContext の bDisableInt を TRUE に設定する
割り込み処理のみで対応し、ハードイベントは発生させない
割り込みハンドラを TRUE で return する
PWM 出力
Timerの出力として PWM 出力を設定することが可能です。
PWM出力を得るためには以下の設定が必要です。
tsTimerContext の bPWMOut を TRUE に設定する
tsTimerContext の u16duty を 0..1024 の値に設定する
vAHI_TimerFineGrainDIOControl() で出力を無効にしていない
最終更新