Hello,
I am using S32K116-EVB and i wanna use timer interrupt and pwm. If I just use timer or just use pwm it has work but, If I wanna use both of them my sistem is not work.
I use S32DS 3.3 and RTM 4.0.1 Library.
Mycode:
#include "sdk_project_config.h"
#include "peripherals_flexTimer_mc_1.h"
#include "peripherals_flexTimer_pwm_1.h"
#include "stdio.h"
#define LED_PIN 15U /* LED pin on PTD15 for the EVB Board */
#define LED_PORT PTD
volatile int exit_code = 0;
/* User includes */
void FTM1_Ovf_Reload_IRQHandler(void)
{
static uint32_t counter = 0;
counter++;
if (counter == 20)
{
counter = 0;
}
FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC_1, (uint32_t)FTM_TIME_OVER_FLOW_FLAG);
}
/*!
\brief The main function for the project.
\details The startup initialization sequence is the following:
* - startup asm routine
* - main()
*/
int main(void)
{
/* Write your code here */
ftm_state_t state;
ftm_state_t ftmStateStruct;
uint16_t dutyCycle = flexTimer_pwm_1_IndependentChannelsConfig[0].uDutyCyclePercent;
CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
/* Initialize pins */
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);
/* Initialize FTM */
FTM_DRV_Init(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_InitConfig_0, &state);
/* Initialize FTM instance */
FTM_DRV_Init(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_InitConfig, &ftmStateStruct);
/* Initialize counter */
FTM_DRV_InitCounter(INST_FLEXTIMER_MC_1, &flexTimer_mc_1_TimerConfig_0);
/* Initialize FTM PWM channel */
FTM_DRV_InitPwm(INST_FLEXTIMER_PWM_1, &flexTimer_pwm_1_PwmConfig);
/* Start Counter */
FTM_DRV_CounterStart(INST_FLEXTIMER_MC_1);
for(;;)
{
FTM_DRV_UpdatePwmChannel(INST_FLEXTIMER_PWM_1,
flexTimer_pwm_1_IndependentChannelsConfig[0].hwChannelId,
FTM_PWM_UPDATE_IN_DUTY_CYCLE, 1000,
0U,
true);
if(exit_code != 0)
{
break;
}
}
return exit_code;
}
I will be glad if you help me.
Hi mfatihkoseoglu,
1. Seems that you configure the wrong pin with channel(FTM0 channel 0 is selected but FTM0_CH1 PTD16 is configured)
2. FTM_DRV_UpdatePwmChannel in main loop seems too frequency. The period of PWM is 1ms but the frequency that you FTM_DRV_UpdatePwmChannel is much higher. I think you should FTM_DRV_UpdatePwmChannel only after dutyCycle is changed.
3. Please select Next Loading Point and check Max Loading Point for FTM0.
Best Regards,
Robin
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------