RX210のタイマMTU0を使用してをMTIOC0A端子(PORT3-BIT4)から一定周波数の矩形波を出力するプログラムのサンプルです。
- #include "iodefine.h"
- #include <machine.h>
- #define PCLK 125 // 周辺機器のクロック設定 125kHz
- /*
- タイマの設定
- */
- void initMTU0cmt(void)
- {
- SYSTEM.PRCR.WORD = 0x0A502;
- MSTP(MTU0) = 0; //MTU0 モジュールスタンバイ解除
- SYSTEM.PRCR.WORD = 0x0A500;
- /* 端子の設定 */
- PORT3.PODR.BIT.B4 = 0; // P34 MTIOC0A 出力初期値
- PORT3.PDR.BIT.B4 = 1; // P34 出力設定
- PORT3.PMR.BIT.B4 = 0; // P34ポートとして使用
- MPC.PWPR.BIT.B0WI = 0; // PFSWE書き込み可
- MPC.PWPR.BIT.PFSWE = 1; // PFSレジスタへの書き込み可
- MPC.P34PFS.BIT.PSEL = 1; // P34をMTIOC0Aとして使用
- MPC.PWPR.BIT.PFSWE = 0; // PFSレジスタへの書き込み禁止
- PORT3.PMR.BIT.B4 = 1; // P34周辺機器として使用
- /* MTUタイマの設定 */
- cycle = PCLK * 1000UL / 1000UL / 2UL;
- MTU.TSTR.BIT.CST0 = 0x00; //MTUカウント停止
- MTU0.TCR.BIT.TPSC = 0x00; // CLK PCLK/1 でカウント
- MTU0.TCR.BIT.CCLR = 0x02; //TCNT0はTGRBのコンペアマッチでクリア
- MTU0.TMDR.BIT.MD = 0x00; //タイマーノーマルモード
- // 出力波形の設定
- MTU0.TIORH.BIT.IOA = 0x03; // MTIOC0A初期出力はLow出力コンペアマッチでトグル出力
- // MTU0.TIORH.BIT.IOA = 0x00; // MTIOC0A 出力禁止
- MTU0.TIORH.BIT.IOB = 0x00; // MTIOC0B 出力禁止
- MTU0.TGRA = 0; //出力ON-OFFのタイミング
- MTU0.TGRB = 0; //周波数の設定
- MTU0.TCNT = 0; //カウンタクリア
- MTU.TSTR.BIT.CST0 = 0x00; //タイマ停止
- }
- /*
- 波形の出力
- 引数 周波数
- */
- void setFrequency(int Frequency)
- {
- int sycle;
- if(Frequency == 0) {
- MTU.TSTR.BIT.CST0 = 0x00; //タイマストップ
- } else {
- sycle = PCLK * 1000UL / Frequency / 2UL;
- //MTU0.TCNT = 0; //カウンタクリア
- MTU0.TGRB = sycle;
- MTU.TSTR.BIT.CST0 = 0x01; //タイマスタート
- }
- }
- void main(void)
- {
- unsigned int n=0;
- /* クロックは速いほうが正確な周波数になる */
- //change_oscillation_PLL(); // クロックソースPLL
- initMTU0cmt();
- setFrequency(1000); // 1kHz出力
- while(1) {
- /* ハードウェアで波形出力するのでプログラムでは何もしなくてもよい */
- }
- }
※コメント投稿者のブログIDはブログ作成者のみに通知されます