2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
21 #include "drivers/io.h"
22 #include "drivers/pwm_mapping.h"
24 const uint16_t multiPPM
[] = {
25 PWM1
| (MAP_TO_PPM_INPUT
<< 8), // PPM input
27 PWM2
| (MAP_TO_MOTOR_OUTPUT
<< 8),
28 PWM3
| (MAP_TO_MOTOR_OUTPUT
<< 8),
29 PWM4
| (MAP_TO_MOTOR_OUTPUT
<< 8),
30 PWM5
| (MAP_TO_MOTOR_OUTPUT
<< 8),
31 PWM6
| (MAP_TO_MOTOR_OUTPUT
<< 8),
32 PWM7
| (MAP_TO_MOTOR_OUTPUT
<< 8),
33 PWM8
| (MAP_TO_MOTOR_OUTPUT
<< 8),
34 PWM9
| (MAP_TO_MOTOR_OUTPUT
<< 8),
35 PWM10
| (MAP_TO_MOTOR_OUTPUT
<< 8),
36 PWM11
| (MAP_TO_MOTOR_OUTPUT
<< 8),
40 const uint16_t multiPWM
[] = {
41 PWM2
| (MAP_TO_MOTOR_OUTPUT
<< 8),
42 PWM3
| (MAP_TO_MOTOR_OUTPUT
<< 8),
43 PWM4
| (MAP_TO_MOTOR_OUTPUT
<< 8),
44 PWM5
| (MAP_TO_MOTOR_OUTPUT
<< 8),
45 PWM6
| (MAP_TO_MOTOR_OUTPUT
<< 8),
46 PWM7
| (MAP_TO_MOTOR_OUTPUT
<< 8),
47 PWM8
| (MAP_TO_MOTOR_OUTPUT
<< 8),
48 PWM9
| (MAP_TO_MOTOR_OUTPUT
<< 8),
49 PWM10
| (MAP_TO_MOTOR_OUTPUT
<< 8),
50 PWM11
| (MAP_TO_MOTOR_OUTPUT
<< 8),
54 const uint16_t airPPM
[] = {
55 PWM1
| (MAP_TO_PPM_INPUT
<< 8), // PPM input
56 PWM2
| (MAP_TO_MOTOR_OUTPUT
<< 8), // motor #1
57 PWM3
| (MAP_TO_MOTOR_OUTPUT
<< 8), // motor #2
58 PWM4
| (MAP_TO_SERVO_OUTPUT
<< 8), // servo #1
59 PWM5
| (MAP_TO_SERVO_OUTPUT
<< 8),
60 PWM6
| (MAP_TO_SERVO_OUTPUT
<< 8),
61 PWM7
| (MAP_TO_SERVO_OUTPUT
<< 8),
62 PWM8
| (MAP_TO_SERVO_OUTPUT
<< 8),
63 PWM9
| (MAP_TO_SERVO_OUTPUT
<< 8),
64 PWM10
| (MAP_TO_SERVO_OUTPUT
<< 8),
65 PWM11
| (MAP_TO_SERVO_OUTPUT
<< 8),
69 const uint16_t airPWM
[] = {
70 PWM2
| (MAP_TO_MOTOR_OUTPUT
<< 8), // motor #1
71 PWM3
| (MAP_TO_MOTOR_OUTPUT
<< 8), // motor #2
72 PWM4
| (MAP_TO_SERVO_OUTPUT
<< 8), // servo #1
73 PWM5
| (MAP_TO_SERVO_OUTPUT
<< 8),
74 PWM6
| (MAP_TO_SERVO_OUTPUT
<< 8),
75 PWM7
| (MAP_TO_SERVO_OUTPUT
<< 8),
76 PWM8
| (MAP_TO_SERVO_OUTPUT
<< 8),
77 PWM9
| (MAP_TO_SERVO_OUTPUT
<< 8),
78 PWM10
| (MAP_TO_SERVO_OUTPUT
<< 8),
79 PWM11
| (MAP_TO_SERVO_OUTPUT
<< 8),
83 const timerHardware_t timerHardware
[USABLE_TIMER_CHANNEL_COUNT
] = {
85 { TIM8
, IO_TAG(PA15
), TIM_Channel_1
, TIM8_CC_IRQn
, 0, IOCFG_AF_PP_PD
, GPIO_AF_2
}, // PPM
86 { TIM3
, IO_TAG(PB1
), TIM_Channel_4
, TIM3_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_2
, 0}, // PWM1
87 { TIM3
, IO_TAG(PA7
), TIM_Channel_2
, TIM3_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_2
, 0}, // PWM2
88 { TIM15
, IO_TAG(PA2
), TIM_Channel_1
, TIM1_BRK_TIM15_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_9
, 0}, // PWM3
89 { TIM2
, IO_TAG(PA1
), TIM_Channel_2
, TIM2_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_1
, 0}, // PWM4
90 { TIM3
, IO_TAG(PB0
), TIM_Channel_3
, TIM3_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_2
, 0}, // PWM5
91 { TIM3
, IO_TAG(PA6
), TIM_Channel_1
, TIM3_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_2
, 0}, // PWM6
92 { TIM15
, IO_TAG(PA3
), TIM_Channel_2
, TIM1_BRK_TIM15_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_9
, 0}, // PWM7
93 { TIM2
, IO_TAG(PA0
), TIM_Channel_1
, TIM2_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_1
, 0}, // PWM8
94 { TIM2
, IO_TAG(PB10
), TIM_Channel_3
, TIM2_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_1
}, // RC_CH4 - PB10 - *TIM2_CH3, UART3_TX (AF7)
95 { TIM2
, IO_TAG(PB11
), TIM_Channel_4
, TIM2_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_1
}, // RC_CH3 - PB11 - *TIM2_CH4, UART3_RX (AF7)
96 { TIM1
, IO_TAG(PA8
), TIM_Channel_1
, TIM1_CC_IRQn
, 1, IOCFG_AF_PP
, GPIO_AF_6
}, // GPIO_TIMER / LED_STRIP