|
最初に、このMTUの機能は無効になっていますので、有効にします。
ハードウェアマニュアル(R01UH0033JJ0140)の「9.2.2 モジュールストップコントロールレジスタA(MSTPCRA)」の一覧にあるレジスタのうち、MSTPA8を0に設定します。
ソースコードでは以下のように記述します。
SYSTEM.MSTPCRA.BIT.MSTPA8 = 0; // MTUユニット1 有効化
MTU11の設定から始めます。MTU11は、外部入力(ボタン押し離し)のタイミングで割り込みを発生させるために使います。タイマー本来の使い方ではありませんが、MTU11だけは割り込み入力IRQのように使うこともできます。また、MTU11は「18.3.10 外部パルス幅測定機能」という便利そうな機能がありますが、この機能を有効にしてもカウンタがオーバーフローしたときに割り込みが発生しないようですので使い道が限られます。
最初に外部入力端子の設定をします。デジタル入出力端子PD2をMTU11用のMTIC11W-B端子として使用するようにします。ハードウェアマニュアル「17.1.2.20 ポートファンクションレジスタD(PFDMTU)」 のMTUS6レジスタを使用します。
ソースコードでは以下のように記述します。
IOPORT.PFDMTU.BIT.MTUS6 = 1; // PD2をMTIC11W-B端子として選択
次にMTU11で使用するカウンタの1クロック分の周波数を設定します。3: PCLK/64 のクロックを選択します。MTU11は通常のタイマー機能を使用しないため、クロックは何でも良いでしょう。ハードウェアマニュアル「18.2.1 タイマコントロールレジスタ(TCR)」 のTPSCレジスタを使用します。
ソースコードでは以下のように記述します。
MTU11.TCRW.BIT.TPSC = 0x3; // クロック選択 1:PCLK/64
次にMTU11の端子入力について、立ち上がり、立ち下がりで割り込みが発生するように設定します。ハードウェアマニュアル「18.2.3 タイマI/O コントロールレジスタ(TIOR)」 のIOCレジスタを使用します。
ソースコードでは以下のように記述します。
MTU11.TIORW.BYTE = 0x13; // 両エッジでインプットキャプチャ
次にMTU11の端子入力について、割り込みを有効にします。ハードウェアマニュアル「18.2.5 タイマインタラプトイネーブルレジスタ(TIER)」 のTGIE5Wレジスタを使用します。MTU11は、U,V,Wと機能が分かれており、PD2入力はWの機能に属しています。
ソースコードでは以下のように記述します。
MTU11.TIER.BIT.TGIE5W = 1; // 1:TGI11W割り込み要求を許可
次にMTU11で使用する割り込みの機能設定を行います。IRQ14やCMT0の設定と考え方は同じです。
ベクタテーブル一覧表から、ベクタ番号:169、IER:IER15.IEN1、IPR:IPR66 の値が重要になります。
ソースコードでは以下のように記述します。
ICU.IR[169].BIT.IR = 0; // 割り込みステータスレジスタリセット
ICU.IPR[0x66].BIT.IPR = 0xF; // 割込みレベル 15(高)
ICU.IER[0x15].BIT.IEN4 = 1; // TGIW11(vect=169) 割込み許可
最後にMTU11のタイマーカウンタの動作を開始します。
ハードウェアマニュアル「18.2.14 タイマスタートレジスタ(TSTR)」 のCSTW5レジスタを使用します。
ソースコードでは以下のように記述します。
MTU11.TSTR..BYTE = 1; // カウンタスタートWビット カウント動作
|