忘備録-備忘録

技術的な備忘録

RX210で矩形波を出力する

2015-12-06 21:14:46 | RX210
RX210のタイマMTU0を使用してをMTIOC0A端子(PORT3-BIT4)から一定周波数の矩形波を出力するプログラムのサンプルです。

  1. #include "iodefine.h"
  2. #include <machine.h>
  3. #define PCLK 125                // 周辺機器のクロック設定 125kHz
  4. /*
  5. タイマの設定
  6. */
  7. void initMTU0cmt(void)
  8. {
  9.     SYSTEM.PRCR.WORD = 0x0A502;
  10.     MSTP(MTU0) = 0;                //MTU0 モジュールスタンバイ解除
  11.     SYSTEM.PRCR.WORD = 0x0A500;
  12. /* 端子の設定 */
  13.     PORT3.PODR.BIT.B4 = 0;        // P34 MTIOC0A 出力初期値
  14.     PORT3.PDR.BIT.B4 = 1;        // P34 出力設定
  15.     PORT3.PMR.BIT.B4 = 0;        // P34ポートとして使用
  16.     MPC.PWPR.BIT.B0WI = 0;        // PFSWE書き込み可
  17.     MPC.PWPR.BIT.PFSWE = 1;        // PFSレジスタへの書き込み可
  18.     MPC.P34PFS.BIT.PSEL = 1;    // P34をMTIOC0Aとして使用
  19.     MPC.PWPR.BIT.PFSWE = 0;        // PFSレジスタへの書き込み禁止
  20.     PORT3.PMR.BIT.B4 = 1;        // P34周辺機器として使用
  21. /* MTUタイマの設定 */
  22.     cycle = PCLK * 1000UL / 1000UL / 2UL;
  23.     MTU.TSTR.BIT.CST0 = 0x00;    //MTUカウント停止
  24.     MTU0.TCR.BIT.TPSC = 0x00;    // CLK PCLK/1 でカウント
  25.     MTU0.TCR.BIT.CCLR = 0x02;    //TCNT0はTGRBのコンペアマッチでクリア
  26.     MTU0.TMDR.BIT.MD = 0x00;    //タイマーノーマルモード
  27.     // 出力波形の設定
  28.     MTU0.TIORH.BIT.IOA = 0x03;    // MTIOC0A初期出力はLow出力コンペアマッチでトグル出力
  29. //    MTU0.TIORH.BIT.IOA = 0x00;    // MTIOC0A 出力禁止
  30.     MTU0.TIORH.BIT.IOB = 0x00;    // MTIOC0B 出力禁止
  31.     MTU0.TGRA = 0;                //出力ON-OFFのタイミング
  32.     MTU0.TGRB = 0;                //周波数の設定
  33.     MTU0.TCNT = 0;                //カウンタクリア
  34.     MTU.TSTR.BIT.CST0 = 0x00;    //タイマ停止
  35. }
  36. /*
  37. 波形の出力
  38.   引数 周波数
  39.  */
  40.  void setFrequency(int Frequency)
  41.  {
  42.      int sycle;
  43.      if(Frequency == 0) {
  44.         MTU.TSTR.BIT.CST0 = 0x00;        //タイマストップ
  45.      } else {
  46.         sycle = PCLK * 1000UL / Frequency / 2UL;
  47.         //MTU0.TCNT = 0;                //カウンタクリア
  48.         MTU0.TGRB = sycle;
  49.         MTU.TSTR.BIT.CST0 = 0x01;    //タイマスタート
  50.      }
  51.  }
  52. void main(void)
  53. {
  54.     unsigned int n=0;
  55. /* クロックは速いほうが正確な周波数になる */
  56.     //change_oscillation_PLL();            // クロックソースPLL
  57.     initMTU0cmt();
  58.     setFrequency(1000);                    // 1kHz出力
  59.     while(1) {
  60. /* ハードウェアで波形出力するのでプログラムでは何もしなくてもよい */
  61.     }
  62. }


最新の画像もっと見る

コメントを投稿