RL78/G14で使用できるタイマ機能は、タイマ・アレイ・ユニット、タイマRJ、タイマRD、タイマRG、リアルタイム・クロック、12ビット・インターバル・タイマ、ウォッチドッグ・タイマがあります。
C言語入門では、タイマ・アレイ・ユニット、リアルタイム・クロック、ウォッチドッグ・タイマについて学ぶ予定です。
今回は、そのなかでも、タイマ・アレイ・ユニットについて学んでいこうと思います。
タイマ・アレイ・ユニット機能の説明
タイマ・アレイ・ユニット機能の中にもいろいろな種類のタイマがあります。
そして、タイマ・アレイ・ユニットは、16ビットのタイマです。
インターバル・タイマ
一定の時間毎に割り込みを発生させることができるタイマです。
方形波出力
割り込みの発生毎にトグル動作(二つの状態が交互に反転するような処理)を行い、タイマ出力端子(TOxx)より出力させることができます。
外部イベント・カウンタ
タイマ入力端子(TIxx)に入力される信号のエッジをカウントし、規定回数に到達したら割り込みを発生させるイベント・カウンタとして利用することができます。
分周器機能
タイマ入力端子(TIxx)から入力されたクロック信号を分周して出力端子(TOxx)より出力することができます。
入力パルス間隔測定
タイマ入力端子(TIxx)に入力されるパルス信号のエッジにより、カウントをスタートさせ、次のパルスのエッジでカウント値をキャプチャすることにより、入力パルスの間隔を測定できます。
また、タイマ入力端子(TIxx)に入力される信号の立上がり、立下りのエッジにより、カウントをスタートさせ、もう片方の立下り、立ち上がりのエッジでカウント値をキャプチャすることにより、入力のHIや、LOの時間を測定できます。
ディレイ・カウンタ
タイマ入力端子(TIxx)に入力される信号のエッジでカウントをスタートし、任意の時間経過後に割り込みを発生させることができます。
ワンショット・パルス出力
2つのタイマを連動させて、出力タイミングとパルス幅を任意に設定できます。
PWM出力
2つのタイマを連動させて、周期と、デューティを任意に設定し、デューティを周期的に出力できます。
8ビット・タイマ
タイマ・アレイ・ユニットは、16ビットのタイマですが、これを、2つに分けて、8ビットのタイマとして使用できます。
タイマ・アレイ・ユニットのレジスタの構成
タイマ・アレイ・ユニットにも、IOポートと同様にいくつかの制御レジスタが用意されています。
タイマをカウントするレジスタ、タイマの時間を設定するレジスタ、タイマの入力に使用するレジスタ、タイマの出力に使用するレジスタ、タイマの設定するレジスタで構成されています。
一部、IOポートのレジスタも関連しますが、今回は、IOポートのレジスタは、「ポート機能で使用するレジスタの説明」で学んでいるため、ここでは、タイマ・アレイ・ユニットに限定して紹介します。
タイマ・カウンタ・レジスタ(TCRxx)
タイマの現在のカウント値を記憶しているレジスタです。他のレジスタの設定値により、カウンタをインクリメント/デクリメントしています。
カウント値は、16ビットまでになります。このレジスタは、読み出し専用のレジスタとなっています。どこまでカウントが進んでいるのかを知ることができます。指定したカウント値になるまでインクリメントするか、指定したカウント値から0になるまでデクリメントしていきます。
リセット時は、0xFFFFになります。
タイマ・データ・レジスタ(TDRxx)
タイマのカウント値を設定します。このレジスタで設定した時間経過したら割り込みが発生されます。
または、キャプチャしたときのカウント値をタイマ・カウント・レジスタからタイマ・データ・レジスタにコピーされます。この場合、このレジスタの値を読み出すことにより、キャプチャしたカウント値を知ることができます。
他のレジスタの設定値により、タイマのカウント値を設定するレジスタにするのか、キャプチャしたカウント値を記憶する例ジスタとして使用するかが変わります。
リセット時は、0 になります。
周辺イネーブル・レジスタ0(PER0)
各周辺ハードウェアへのクロック供給の許可/禁止を設定するレジスタです。このレジスタは、タイマ・アレイ・ユニット機能、リアルタイム・クロック機能、A/Dコンバータ機能、シリアル通信機能などの周辺ハードウェアの機能の許可/禁止を設定しますが、今回は、この中のタイマ・アレイ・ユニット機能である、TAU0ENレジスタのみを有効にします。
このTAU0ENレジスタは、PER0のbit0(一桁目のビット)に割当たっています。
リセット時は、すべて 0 (入力クロックの供給停止)です。
タイマのみを使用する場合は、「PER0 = 0x01」もしくは、「TAU0EN = 0x01」です。
タイマ・アレイ・ユニットのレジスタ設定を行う場合は、必ず、周辺イネーブル・レジスタ0のタイマ・アレイ・ユニットの入力クロック供給( 1 )に設定してから行ってください。
タイマ・クロック選択レジスタ(TPSx)
タイマのカウントの動作クロックを選択するレジスタです。動作クロックは、2種類、4種類の設定ができます。
動作クロックは、1カウントの時間を決めることができます。
タイマ・アレイ・ユニットでは、タイマのカウント値は16ビットまでなので、0~65535カウントまでしか設定できません。そして、1カウントは、1クロックなので、例えば、クロックが32MHzの場合、1秒に32000000クロックです。このため、1クロック = 31.25ナノ秒です。最大65535カウントまでしかできないので、約2ミリ秒しかタイマ時間を設定できないことになります。インターバルタイマを1秒にしたくてもできません。そこで、長い時間のインターバルタイマを利用できるように、このレジスタにて、クロックの分周を設定します。このクロックの分周の設定が、2種類、4種類できます。
設定方法がビットの組み合わせで、CPU/周辺ハードウェアクロックから分周なし、1/2~1/32768まで設定できます。これを2種類設定できます。
もう1種類は、分周なし、1/2~1/64まで設定でき、もう1種類は、1/256~1/16384まで設定できます。
リセット時は、すべて 0 です。このため、CKx0は、CKx1、CKx2は、分周なし。CKx3は、1/256になります。
タイマ・モード・レジスタ(TMRxx)
タイマ・クロック選択レジスタで設定した動作クロックの選択(設定した動作クロックのどの種類を使うかの選択)と、カウントクロックの選択(動作クロックか、TIxxからの入力信号の有効エッジを選択)、マスタ/スレーブの選択、16ビット/8ビットタイマの選択、スタートトリガとキャプチャトリガの設定、タイマ入力の有効エッジ選択、動作モード設定を行います。
動作クロックの選択
タイマ・クロック選択レジスタ(TPSx)で設定した動作クロックにて、CKx0~CKx3のどの動作クロックを使うかを選択します。
これにより、1カウント当たりの時間が決まります。
CKSxx0とCKSxx1の2つのビットの組み合わせにより選択します。
カウント・クロックの選択
動作クロックの選択で設定した動作クロックを使用するか、TIxx端子からの入力信号の有効エッジを使用するかを選択します。
選択したほうでカウントしていきます。動作クロックは1カウントの時間がわかりますが、TIxx端子からの入力信号の有効エッジを使用する場合は、外部の信号により時間がかわります。
CCSxxのビットの 0 が、動作クロックを選択。ビットの 1 が、TIxx端子からの入力信号の有効エッジを選択。
マスタ/スレーブの選択
単独のタイマとするか、複数のタイマを連動させるかを決定します。
複数のタイマとした場合、マスタのタイマとするか、スレーブのタイマとするかを決定します。
MASTERxxのビットを 0 にした場合は、単独のタイマ、もしくは、スレーブのタイマとなります。 1 にした場合は、複数のタイマのマスタのタイマとなります。
16ビット/8ビットタイマを選択
タイマのカウント値を16ビットにするか、8ビットにするかを選択します。
SPLITxxのビットを 0 にした場合、16ビットタイマとして動作します。1 にした場合は、8ビットタイマとして動作します。
スタートトリガとキャプチャトリガの設定
ソフトウェア・トリガ・スタートのみ有効(外部トリガ要因などを非選択とする)か、TIxx端子の入力の有効エッジをスタートトリガとキャプチャトリガの両方に使用するか、TIxx端子の入力の立ち上がり立下りエッジをスタートトリガとキャプチャトリガに分けて使用するか、複数のタイマと連動させた場合、マスタのタイマの割り込み信号を使用するかを選択します。
STSxx0~STSxx2の3つのビットの組み合わせにより、この4つのどれかを選択します。
TIxx端子の有効エッジを選択
立ち上がりと、立ち下がりと、両エッジかを選択します。
両エッジの場合、更に、スタートトリガを立ち下がりエッジとし、キャプチャトリガを立ち上りエッジとするか、スタートトリガを立ち上がりとし、キャプチャトリガを立ち下がりエッジとするかを選択します。
この4つのどれかを選択します。
選択には、CISxx0、CISxx1の2つのビットの組み合わせにより選択します。
動作モードの設定
インターバル・タイマ・モード、キャプチャ・モード、イベント・カウンタ・モード、ワンカウント・モード、キャプチャ&ワンカウント・モードを選択します。
キャプチャ・モードと、キャプチャ&ワンカウント・モードは、アップカウントです。それ以外は、ダウンカウントです。
インターバル・タイマ・モードは、タイマを繰り返す場合に選択します。
キャプチャ・モードは、入力パルスの間隔を測定する場合に選択します。(TIxx信号をトリガとし、立ち上がり、立ち下がりの間隔を測定する場合)
イベント・カウンタ・モードは、外部の入力によりカウントをする場合に選択します。
ワンカウント・モードは、タイマを繰り返さない場合や、PWMなどスレーブとして使用する場合などに選択します。
キャプチャ&ワンカウント・モードは、キャプチャ・モードを繰り返さないで使用する場合に選択します。
これらの5つのどれかを選択します。
選択には、MDxx1~MDxx3の3ビットの組み合わせにより選択します。
カウント・スタートと割り込みの設定
動作モードの設定で、更に、カウント開始時や、カウント動作中のスタート・トリガに割り込みを発生させるかどうかを設定します。
MDxx0の1ビットが 0 の場合は、割り込みを発生させない。 1 の場合は、割り込みを発生させる。
タイマ・ステータス・レジスタ(TSRxx)
カウンタのオーバーフロー状況が記憶されているレジスタで、読み出し専用のレジスタです。
キャプチャ・モードとキャプチャ&ワンカウント・モードのみ有効なレジスタです。
キャプチャ時にオーバーフローが発生していた場合は、 1 を記憶します。次にオーバーフローなしでキャプチャしたときにクリアされます。
リセット発生時は、 0 です。
タイマ・チャネル許可ステータス・レジスタ(TEx)
各チャネルのタイマ動作許可/停止状態を表示するレジスタです。読み出し専用のレジスタです。
タイマ・チャネル開始レジスタ(TSx)とタイマ・チャネル停止レジスタ(TTx)の各ビットに対応しています。
タイマ・チャネル開始レジスタ(TSx) の各ビットが1にセットされると、TExレジスタの対応ビットが1にセットされます。また、TTxレジスタの対応ビットが1にセットされると、その対応ビットが0にクリアされます。
タイマ・チャネル開始レジスタ(TSx)
タイマ・カウンタ・レジスタ(TCRxx)を初期化し、カウント動作の開始をチャネル毎に設定するトリガとなるレジスタです。
リセット時は、0 です。このレジスタに1を設定したチャネルのタイマが開始されます。
タイマ・チャネル停止レジスタ(TTx)
カウント動作の停止をチャネル毎に設定するトリガとなるレジスタです。
リセット時は、0です。このレジスタに1を設定したチャネルのタイマが停止されます。
タイマ入力選択レジスタ0(TIS0)
チャネル0と1のタイマ入力を選択するレジスタです。
TIS04のビットは、チャネル0のタイマ入力を選択します。0 がタイマ入力端子(TI00)入力信号を入力に選択します。1 がELCからのイベント入力信号を入力に選択します。
TIS00~TIS02の3つのビットの組み合わせで、チャネル1のタイマ入力を選択します。
タイマ入力端子(TI01)の入力信号、ELCからのイベント入力信号、低速オンチップ・オシレータ・クロック、サブシステム・クロックを選択します。
ELCとは、イベント・リンク・コントローラといって、CPUを介さず直接、周辺機能間で連携動作が可能になる機能のことをいいます。
RL78/G14マイコンは、低速オンチップ・オシレータ・クロックやサブシステム・クロックの別のクロックを持っています。使うクロックを選択できます。
タイマ出力許可レジスタ(TOEx)
各チャネルのタイマ出力許可/禁止を設定するレジスタです。
0 がタイマの出力を禁止、1 がタイマの出力を許可となっています。
許可することによって、タイマ動作を タイマ出力レジスタ (TOxx信号)に出力することができます。タイマ動作を外部に出力したい場合などに使用します。
リセット時は、 0 です。
タイマ出力レジスタ(TOx)
各チャネルのタイマ出力のレジスタです。タイマ出力許可レジスタの各チャネルに対応する設定が 1 の場合、タイマ動作の信号を出力します。
タイマ出力レベル・レジスタ(TOLx)
タイマ出力する値の反転設定を行うレジスタです。
0 の場合、正論出力(アクティブの場合、HI出力)、1 の場合、反転出力(アクティブの場合、LO出力)です。
リセット時は、 0 です。
タイマ出力モード・レジスタ(TOMx)
各チャネルのタイマ出力モードを設定するレジスタです。
タイマ出力モードとは、複数のタイマと連動させる場合、スレーブ・チャネルの割り込み信号のみをタイマ出力レジスタ(TOx)に伝えるか(マスタ・チャネル出力モード)、マスタ・チャネルと、スレーブ・チャネルの割り込み信号をタイマ出力レジスタ(TOx)に伝えるか(スレーブ・チャネル出力モード)を選択するモードです。
以上が、タイマで使用するレジスタの説明でした。
その他、今回は触れていない、入力切り替え制御レジスタ(ISC) (シリアル通信に関連)、ノイズ・フィルタ許可レジスタ1, 2 (NFEN1, NFEN2)(タイマ入力からの信号に対するノイズフィルタの有無を設定)があります。