mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-13 11:29:58 +03:00
88 lines
3.2 KiB
C
88 lines
3.2 KiB
C
/*
|
|
modified version of StdPeriph function is located here.
|
|
TODO - what license does apply here?
|
|
original file was lincesed under MCD-ST Liberty SW License Agreement V2
|
|
http://www.st.com/software_license_agreement_liberty_v2
|
|
*/
|
|
|
|
#include "stm32f30x.h"
|
|
#include "rcc.h"
|
|
#include "timer.h"
|
|
|
|
const timerDef_t timerDefinitions[HARDWARE_TIMER_DEFINITION_COUNT] = {
|
|
{ .TIMx = TIM1, .rcc = RCC_APB2(TIM1) },
|
|
{ .TIMx = TIM2, .rcc = RCC_APB1(TIM2) },
|
|
{ .TIMx = TIM3, .rcc = RCC_APB1(TIM3) },
|
|
{ .TIMx = TIM4, .rcc = RCC_APB1(TIM4) },
|
|
{ .TIMx = TIM6, .rcc = RCC_APB1(TIM6) },
|
|
{ .TIMx = TIM7, .rcc = RCC_APB1(TIM7) },
|
|
{ .TIMx = TIM8, .rcc = RCC_APB2(TIM8) },
|
|
{ .TIMx = TIM15, .rcc = RCC_APB2(TIM15) },
|
|
{ .TIMx = TIM16, .rcc = RCC_APB2(TIM16) },
|
|
{ .TIMx = TIM17, .rcc = RCC_APB2(TIM17) },
|
|
};
|
|
|
|
|
|
/**
|
|
* @brief Selects the TIM Output Compare Mode.
|
|
* @note This function does NOT disable the selected channel before changing the Output
|
|
* Compare Mode. If needed, user has to enable this channel using
|
|
* TIM_CCxCmd() and TIM_CCxNCmd() functions.
|
|
* @param TIMx: where x can be 1, 2, 3, 4, 8, 15, 16 or 17 to select the TIM peripheral.
|
|
* @param TIM_Channel: specifies the TIM Channel
|
|
* This parameter can be one of the following values:
|
|
* @arg TIM_Channel_1: TIM Channel 1
|
|
* @arg TIM_Channel_2: TIM Channel 2
|
|
* @arg TIM_Channel_3: TIM Channel 3
|
|
* @arg TIM_Channel_4: TIM Channel 4
|
|
* @param TIM_OCMode: specifies the TIM Output Compare Mode.
|
|
* This parameter can be one of the following values:
|
|
* @arg TIM_OCMode_Timing
|
|
* @arg TIM_OCMode_Active
|
|
* @arg TIM_OCMode_Toggle
|
|
* @arg TIM_OCMode_PWM1
|
|
* @arg TIM_OCMode_PWM2
|
|
* @arg TIM_ForcedAction_Active
|
|
* @arg TIM_ForcedAction_InActive
|
|
* @arg TIM_OCMode_Retrigerrable_OPM1
|
|
* @arg TIM_OCMode_Retrigerrable_OPM2
|
|
* @arg TIM_OCMode_Combined_PWM1
|
|
* @arg TIM_OCMode_Combined_PWM2
|
|
* @arg TIM_OCMode_Asymmetric_PWM1
|
|
* @arg TIM_OCMode_Asymmetric_PWM2
|
|
* @retval None
|
|
*/
|
|
#define CCMR_OFFSET ((uint16_t)0x0018)
|
|
#define CCMR_OC13M_MASK ((uint32_t)0xFFFEFF8F)
|
|
#define CCMR_OC24M_MASK ((uint32_t)0xFEFF8FFF)
|
|
|
|
void TIM_SelectOCxM_NoDisable(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint32_t TIM_OCMode)
|
|
{
|
|
uint32_t tmp = 0;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_TIM_LIST1_PERIPH(TIMx));
|
|
assert_param(IS_TIM_CHANNEL(TIM_Channel));
|
|
assert_param(IS_TIM_OCM(TIM_OCMode));
|
|
|
|
tmp = (uint32_t) TIMx;
|
|
tmp += CCMR_OFFSET;
|
|
|
|
if ((TIM_Channel == TIM_Channel_1) || (TIM_Channel == TIM_Channel_3)) {
|
|
tmp += (TIM_Channel>>1);
|
|
|
|
/* Reset the OCxM bits in the CCMRx register */
|
|
*(__IO uint32_t *) tmp &= CCMR_OC13M_MASK;
|
|
|
|
/* Configure the OCxM bits in the CCMRx register */
|
|
*(__IO uint32_t *) tmp |= TIM_OCMode;
|
|
} else {
|
|
tmp += (uint32_t)(TIM_Channel - (uint32_t)4)>> (uint32_t)1;
|
|
|
|
/* Reset the OCxM bits in the CCMRx register */
|
|
*(__IO uint32_t *) tmp &= CCMR_OC24M_MASK;
|
|
|
|
/* Configure the OCxM bits in the CCMRx register */
|
|
*(__IO uint32_t *) tmp |= (uint32_t)(TIM_OCMode << 8);
|
|
}
|
|
}
|