I have already found out the solution to program the interupt correctly. The code implementation is shown below (CTIMER init not shown):
void SCT0_IRQHandler(void)
{
SCTIMER_EventHandleIRQ(SCT0_PERIPHERAL);
}
void Start_CTIMER(void)
{
// Start CTIMER only when SCTIMER reaches state 2
CTIMER_StartTimer(CTIMER0_PERIPHERAL);
PRINTF("CTIMER started from SCTIMER state 2 event.\r\n");
}
const sctimer_config_t SCT0_initConfig = {
.enableCounterUnify = true,
.clockMode = kSCTIMER_System_ClockMode,
.clockSelect = kSCTIMER_Clock_On_Rise_Input_0,
.enableBidirection_l = false,
.enableBidirection_h = false,
.prescale_l = 0U,
.prescale_h = 0U,
.outInitState = 0U,
.inputsync = 0U
};
const sctimer_pwm_signal_param_t SCT0_pwmSignalsConfig[4] = {
{
.output = kSCTIMER_Out_0,
.level = kSCTIMER_HighTrue,
.dutyCyclePercent = 50U
},
{
.output = kSCTIMER_Out_1,
.level = kSCTIMER_HighTrue,
.dutyCyclePercent = 100U
},
{
.output = kSCTIMER_Out_1,
.level = kSCTIMER_HighTrue,
.dutyCyclePercent = 0U
},
{
.output = kSCTIMER_Out_1,
.level = kSCTIMER_HighTrue,
.dutyCyclePercent = 0U
}
};
uint32_t SCT0_pwmEvent[4];
uint32_t SCT0_event[4];
uint32_t SCT0_event_startCTimer;
static void SCT0_init(void) {
SCTIMER_Init(SCT0_PERIPHERAL, &SCT0_initConfig);
/* Enable interrupt SCT0_IRQN request in the NVIC */
/* Initialization of state 0 */
SCTIMER_SetupPwm(SCT0_PERIPHERAL, &SCT0_pwmSignalsConfig[0], kSCTIMER_EdgeAlignedPwm, 100U, SCT0_CLOCK_FREQ, &SCT0_pwmEvent[0]);
SCTIMER_SetupPwm(SCT0_PERIPHERAL, &SCT0_pwmSignalsConfig[2], kSCTIMER_EdgeAlignedPwm, 100U, SCT0_CLOCK_FREQ, &SCT0_pwmEvent[2]);
SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL, kSCTIMER_OutputRiseEvent, 0, kSCTIMER_Out_0, kSCTIMER_Counter_U, &SCT0_event[0]);
SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL, 1, SCT0_event[0]);
SCTIMER_IncreaseState(SCT0_PERIPHERAL);
/* Initialization of state 1 */
/* Schedule the period event for the PWM */
SCTIMER_ScheduleEvent(SCT0, SCT0_pwmEvent[0]);
/* Schedule the pulse event for the PWM */
SCTIMER_ScheduleEvent(SCT0, SCT0_pwmEvent[0] + 1);
SCTIMER_SetupPwm(SCT0_PERIPHERAL, &SCT0_pwmSignalsConfig[1], kSCTIMER_EdgeAlignedPwm, 100U, SCT0_CLOCK_FREQ, &SCT0_pwmEvent[1]);
SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL, kSCTIMER_OutputRiseEvent, 0, kSCTIMER_Out_0, kSCTIMER_Counter_U, &SCT0_event[1]);
SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL, 2, SCT0_event[1]);
SCTIMER_IncreaseState(SCT0_PERIPHERAL);
/* Initialization of state 2 */
/* Schedule the period event for the PWM */
SCTIMER_ScheduleEvent(SCT0, SCT0_pwmEvent[0]);
/* Schedule the pulse event for the PWM */
SCTIMER_ScheduleEvent(SCT0, SCT0_pwmEvent[0] + 1);
SCTIMER_SetupPwm(SCT0_PERIPHERAL, &SCT0_pwmSignalsConfig[3], kSCTIMER_EdgeAlignedPwm, 100U, SCT0_CLOCK_FREQ, &SCT0_pwmEvent[3]);
SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL, kSCTIMER_OutputRiseEvent, 0, kSCTIMER_Out_0, kSCTIMER_Counter_U, &SCT0_event_startCTimer);
SCTIMER_SetCallback(SCT0_PERIPHERAL, Start_CTIMER, SCT0_event_startCTimer);
SCTIMER_EnableInterrupts(SCT0, (1U << SCT0_event_startCTimer));
EnableIRQ(SCT0_IRQn);
}
