RX66T R5F566TAAGFN でスマートコンフィグレータでConfig_MTU3_MTU4を作成出力し、ソースファイルにて
static uint8_t TOERA_buf = 0xC0 ; //タイマーアウトプットマスタイネーブルレジスタバッファ 0xC0で出力禁止
R_Config_MTU3_MTU4_StartTimerCount() ; //モーター1タイマーカウント起動 R_Config_MTU3_MTU4_StartTimerCtrl() ; //モーター1タイマーコントロール起動
TOERA_buf = TOERA_buf | 0x01 ; //タイマーアウトプットマスタイネーブルレジスタ 3B起動 0x1:1:4D:4C:3D:4B:4A:3B MTU.TOERA.BYTE = TOERA_buf ; PORT7.PMR.BIT.B1 = 1 ; // 1U_HI I/O port for peripheral functions //MTIOC3B
R_Config_MTU3_MTU4_UpdDuty(0x0438, 0x0438, 0x0438) ; 0x0438は TGRAレジスタ値0x0870の半分の値(なので50%Dutyが出るはず)
を実行してもMTI0C3Bが割り当てられてる,46pinP71から出力が出てきません(オシロで確認)。
RX23Tでは上記で問題無く出力がされたのですが、RX66TはRX23Tと記述が何処か変える必要があるのか
ご教授頂けませんでしょうか?
尚、スマートコンフィグレータで出力されたファイルは以下になります
///////////////////////////////////////////////////////////////////////////////////////////////////////
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_Create* Description : This function initializes the MTU for motor* Arguments : None* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_Create(void){ /* Release MTU channel 3 from stop state */ MSTP(MTU3) = 0U; /* Enable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 1U; /* Stop MTU3, MTU4 counter */ MTU.TSTRA.BYTE = MTU.TSTRA.BYTE & 0x3FU;
/* Configure MTU3 and MTU4 as complementary PWM mode timer */ MTU3.TIER.BYTE = 0x00U; MTU4.TIER.BYTE = 0x00U; MTU.TITCR1A.BIT.T3AEN = 0U; MTU.TITCR1A.BIT.T4VEN = 0U; MTU3.TCR.BYTE = _00_MTR_MTU_PCLK_1 | _00_MTR_MTU_CKEG_RISE; MTU4.TCR.BYTE = _00_MTR_MTU_PCLK_1 | _00_MTR_MTU_CKEG_RISE; MTU3.TCR2.BYTE = _00_MTR_MTU_PCLK_1; MTU4.TCR2.BYTE = _00_MTR_MTU_PCLK_1; MTU3.TCNT = _00A0_3TCNT_VALUE; MTU4.TCNT = 0x0000U; MTU.TSYRA.BIT.SYNC3 = 0U; MTU.TSYRA.BIT.SYNC4 = 0U; MTU3.TGRB = _0438_3TGRB_VALUE; MTU3.TGRD = _0438_3TGRB_VALUE; MTU4.TGRA = _0438_4TGRA_VALUE; MTU4.TGRC = _0438_4TGRA_VALUE; MTU4.TGRB = _0438_4TGRB_VALUE; MTU4.TGRD = _0438_4TGRB_VALUE; MTU.TDERA.BIT.TDER = 1U; MTU.TDDRA = _00A0_TDDRA_VALUE; MTU.TCDRA = _07D0_TCDRA_VALUE; MTU.TCBRA = _07D0_TCDRA_VALUE; MTU3.TGRA = _0870_SUM_VALUE; MTU3.TGRC = _0870_SUM_VALUE; MTU.TOCR1A.BYTE = _00_MTR_MTU_PSYE_DISABLE | _08_MTR_MTU_TOCL_DISABLE | _04_MTR_MTU_TOCS_TOCR2; MTU.TOCR2A.BYTE = _20_MTR_MTU_OLS3N_LH | _10_MTR_MTU_OLS3P_LH | _08_MTR_MTU_OLS2N_LH | _04_MTR_MTU_OLS2P_LH | _02_MTR_MTU_OLS1N_LH | _01_MTR_MTU_OLS1P_LH; MTU.TOLBRA.BYTE = MTU.TOCR2A.BYTE & 0x3FU; MTU4.TADCORA = _0002_MTR_MTU_TADCORA_VALUE; MTU4.TADCOBRA = _0002_MTR_MTU_TADCORA_VALUE; MTU4.TADCR.WORD = _0004_MTR_MTU_ADSYNCH_ITAVE_ENABLE | _0080_MTR_MTU_UTAE_ENABLE; MTU.TITMRA.BIT.TITM = 0U; MTU.TITCR1A.BYTE = _00_MTR_MTU_INT_SKIP_DISABLE << 4U | _09_MTR_MTU_INT_SKIP_COUNT_1; MTU3.TMDR1.BYTE = _0E_MTR_MTU_CMT2 | _10_MTR_MTU_BFA_BUFFER | _20_MTR_MTU_BFB_BUFFER; MTU.TOERA.BYTE = 0xC0U; MTU3.TIORH.BYTE = 0x00U; MTU3.TIORL.BYTE = 0x00U; MTU4.TIORH.BYTE = 0x00U; MTU4.TIORL.BYTE = 0x00U; /* Disable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 0U;
R_Config_MTU3_MTU4_Create_UserInit();}
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_StarttTimerCount* Description : This function starts the MTU3 channel counter* Arguments : None* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_StartTimerCount(void){
/* Start MTU3, MTU4 counter */ MTU.TCSYSTR.BYTE = (_10_MTR_MTU_SCH3_START | _08_MTR_MTU_SCH4_START);}
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_StopTimerCount* Description : This function stops the MTU3 channel counter* Arguments : None* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_StopTimerCount(void){
/* Stop MTU3, MTU4 channel counter */ MTU.TSTRA.BYTE = MTU.TSTRA.BYTE & 0x3FU;}
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_StartTimerOutput* Description : This function starts the MTU output* Arguments : None* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_StartTimerCtrl(void){ /* Enable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 1U;
//Enable MTU3,MTU4 PWM output MTU.TOERA.BYTE = _C1_MTR_MTU_OE3B_ENABLE | _C8_MTR_MTU_OE3D_ENABLE | _C2_MTR_MTU_OE4A_ENABLE | _D0_MTR_MTU_OE4C_ENABLE | _C4_MTR_MTU_OE4B_ENABLE | _E0_MTR_MTU_OE4D_ENABLE;
/* Disable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 0U;}
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_StopTimerOutput* Description : This function stops the MTU output* Arguments : None* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_StopTimerCtrl(void){ /* Enable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 1U;
//Disable MTU3,MTU4 PWM output MTU.TOERA.BYTE = 0xC0U;
/************************************************************************************************************************ Function Name: R_Config_MTU3_MTU4_UpdDuty* Description : This function updates duty cycle* Arguments : duty_u -* U phase duty register value* duty_v -* V phase duty register value* duty_w -* W phase duty register value* Return Value : None***********************************************************************************************************************/
void R_Config_MTU3_MTU4_UpdDuty(uint16_t duty_u, uint16_t duty_v, uint16_t duty_w){ MTU3.TGRD = duty_u; MTU4.TGRC = duty_v; MTU4.TGRD = duty_w;}
MTU3_MTU4が使われていて出力されている関数名から推測すると、追加したコンポーネントは
モータでしょうか?
モータだとして、
赤枠の端子設定の所はどう設定されましたでしょうか。
R_Config_MTU3_MTU4_Create(), R_Config_MTU3_MTU4_StartTimerCtrl()内に端子設定がないので、チェックを入れていない状態でしょうか。
(こちらでチェックを入れない状態を試してみましたが、チェックを入れないと、R_Config_MTU3_MTU4_UpdDuty()関数の中身が投稿されている内容と違っていたりして、どのように設定しているのか、良く判りませんでした。)
上記の端子設定の所にチェックを入れると、P71(U相のH側に割り当てられている端子)からPWM波形が出力されました。なお、他の端子(P74等、U, V, W相のH/L側、合計6端子)からも出力されます。
P71のみ、出力させたいのか、6本の端子から出力させたいのか、どちらでしょう。P71以外の端子から出力させたくない場合は、強引ですが、
//U相H側以外の端子を未使用とする PORT7.PMR.BIT.B4 = 0; PORT7.PMR.BIT.B2 = 0; PORT7.PMR.BIT.B3 = 0; PORT7.PMR.BIT.B5 = 0; PORT7.PMR.BIT.B6 = 0;
を実行すると、P72~P76からは出力されません。
(なお、P71のみPWM出力させる場合は、追加するコンポーネントは「モーター」じゃない方が良いと思います。)
ご回答有難う御座います。
bldcモータを回す為のプログラムを作成したく、御指摘の通りモータの追加コンポーネンツをしました。
で、チェックは打ってある状態でコード生成をした結果が、上記添付だったのですが、一旦チェックを外してもう一度チェックを入れる事で、コード生成で
//Control Up (MTIOC3B) PORT7.PODR.BIT.B1 = 0U; //Active High PORT7.PMR.BIT.B1 = 1U; //Control Un (MTIOC3D) PORT7.PODR.BIT.B4 = 0U; //Active High PORT7.PMR.BIT.B4 = 1U; //Control Vp (MTIOC4A) PORT7.PODR.BIT.B2 = 0U; //Active High PORT7.PMR.BIT.B2 = 1U; //Control Wp (MTIOC4B) PORT7.PODR.BIT.B3 = 0U; //Active High PORT7.PMR.BIT.B3 = 1U; //Control Vn (MTIOC4C) PORT7.PODR.BIT.B5 = 0U; //Active High PORT7.PMR.BIT.B5 = 1U; //Control Wn (MTIOC4D) PORT7.PODR.BIT.B6 = 0U; //Active High PORT7.PMR.BIT.B6 = 1U; //Enable MTU3,MTU4 PWM output MTU.TOERA.BYTE = _C1_MTR_MTU_OE3B_ENABLE | _C8_MTR_MTU_OE3D_ENABLE | _C2_MTR_MTU_OE4A_ENABLE | _D0_MTR_MTU_OE4C_ENABLE | _C4_MTR_MTU_OE4B_ENABLE | _E0_MTR_MTU_OE4D_ENABLE;
/* Disable read/write to MTU3, MTU4 registers */ MTU.TRWERA.BIT.RWE = 0U;
と端子配列が追加され、問題無くPWM出力が出来るようになりました。
今回RX66Tのプロジェクトを作成の際、すでに作ってあったRX24Tのプロジェクトを流用元に設定して作成したので、その辺りでスマートコンフィグレータのバグがあるのかもしれませんね。
とりあえず、問題が解決しましたので、有難う御座いました。