RX210のMTUやCMTについて

秋月電子通商のRX210(R5F5211BBDFP)を使用しています。MTU1,2の位相計数モード,MTU3,4のPWMモード1,CMT0で1msタイマのための使用していますが、順次動作をしても動作しません。単体では動作します。HEWでC言語でプログラムしています。

初心者でいろいろ分からないため、ご教授頂ければ幸いです。

  • わわいです

    わからないので全部教えろ、ってのは土台無理な話です

    ルネサスのサイトをあされば、そこらへんのタイマ周りのサンプルコードがいろいろ出てきますんで、そういうのを持ってきて動かしてみたらどうでしょう

    そのうえでわからないことがあるなら、そのコードを提示の上で聞きましょう

  • わわいさんありがとうございます。

    PWMとタイマについては

    void delay(short cnt)
    {
    short i;

    CMT0.CMCR.BIT.CKS = 0;
    CMT0.CMCR.BIT.CMIE = 1;
    CMT0.CMCOR = 1249;
    IPR(CMT0,CMI0) = 5;
    IEN(CMT0,CMI0) = 1;
    CMT0.CMCNT = 0;
    CMT.CMSTR0.BIT.STR0 = 1;
    for(i=0; i<cnt; i++){
    while( IR(CMT0,CMI0) == 0 );
    CMT0.CMCNT = 0;
    IR(CMT0,CMI0) = 0;
    }
    CMT.CMSTR0.BIT.STR0 = 0;
    CMT0.CMCNT = 0;
    }

    void main(void)
    {
    SYSTEM.PRCR.WORD = 0xA50F;

    SYSTEM.OPCCR.BIT.OPCMTSF = 0;
    SYSTEM.OPCCR.BIT.OPCM = 0;
    while(SYSTEM.OPCCR.BIT.OPCMTSF == 1);

    MSTP(MTU1) = 0;
    MSTP(MTU2) = 0;
    MSTP(MTU3) = 0;
    MSTP(MTU4) = 0;
    MSTP(CMT0) = 0;

    SYSTEM.SCKCR3.BIT.CKSEL = 2;
    SYSTEM.MOSCCR.BIT.MOSTP = 0;
    SYSTEM.SOSCCR.BIT.SOSTP = 0;

    SYSTEM.PRCR.BIT.PRC0 = 0xA500;

    PORTC.PODR.BIT.B7 = 0;
    PORTC.PDR.BIT.B7 = 1;
    PORTC.PMR.BIT.B7 = 1;

    MPC.PWPR.BIT.B0WI = 0;
    MPC.PWPR.BIT.PFSWE = 1;
    MPC.PC7PFS.BIT.PSEL = 1;
    MPC.PWPR.BIT.PFSWE = 0;
    MPC.PWPR.BIT.B0WI = 1;

    MTU.TSTR.BIT.CST3 = 0;
    MTU.TSYR.BIT.SYNC3 = 0;
    MTU3.TCR.BIT.TPSC = 0;
    MTU3.TCR.BIT.CCLR = 2;
    MTU3.TMDR.BIT.MD = 2;

    MTU3.TIORH.BIT.IOA = 5;
    MTU3.TIORH.BIT.IOB = 6;

    MTU3.TGRA = 0;
    MTU3.TGRB = 6000;
    MTU3.TCNT = 0x00;
    MTU.TSTR.BIT.CST3 = 1;

    MTU3.TGRA = 6000;
    delay(1000);

    MTU3.TGRA = 6000;
    delay(1000);

    }

    位相計数モードについては

    void Encoder1(void)
    {
    PORT2.PDR.BYTE = 0;
    PORT2.PMR.BIT.B4 = 1;
    PORT2.PMR.BIT.B5 = 1;

    MPC.PWPR.BIT.B0WI = 0;
    MPC.PWPR.BIT.PFSWE = 1;
    MPC.P24PFS.BIT.PSEL = 2;
    MPC.P25PFS.BIT.PSEL = 2;
    MPC.PWPR.BIT.PFSWE = 0;
    MPC.PWPR.BIT.B0WI = 1;

    MTU.TSTR.BIT.CST1 = 0;
    MTU1.TMDR.BIT.MD = 0x04;
    MTU1.TCR.BIT.CCLR = 2;
    MTU1.TGRB = 57600;
    MTU1.TCNT = 0x00;
    MTU.TSTR.BIT.CST1 = 1;

    }

    としてメイン文でMTU1.TCNTで読み取っています。

  • で、何を聞きたいのでしょうか

  • 最初にも書いていますが、単体では動作しますが、組み合わせて順次動作をしても動作しません。プログラムに問題があるのかマイコンに問題があるのか分からないので、分かるのであれば教えて頂きたいです。

  • このプログラムではmain関数を抜けて処理は終わってしまうのでその通りになっているだけだと思います。main関数を抜けないようにして、繰り返したい処理をwhileループで行ってみてください。最終的にはCMT0とかで周期的に処理を実行するようにしてはどうでしょうか?