R8C/1Bのタイマ
概要
R8C/1Bには、タイマX, タイマZ, タイマC合わせて3つのタイマがあります。それぞれの特徴をざっくりまとめると、
- タイマX
8bitプリスケーラ付きの8bitタイマ。ダウンカウント。外部,内部のクロックをカウントする他、内部クロックから任意の周期の矩形波を出力したり、外部から入力されるパルスの幅や周期を測定したりできる。
- タイマZ
8bitプリスケーラ付きの8bitタイマ。ダウンカウント。クロックソースにタイマXのアンダーフローを選択する事で、タイマXと連結して16bitタイマとして利用可能。任意のHIGH,LOW幅を持つ波形を出力したり、1回だけ決められた幅の波形を出力したりする機能がある。
- タイマC
16bitのタイマ。タイマの値と比較/値をコピーするための2つのレジスタを備えており、値の比較結果により出力を変化させたり、入力に合わせて値をタイマからコピーしたりできる。
また、どのタイマも値のアンダーフロー/オーバーフロー時や外部入力時、コンペア一致時に割り込みを発生させる機能があるので、外部との接続を切っておけば周期的に割り込みを発生させる用途にも利用できる。
以下、各タイマについて、周期的なタイマ割り込みを発生させる方法を説明します。PWMやパルス幅の測定は別のところで解説します。
タイマX
単純に、タイマモードで動作させればいいでしょう。使用するレジスタはこんな感じ。
- TXMR: タイマXモードレジスタ
bit0,1: タイマモードでは00に設定する。
bit2: INT1を使う場合、極性をここで選択する(タイマの動作には関係ない)
bit3: 1を書き込むとカウントを開始する。
他のビットはすべて0にしておく
- PREX: プリスケーラXレジスタ
選択したカウントソースをプリスケーラでカウント(カウントダウン)し、アンダーフローする度にタイマのカウントが行われます。読んだ場合、プリスケーラの現在の値が読めます。書き込んだ場合、リロードレジスタ(アンダーフローした時にレジスタに書き込む値を保持しておくレジスタ)とカウンタ両方に書き込まれます。書き込みの正確なタイミングはデータシート参照。
- TX: タイマXレジスタ
プリスケーラのアンダーフローをカウントします。プリスケーラ同様のリロードレジスタを持ち、アンダーフローしたタイミングでタイマX割り込みを発生させます。
- TCSS: タイマカウントソース設定レジスタ
bit0,1: カウントソースを{f1, f8, fRING, f2}から選択します。
bit4,5には、タイマZ用の値があるので、タイマZも使う場合は注意。残りのビットは0で埋める。
- TXIC: タイマX割り込み制御レジスタ
設定方法については、こっちを参照。
[設定例] この通りに設定すると、8000クロックに1回割り込みが発生します。別途、Iフラグは立てること。
txmr = 0b00000000;//タイマモード
tcss = 0b00000001;//クロックソース=f8=8分周
prex = 10-1;//プリスケーラで10分周して使用する
tx = 100-1;//100回に一回割り込む
txic = 7;//割り込み優先レベル7
txs = 1;//カウントスタート。txmr |= 1 << 3と同じ。