diff --git a/src/main/target/REVONANO/target.c b/src/main/target/REVONANO/target.c new file mode 100644 index 000000000..7c77347d9 --- /dev/null +++ b/src/main/target/REVONANO/target.c @@ -0,0 +1,103 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#include +#include + +#include +#include "drivers/pwm_mapping.h" + +const uint16_t multiPPM[] = { + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Motor #1 + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Motor #2 + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // Motor #3 + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // Motor #4 + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + 0xFFFF +}; + +const uint16_t multiPWM[] = { + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6 + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or servo #1 (swap to servo if needed) + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 or servo #2 (swap to servo if needed) + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or #3 + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #4 or #6 + 0xFFFF +}; + +const uint16_t airPPM[] = { + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Motor #1 + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + 0xFFFF +}; + +const uint16_t airPWM[] = { + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6 + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 + PWM9 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1 + PWM10 | (MAP_TO_SERVO_OUTPUT << 8), // servo #2 + PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #3 + PWM12 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4 + 0xFFFF +}; + +const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { + { TIM2, IO_TAG(PB10), TIM_Channel_3, TIM2_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM2, 0}, // PPM + { TIM3, IO_TAG(PB1), TIM_Channel_4, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM3, 0}, // S2_IN + { TIM3, IO_TAG(PB0), TIM_Channel_3, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM3, 0}, // S3_IN + { TIM3, IO_TAG(PA7), TIM_Channel_2, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM3, 0}, // S4_IN + { TIM3, IO_TAG(PA6), TIM_Channel_1, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM3, 0}, // S5_IN + { TIM2, IO_TAG(PA5), TIM_Channel_1, TIM2_IRQn, 0, IOCFG_AF_PP, GPIO_AF_TIM2, 0}, // S6_IN + { TIM1, IO_TAG(PA10), TIM_Channel_3, TIM1_CC_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM1, 0}, // S1_OUT + { TIM2, IO_TAG(PB3), TIM_Channel_2, TIM2_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM2, 0}, // S2_OUT + { TIM4, IO_TAG(PB8), TIM_Channel_3, TIM4_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM4, 0}, // S3_OUT + { TIM4, IO_TAG(PB9), TIM_Channel_4, TIM4_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM4, 0}, // S4_OUT + { TIM5, IO_TAG(PA0), TIM_Channel_1, TIM5_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM5, 0}, // S5_OUT + { TIM5, IO_TAG(PA1), TIM_Channel_2, TIM5_IRQn, 1, IOCFG_AF_PP, GPIO_AF_TIM5, 0}, // S6_OUT +}; + + diff --git a/src/main/target/REVONANO/target.h b/src/main/target/REVONANO/target.h new file mode 100644 index 000000000..8f27a42e2 --- /dev/null +++ b/src/main/target/REVONANO/target.h @@ -0,0 +1,124 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#pragma once +#define TARGET_BOARD_IDENTIFIER "REVN" + +#define CONFIG_START_FLASH_ADDRESS (0x08060000) //0x08060000 to 0x08080000 (FLASH_Sector_7) +#define CONFIG_SERIALRX_PROVIDER 2 +#define CONFIG_BLACKBOX_DEVICE 1 +#define CONFIG_FEATURE_RX_SERIAL +#define CONFIG_FEATURE_ONESHOT125 +#define CONFIG_MSP_PORT 1 +#define CONFIG_RX_SERIAL_PORT 2 + +#define USBD_PRODUCT_STRING "Revo Nano" +#ifdef OPBL + #define USBD_SERIALNUMBER_STRING "0x8010000" +#endif + +#define LED0 PC14 +#define LED1 PC13 +#define BEEPER PC13 +#define INVERTER PC15 +#define INVERTER_USART USART2 //Sbus on USART 2 of nano. + +#define MPU9250_CS_PIN PB12 +#define MPU9250_SPI_INSTANCE SPI2 + +#define ACC +#define USE_ACC_MPU9250 +#define USE_ACC_SPI_MPU9250 +#define ACC_MPU9250_ALIGN CW270_DEG + +#define GYRO +#define USE_GYRO_MPU9250 +#define USE_GYRO_SPI_MPU9250 +#define GYRO_MPU9250_ALIGN CW270_DEG + +//#define MAG +//#define USE_MAG_HMC5883 + +#define BARO +#define USE_BARO_MS5611 + +// MPU9250 interrupts +#define USE_MPU_DATA_READY_SIGNAL +//#define ENSURE_MPU_DATA_READY_IS_LOW +#define EXTI_CALLBACK_HANDLER_COUNT 1 // MPU data ready (mag disabled) +#define MPU_INT_EXTI PA15 +#define USE_EXTI + +#define USABLE_TIMER_CHANNEL_COUNT 12 + +#define USE_VCP +#define VBUS_SENSING_PIN PA9 + +#define USE_USART1 +#define USART1_RX_PIN PB7 +#define USART1_TX_PIN PB6 + +#define USE_USART2 +#define USART2_RX_PIN PA3 +#define USART2_TX_PIN PA2 + +#define SERIAL_PORT_COUNT 3 //VCP, USART1, USART2 + +#define USE_SPI +//#define USE_SPI_DEVICE_1 +#define USE_SPI_DEVICE_2 +//#define USE_SPI_DEVICE_3 + +#define USE_I2C +#define I2C_DEVICE (I2CDEV_3) + +#define USE_ADC + +//FLEXI-IO 6 +#define CURRENT_METER_ADC_PIN PA7 +#define CURRENT_METER_ADC_CHANNEL ADC_Channel_7 + +//FLEXI-IO 7 +#define VBAT_ADC_PIN PA6 +#define VBAT_ADC_CHANNEL ADC_Channel_6 + +//FLEXI-IO 8 +#define RSSI_ADC_PIN PA5 +#define RSSI_ADC_CHANNEL ADC_Channel_5 + + +//#define SENSORS_SET (SENSOR_ACC|SENSOR_MAG) + +//#define LED_STRIP +//#define LED_STRIP_TIMER TIM5 + +#define GPS +#define BLACKBOX +#define TELEMETRY +#define SERIAL_RX +#define USE_SERVOS +#define USE_CLI + +#define TARGET_IO_PORTA 0xffff +#define TARGET_IO_PORTB 0xffff +#define TARGET_IO_PORTC 0xffff + + +#define USED_TIMERS ( TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(4) | TIM_N(5) ) + +#define TIMER_APB1_PERIPHERALS (RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5 | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB) +#define TIMER_APB2_PERIPHERALS (RCC_APB2Periph_TIM1) \ No newline at end of file diff --git a/src/main/target/REVONANO/target.mk b/src/main/target/REVONANO/target.mk new file mode 100644 index 000000000..42cce14ff --- /dev/null +++ b/src/main/target/REVONANO/target.mk @@ -0,0 +1,6 @@ +F411_TARGETS += $(TARGET) +FEATURES += VCP ONBOARDFLASH + +TARGET_SRC = \ + drivers/accgyro_spi_mpu9250.c \ + drivers/barometer_ms5611.c \ No newline at end of file