RX220とPDG2でLチカ

はじめまして。

RX220を以下開発環境で、Lチカをしようとしています。

  • CS+ for CC V7.00.00
  • PDG2 Version 2.09.000

作成したプログラムは以下の通りです。

プログラムを走らせて見ると、P46は想定周期でトグルしますが、P42がLowのままで動きません。

但し、26,27行目を

R_PG_IO_PORT_Write_P42(1);
R_PG_IO_PORT_Write_P46(1);

にすると、どちらもトグルしてくれます。

(推測原因)

以下の抜粋のプログラムでは省略したのですが、
別にCMT3を2msで起動していて、そこでP40,P41をHighに固定しています。
但し、Cmt1IntFunc()中のどちらかのR_PG_IO_PORT_Write_P4x()実行タイミングで、
P40,P41がLoWに戻されてしまいます。

P41波形

このことから、R_PG_IO_PORT_Write_P4x()関数が、bit単位で書き込みできておらず、
他のbitもWriteしてしまっていると想像しています。
PDG2のバグは混在してないでしょうか?

または、プログラム上で問題のある箇所がありましたら、ご指摘をお願いします。
ご教示の程、よろしくお願いします。

プログラム(抜粋)

//#include "typedefine.h"
#ifdef __cplusplus
//#include <ios> // Remove the comment when you use ios
//_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios
#endif

// PDG2関数読み出し
#include "R_PG_driver.h"

void main(void);
#ifdef __cplusplus
extern "C" {
void abort(void);
}
#endif

void main(void)
{
// 存在しないポートの処理
R_PG_IO_PORT_SetPortNotAvailable();

// クロックの設定
R_PG_Clock_Set();

// LED消灯
R_PG_IO_PORT_Write_P42(0);
R_PG_IO_PORT_Write_P46(0);
R_PG_IO_PORT_Set_P42();
R_PG_IO_PORT_Set_P46();

// CMT設定
R_PG_Timer_Set_CMT_U0_C1();

// CMTカウント開始
R_PG_Timer_StartCount_CMT_U0_C1();

while(1);
}

// 外部割込み
void Irq0IntFunc(void) {}
void Irq1IntFunc(void) {}

// CMT1 (100ms)
void Cmt1IntFunc(void)
{
// 0.5秒毎にLED1の赤と緑を交互に点滅
++ledCnt;
if (ledCnt == 5) {
ledCnt = 0;
if (!ledState) {
R_PG_IO_PORT_Write_P42(0);
R_PG_IO_PORT_Write_P46(1);
} else {
R_PG_IO_PORT_Write_P46(0);
R_PG_IO_PORT_Write_P42(1);
}
ledState = !ledState;
}
}

#ifdef __cplusplus
void abort(void)
{

}
#endif

  • 自己解決しました。。

    原因は上記ではなく、WDTで定期的に内部リセットかかっていたことが原因でした。。
    大変失礼しました。。。

    PDG2プロジェクトは、過去プロジェクトをコピーし使っていて、
    WDTは使わないので、チェックを外したのですが、なぜか機能は残っていました。
    (これで大変はまりました。。。)

    全くの新規でPDG2プロジェクトを起こしたところ、WDTが動かなくなり問題解決しました。