void PWM_Init(void){ for(uint8_t i=0; i < NUM_OF_MOTORS; i++){ PWM_CCU4_Init(pwms[i]); PWM_CCU4_SetFreqAndDutyCycle(pwms[i], 50, 0); PWM_CCU4_Start(pwms[i]); } }
/* This function initializes the app */ PWM_CCU4_STATUS_t PWM_CCU4_Init(PWM_CCU4_t* handle_ptr) { PWM_CCU4_STATUS_t status; GLOBAL_CCU4_STATUS_t status_ccu4_global; uint32_t frequency_module; uint32_t prescalar; status = PWM_CCU4_STATUS_FAILURE; status_ccu4_global = GLOBAL_CCU4_STATUS_FAILURE; XMC_ASSERT("PWM_CCU4_Init:handle_ptr is NULL", (handle_ptr != NULL)); if (PWM_CCU4_STATE_UNINITIALIZED == handle_ptr->state) { /* Initialize consumed Apps */ status_ccu4_global = GLOBAL_CCU4_Init(handle_ptr->config_ptr->global_ccu4_handle); /* Initialize CCU4x_CC4y slice */ if (GLOBAL_CCU4_STATUS_SUCCESS == status_ccu4_global) { XMC_DEBUG("PWM_CCU4_Init:Initilizing slice"); /* Configure CCU4x_CC4y slice as timer */ XMC_CCU4_SLICE_CompareInit(handle_ptr->ccu4_slice_ptr, handle_ptr->config_ptr->ccu4_cc4_slice_timer_ptr); /* Set period match value of the timer */ XMC_CCU4_SLICE_SetTimerPeriodMatch(handle_ptr->ccu4_slice_ptr, handle_ptr->config_ptr->period_value); /* Set timer compare match value for channel 1 */ XMC_CCU4_SLICE_SetTimerCompareMatch(handle_ptr->ccu4_slice_ptr, (uint16_t) handle_ptr->config_ptr->compare_value); if (1U == handle_ptr->config_ptr->ccu4_cc4_slice_timer_ptr->mcm_enable) { XMC_CCU4_SetMultiChannelShadowTransferMode(handle_ptr->ccu4_module_ptr, (uint32_t) handle_ptr->config_ptr->mcm_shadow_txfr_mode); } #if (UC_SERIES == XMC14) /*below feature available in XMC14xx devices */ XMC_CCU4_SLICE_SetShadowTransferMode(handle_ptr->ccu4_slice_ptr, handle_ptr->config_ptr->shadow_transfer_mode); XMC_CCU4_SLICE_WriteImmediateAfterShadowTransfer(handle_ptr->ccu4_slice_ptr, handle_ptr->config_ptr->immediate_write); XMC_CCU4_SLICE_EnableAutomaticShadowTransferRequest(handle_ptr->ccu4_slice_ptr, handle_ptr->config_ptr->automatic_shadow_transfer); if((bool)true == handle_ptr->config_ptr->cascaded_shadow_txfr_enable) { XMC_CCU4_SLICE_EnableCascadedShadowTransfer(handle_ptr->ccu4_slice_ptr); } #endif /* Transfer value from shadow timer registers to actual timer registers */ XMC_CCU4_EnableShadowTransfer(handle_ptr->ccu4_module_ptr, handle_ptr->shadow_txfr_msk); XMC_CCU4_EnableShadowTransfer(handle_ptr->ccu4_module_ptr, handle_ptr->dither_shadow_txfr_msk); /* Configure events */ PWM_CCU4_lConfigure_Events(handle_ptr); /* Enable the interrupts */ PWM_CCU4_lInit_Interrupt(handle_ptr); /*Initializes the GPIO*/ if ((bool) true == handle_ptr->config_ptr->gpio_ch_out_enable) { XMC_GPIO_Init(handle_ptr->config_ptr->gpio_ch_out_ptr, handle_ptr->config_ptr->gpio_ch_out_pin, handle_ptr->config_ptr->gpio_ch_out_config_ptr); } frequency_module = handle_ptr->config_ptr->global_ccu4_handle->module_frequency; prescalar = (uint32_t) handle_ptr->config_ptr->ccu4_cc4_slice_timer_ptr->prescaler_initval; frequency_module = frequency_module / ((uint32_t) 1 << prescalar); handle_ptr->frequency_tclk = frequency_module; handle_ptr->state = PWM_CCU4_STATE_INITIALIZED; status = PWM_CCU4_STATUS_SUCCESS; /* Start the PWM generation if start at initialization is enabled */ if ((bool) true == handle_ptr->config_ptr->start_control) { status = PWM_CCU4_Start(handle_ptr); } } else { handle_ptr->state = PWM_CCU4_STATE_UNINITIALIZED; } } else { status = PWM_CCU4_STATUS_ALREADY_INITIALIZED; XMC_DEBUG("PWM_CCU4_Init:PWM_CCU4_STATUS_ALREADY_INITIALIZED"); } return (status); } /* end of PWM_CCU4_Init() api */