RX65NでPWM出力とシリアル通信をさせるとPWM出力がおかしくなる

お世話になります。

RX65Nを使ってPWM出力とシリアル通信を行うとPWM出力がおかしくなります。

どうしたら、pwm出力が出るようになるでしょうか?

シリアル通信だけでなくコンペアマッチをさせてもPWM出力がおかしくなります。

CAN通信もやってっもPWM出力がおかしくなっているようです。

何がわるいのでしょうか?

対応策と教えていただけないでしょうか

よろしくお願いします。

プログラムは下記になります。

#include "r_smc_entry.h"
int SC;
extern volatile int TIME1;

void main(void)
{
while(1)
{
T_END=1;

R_Config_CMT0_Start();
TIME1=0;
while (TIME1<100){
}
R_Config_CMT0_Stop();

R_Config_MTU0_Start();
SC=3000;
MTU0.TGRB=SC;
R_Config_MTU0_Stop();
}
}

Parents
  • 周期やDutyを途中で変更する作りだとすると多重割り込みや優先度の考慮ができてないと思います。

  • 回答ありがとうございます。

    多重定義や優先度について全く分かっていない素人なのですが、現在の設定は下記になっています。

    どう変えたらいいか教えていただけないでしょうか?

    よろしくお願いします。


    5.1. Config_CMT0
    コンポーネント: コンペアマッチタイマ

    使用状況: 使用

    バージョン: 2.3.0

    設定:

    設定名 値
    クロック設定 PCLK/8
    インターバル時間 100
    インターバル単位 μs
    コンペアマッチ割り込みを許可 (CMI0) 許可
    複数の割込み(CMI0)を許可 チェック
    優先順位 レベル11

    5.3. Config_MTU0
    コンポーネント: PWMモードタイマ

    使用状況: 使用

    バージョン: 1.12.0

    設定:

    設定名 値
    このチャネルを同期動作に含める 禁止
    カウンタクリア要因 TGRA0コンペアマッチ(TGRA0を周期レジスタとして使用)
    カウンタクロックの選択 PCLK
    クロックエッジ選択 立上りエッジ
    MTCLKA端子のノイズフィルタを有効 禁止
    MTCLKB端子のノイズフィルタを有効 禁止
    MTCLKC端子のノイズフィルタを有効 禁止
    MTCLKD端子のノイズフィルタを有効 禁止
    ノイズフィルタクロックの選択(外部クロック端子) PCLK
    TGRC アウトプットコンペアレジスタ
    バッファ動作A転送モード コンペアマッチA発生時、バッファ転送
    TGRD アウトプットコンペアレジスタ
    バッファ動作B転送モード コンペアマッチB発生時、バッファ転送
    TGRF アウトプットコンペアレジスタ
    バッファ動作E転送モード コンペアマッチE発生時、バッファ転送
    MTIOC0A端子 端子初期出力は0、コンペアマッチで1出力
    TGRBコンペアマッチ一致時の動作 MTIOC0A端子からトグル出力
    MTIOC0C端子 端子出力は無効
    TGRDコンペアマッチ一致時の動作 MTIOC0C端子から0出力
    PWM周期 100
    周期単位 μs
    TGRA初期値 9999
    TGRB初期値 100
    TGRC初期値 100
    TGRD初期値 100
    TGRE初期値 100
    TGRF初期値 100
    TGRAのコンペアマッチにより、開始を要求(信号のTRGAN) 禁止
    TGREのコンペアマッチにより、開始を要求(信号のTRGnN) 禁止
    TGRAコンペアマッチ割り込み許可(TGIA) 禁止
    TGIA優先順位 レベル15(最高)
    TGRBコンペアマッチ割り込み許可(TGIB) 禁止
    TGIB優先順位 レベル15(最高)
    TGRCコンペアマッチ割り込み許可(TGIC) 禁止
    TGIC優先順位 レベル15(最高)
    TGRDコンペアマッチ割り込み許可(TGID) 禁止
    TGID優先順位 レベル15(最高)
    TGREコンペアマッチ割り込み許可(TGIE) 禁止
    TGIE優先順位 レベル15(最高)
    TGRFコンペアマッチ割り込み許可(TGIF) 禁止
    TGIF優先順位 レベル15(最高)
    オーバーフロー割り込みを許可(TCIV) 禁止
    TCIV優先順位 レベル15(最高)
    TGRAコンペアマッチ割り込み(TGIA0)の多重割り込みを許可 チェックを外す
    TGRBコンペアマッチ割り込み(TGIB0)の多重割り込みを許可 チェックを外す
    TGRCコンペアマッチ割り込み(TGIC0)の多重割り込みを許可 チェックを外す
    TGRDコンペアマッチ割り込み(TGID0)の多重割り込みを許可 チェックを外す
    TGREコンペアマッチ割り込み(TGIE0)の多重割り込みを許可 チェックを外す
    TGRFコンペアマッチ割り込み(TGIF0)の多重割り込みを許可 チェックを外す
    オーバーフロー割り込み(TCIV0)の多重割り込みを許可 チェックを外す

  • 細かい確認は自分自身でしてください。あなたの仕事でしょ?

    割り込みハンドラの先頭で多重割り込みを許可する命令を入れてなければ多重割り込みができません。実は去年の終わりくらいに生成コードに多重割り込み許可がやっと挿入されるようになった状態なのでコンポーネントの一部は多重割り込み許可を自分で入れる必要があります。これに関しては未使用のポート出力(GPIO)を使って思った通りのタイミングで割り込みハンドラが起動しているかをオシロスコープなどで観測するのがいいと思います。

Reply
  • 細かい確認は自分自身でしてください。あなたの仕事でしょ?

    割り込みハンドラの先頭で多重割り込みを許可する命令を入れてなければ多重割り込みができません。実は去年の終わりくらいに生成コードに多重割り込み許可がやっと挿入されるようになった状態なのでコンポーネントの一部は多重割り込み許可を自分で入れる必要があります。これに関しては未使用のポート出力(GPIO)を使って思った通りのタイミングで割り込みハンドラが起動しているかをオシロスコープなどで観測するのがいいと思います。

Children
No Data