RDタイマによるPWM出力について

いつもお世話になっております。

RL78/G14のRDタイマを使用したPWM出力において、PWM周期が設定の2倍の周期となり、困っております。

 

C-First基板(RL78/G14搭載)を用いて、PWMを4本出力してみようと思い、RDタイマを使用することにしました。

 

RDタイマのコード生成の機能画面において、PWMを最大6本使用を選択し(タイマRD0とタイマRD1同期)、

PWM周期を1ms、TRDGRC0、TRDGRD0、TRDGRB1、TRDGRD1、の4本、50%Duty(動作確認用)の出力設定を行いました。

クロックは、32MHz(fCLK)に設定しております(⇒fHOCO=64)。

 

コード生成の内容も確認したところ、PWMの周期は

TRDGRA0 = _F9FF_TMRD_TRDGRA0_VALUE;

となっており、63999カウントとなっており、1msのカウント値となっております。

Dutyも50%なので、31999カウントとなっております。

 

しかし、この状態でデバッグしたところ、

PWMの周期が2ms(Low期間1ms)となりました。

試しに、Dutyを20%でデバッグしたところ、

PWMの周期は2msのままで、Low期間が400usとなりました。

PWMの周期を0.5msに設定すると、周期が1msとなります。

 

何か設定に不備があるのでしょうか?

ご教示いただきたく、宜しくお願いいたします。

 

コード生成

void R_TMR_RD0_Create(void)
{
    TRD0EN = 1U;    /* enable input clock supply */
    TRDSTR |= _04_TMRD_TRD0_COUNT_CONTINUES | _08_TMRD_TRD1_COUNT_CONTINUES;
    TRDSTR &= (uint8_t)~_03_TRD_COUNT_STATR_INITIAL_VALUE;  /* disable TMRD operation */
    TRDMK0 = 1U;    /* disable TMRD0 interrupt */
    TRDIF0 = 0U;    /* clear TMRD0 interrupt flag */
    TRDMK1 = 1U;    /* disable TMRD1 interrupt */
    TRDIF1 = 0U;    /* clear TMRD1 interrupt flag */
    TRDMR = _00_TMRD_TRDGRC0_GENERAL | _00_TMRD_TRDGRD0_GENERAL | _00_TMRD_TRDGRC1_GENERAL | _00_TMRD_TRDGRD1_GENERAL;
    TRDPMR = _02_TMRD_TRDIOC0_PWM_MODE | _04_TMRD_TRDIOD0_PWM_MODE | _10_TMRD_TRDIOB1_PWM_MODE |
             _40_TMRD_TRDIOD1_PWM_MODE;
    TRDDF0 = _00_TMRD_TRDIOD_FORCEDCUTOFF_DISABLE | _00_TMRD_TRDIOC_FORCEDCUTOFF_DISABLE |
             _00_TMRD_TRDIOB_FORCEDCUTOFF_DISABLE;
    TRDDF1 = _00_TMRD_TRDIOD_FORCEDCUTOFF_DISABLE | _00_TMRD_TRDIOC_FORCEDCUTOFF_DISABLE |
             _00_TMRD_TRDIOB_FORCEDCUTOFF_DISABLE;
    TRDOER1 = _01_TMRD_TRDIOA0_OUTPUT_DISABLE | _02_TMRD_TRDIOB0_OUTPUT_DISABLE | _00_TMRD_TRDIOC0_OUTPUT_ENABLE |
              _00_TMRD_TRDIOD0_OUTPUT_ENABLE | _10_TMRD_TRDIOA1_OUTPUT_DISABLE | _00_TMRD_TRDIOB1_OUTPUT_ENABLE |
              _40_TMRD_TRDIOC1_OUTPUT_DISABLE | _00_TMRD_TRDIOD1_OUTPUT_ENABLE;
    TRDOCR = _04_TMRD_TRDIOC0_INITIAL_OUTPUT_H | _08_TMRD_TRDIOD0_INITIAL_OUTPUT_H | _20_TMRD_TRDIOB1_INITIAL_OUTPUT_H |
             _80_TMRD_TRDIOD1_INITIAL_OUTPUT_H;
    TRDCR0 = _00_TMRD_INETNAL_CLOCK_F1_FIH | _20_TMRD_COUNTER_CLEAR_TRDGRA;
    TRDCR1 = _00_TMRD_INETNAL_CLOCK_F1_FIH | _20_TMRD_COUNTER_CLEAR_TRDGRA;
    TRDIER0 = _00_TMRD_IMIA_DISABLE | _00_TMRD_IMIB_DISABLE | _00_TMRD_IMIC_DISABLE | _00_TMRD_IMID_DISABLE |
              _00_TMRD_OVIE_DISABLE;
    TRDIER1 = _00_TMRD_IMIA_DISABLE | _00_TMRD_IMIB_DISABLE | _00_TMRD_IMIC_DISABLE | _00_TMRD_IMID_DISABLE |
              _00_TMRD_OVIE_DISABLE;
    TRDPOCR0 = _00_TMRD_TRDIOC_OUTPUT_ACTIVE_L | _00_TMRD_TRDIOD_OUTPUT_ACTIVE_L;
    TRDPOCR1 = _00_TMRD_TRDIOB_OUTPUT_ACTIVE_L | _00_TMRD_TRDIOD_OUTPUT_ACTIVE_L;
    TRDGRA0 = _F9FF_TMRD_TRDGRA0_VALUE;
    TRDGRC0 = _7CFF_TMRD_TRDGRC0_VALUE;
    TRDGRD0 = _7CFF_TMRD_TRDGRD0_VALUE;
    TRDGRA1 = _F9FF_TMRD_TRDGRA1_VALUE;
    TRDGRB1 = _7CFF_TMRD_TRDGRB1_VALUE;
    TRDGRD1 = _7CFF_TMRD_TRDGRD1_VALUE;
    /* Set TRDIOC0 pin */
    P1 &= 0xBFU;
    PM1 &= 0xBFU;
    /* Set TRDIOD0 pin */
    POM1 &= 0xEFU;
    P1 &= 0xEFU;
    PM1 &= 0xEFU;
    /* Set TRDIOB1 pin */
    P1 &= 0xFBU;
    PM1 &= 0xFBU;
    /* Set TRDIOD1 pin */
    POM1 &= 0xFEU;
    P1 &= 0xFEU;
    PM1 &= 0xFEU;
}

 

 

Parents
  • いつもお世話になっております。

    解決いたしました。

    クロック発生器の設定の高速オンチップオシレータクロック設定の周波数を32(fHOCO=32,fIH=32)MHzと設定したところ、ちゃんと動きました。

    デフォルト値が64Mzとなっており、64MHzで動けるのかと思い込んでおりました。

    お騒がせして申し訳ございませんでした。
Reply
  • いつもお世話になっております。

    解決いたしました。

    クロック発生器の設定の高速オンチップオシレータクロック設定の周波数を32(fHOCO=32,fIH=32)MHzと設定したところ、ちゃんと動きました。

    デフォルト値が64Mzとなっており、64MHzで動けるのかと思い込んでおりました。

    お騒がせして申し訳ございませんでした。
Children
No Data