void pwmout_init(pwmout_t* obj, PinName pin) { uint32_t peripheral; u32 pwm_idx; u32 pin_sel; DBG_PWM_INFO("%s: Init PWM for pin(0x%x)\n", __FUNCTION__, pin); // Get the peripheral name from the pin and assign it to the object peripheral = pinmap_peripheral(pin, PinMap_PWM); if (unlikely(peripheral == NC)) { DBG_PWM_ERR("%s: Cannot find matched pwm for this pin(0x%x)\n", __FUNCTION__, pin); return; } pwm_idx = RTL_GET_PERI_IDX(peripheral); pin_sel = RTL_GET_PERI_SEL(peripheral); obj->pwm_idx = pwm_idx; obj->pin_sel = pin_sel; obj->period = 0; obj->pulse = 0; _memset((void *)&obj->pwm_hal_adp, 0, sizeof(HAL_PWM_ADAPTER)); if (HAL_OK != HAL_Pwm_Init(&obj->pwm_hal_adp, pwm_idx, pin_sel)) { DBG_PWM_ERR("pwmout_init Err!\n"); return; } pwmout_period_us(obj, 20000); // 20 ms per default HAL_Pwm_Enable(&obj->pwm_hal_adp); }
void pwmout_init(pwmout_t* obj, PinName pin) { uint32_t peripheral; u32 pwm_idx; u32 pin_sel; // Get the peripheral name from the pin and assign it to the object peripheral = pinmap_peripheral(pin, PinMap_PWM); if ( peripheral == NC ) { return; } pwm_idx = RTL_GET_PERI_IDX(peripheral); pin_sel = RTL_GET_PERI_SEL(peripheral); obj->pwm_idx = pwm_idx; obj->pin_sel = pin_sel; obj->period = 0; obj->pulse = 0; HAL_Pwm_Init(pwm_idx, pin_sel); obj->period = 20000; HAL_Pwm_SetDuty(obj->pwm_idx, obj->period, obj->pulse); HAL_Pwm_Enable(pwm_idx); }