忘備録-備忘録

技術的な備忘録

RX210でPWM波形を出力する

2016-09-29 17:59:54 | RX210
ルネサスエレクトロニクス社のマイコンRX210を使用してPWM波形を出力するサンプルです。MTU3を使用してMTIOC3AとMTIOC3Cから信号を出力します。HighになるタイミングとLowになるタイミングをMTIOC3AではTGRA,TGRBで決め、MTIOC3CはTGRC,TGRDで決めます。このサンプルでは、カウンタのクリアはTGRBで行っています。

  1. #include "iodefine.h"
  2. #include <machine.h>
  3. #define PCLK 125 // 周辺機器のクロック設定 125kHz
  4. /*
  5. タイマの設定 MTU3
  6. */
  7. void initMTU3pwm(void)
  8. {
  9.     SYSTEM.PRCR.WORD = 0x0A502;
  10.     MSTP(MTU3) = 0; //MTU3 モジュールスタンバイ解除
  11.     SYSTEM.PRCR.WORD = 0x0A500;
  12. /* 端子の設定 */
  13.     PORTC.PODR.BIT.B7 = 0;        // PC7 MTIOC3A 出力初期値
  14.     PORTC.PDR.BIT.B7 = 1;        // PC7 出力設定
  15.     PORTC.PMR.BIT.B7 = 0;        // PC7ポートとして使用
  16.     PORTC.PODR.BIT.B6 = 0;        // PC6 MTIOC3A 出力初期値
  17.     PORTC.PDR.BIT.B6 = 1;        // PC6 出力設定
  18.     PORTC.PMR.BIT.B6 = 0;        // PC6ポートとして使用
  19.     MPC.PWPR.BIT.B0WI = 0;        // PFSWE書き込み可
  20.     MPC.PWPR.BIT.PFSWE = 1;        // PFSレジスタへの書き込み可
  21.     MPC.PC7PFS.BIT.PSEL = 1;    // PC7をMTIOC3Aとして使用
  22.     MPC.PC6PFS.BIT.PSEL = 1;    // PC6をMTIOC3Cとして使用
  23.     MPC.PWPR.BIT.PFSWE = 0;        // PFSレジスタへの書き込み禁止
  24.     PORTC.PMR.BIT.B7 = 1;        // PC7周辺機器として使用
  25.     PORTC.PMR.BIT.B6 = 1;        // PC6周辺機器として使用
  26. /* MTUタイマの設定 */
  27.     MTU.TSTR.BIT.CST3 = 0x00;    //MTUカウント停止
  28.     MTU3.TCR.BIT.TPSC = 0x00;    // CLK PCLK/1 でカウント
  29.     MTU3.TCR.BIT.CCLR = 0x02;    //TCNT3はTGRBのコンペアマッチでクリア
  30.     MTU3.TMDR.BIT.MD = 0x02;    //タイマーPWMモード1
  31.     // 出力波形の設定
  32.     MTU3.TIORH.BIT.IOA = 0x05;    // MTIOC3A 初期出力はHigh出力コンペアマッチでLow出力
  33.     MTU3.TIORH.BIT.IOB = 0x06;    // MTIOC3B 初期出力はHigh出力コンペアマッチでHigh出力
  34.     MTU3.TIORL.BIT.IOC = 0x05;    // MTIOC3C 初期出力はHigh出力コンペアマッチでLow出力
  35.     MTU3.TIORL.BIT.IOD = 0x06;    // MTIOC3D 初期出力はHigh出力コンペアマッチでHigh出力
  36.     MTU3.TGRA = 0;                // MTIOC3Aデューティー比
  37.     MTU3.TGRB = 256;            // MTU3 周波数
  38.     MTU3.TGRC = 0;                // MTIOC3Cデューティー比
  39.     MTU3.TGRD = 256;            // MTU3 周波数 MTU3.TGRBと同じ値に
  40.     MTU3.TCNT = 0;                //カウンタクリア
  41.     MTU.TSTR.BIT.CST3 = 0x01;    //タイマ動作
  42. }
  43. void main(void)
  44. {
  45.     initMTU3pwm();
  46.     MTU3.TGRA = 5;        //LED D8の明るさ 0〜255
  47.     MTU3.TGRC = 254;    //LED D7の明るさ 0〜255
  48.     while(1) {
  49. /* ハードウェアで波形出力するのでプログラムでは何もしなくてもよい */
  50.     }
  51. }