More compatibility for ADC_inputs, etc. (#716)
* Move STM32-specific ADC pinouts to ports/stm32/stm32_common.cpp * Move STM32-specific files to ports/* * setAdcChannelOverrides() * Add #ifdefs for adc_inputs (PWM_FREQ_*, PWM_PERIOD_*, ADC_*_DEVICE) * addChannel(), removeChannel() * fix tle6240 compilation * Add stm32_common.cpp to Makefile * More ports/stm32/* paths * More ports/stm32/* paths * More flexible GPIO ports * Add #ifdef for GPTDEVICE * EFI_BOARD_TEST and EFI_JOYSTICK * EFI_TLE8888 * Fix HIP9011_logic compilation * ADC_CHANNEL_SENSOR * Move ioportid_t PORTS[] to ports/* * Fix simulator
This commit is contained in:
parent
aa794255eb
commit
a3f33f3f0d
|
@ -1860,6 +1860,7 @@ extern "C" {
|
|||
void setPinConfigurationOverrides(void);
|
||||
void setSerialConfigurationOverrides(void);
|
||||
void setSdCardConfigurationOverrides(void);
|
||||
void setAdcChannelOverrides(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1865,6 +1865,7 @@ extern "C" {
|
|||
void setPinConfigurationOverrides(void);
|
||||
void setSerialConfigurationOverrides(void);
|
||||
void setSdCardConfigurationOverrides(void);
|
||||
void setAdcChannelOverrides(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -82,3 +82,5 @@ void setBoardConfigurationOverrides(void) {
|
|||
boardConfiguration->is_enabled_spi_3 = false;
|
||||
}
|
||||
|
||||
void setAdcChannelOverrides(void) {
|
||||
}
|
||||
|
|
|
@ -264,6 +264,13 @@ bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
|
|||
void boardInit(void) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Board-specific ADC channel configuration code overrides.
|
||||
* @todo Add your board-specific code, if any.
|
||||
*/
|
||||
void setAdcChannelOverrides(void) {
|
||||
}
|
||||
|
||||
|
||||
#define PROMETHEUS_LED 13
|
||||
|
||||
|
|
|
@ -1630,6 +1630,7 @@ extern "C" {
|
|||
void setPinConfigurationOverrides(void);
|
||||
void setSerialConfigurationOverrides(void);
|
||||
void setSdCardConfigurationOverrides(void);
|
||||
void setAdcChannelOverrides(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -271,3 +271,10 @@ void setSerialConfigurationOverrides(void) {
|
|||
*/
|
||||
void setSdCardConfigurationOverrides(void) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Board-specific ADC channel configuration code overrides.
|
||||
* @todo Add your board-specific code, if any.
|
||||
*/
|
||||
void setAdcChannelOverrides(void) {
|
||||
}
|
||||
|
|
|
@ -1348,6 +1348,7 @@ extern "C" {
|
|||
void setPinConfigurationOverrides(void);
|
||||
void setSerialConfigurationOverrides(void);
|
||||
void setSdCardConfigurationOverrides(void);
|
||||
void setAdcChannelOverrides(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -371,4 +371,7 @@
|
|||
*/
|
||||
#define INTERMEDIATE_LOGGING_BUFFER_SIZE 2000
|
||||
|
||||
#define EFI_BOARD_TEST TRUE
|
||||
#define EFI_JOYSTICK TRUE
|
||||
|
||||
#endif /* EFIFEATURES_H_ */
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* @author Andrey Belomutskiy, (c) 2012-2019
|
||||
*/
|
||||
|
||||
#include "global.h"
|
||||
#include "HIP9011_logic.h"
|
||||
|
||||
EXTERN_ENGINE;
|
||||
|
|
|
@ -53,12 +53,15 @@ AdcDevice::AdcDevice(ADCConversionGroup* hwConfig) {
|
|||
memset(internalAdcIndexByHardwareIndex, 0xFFFFFFFF, sizeof(internalAdcIndexByHardwareIndex));
|
||||
}
|
||||
|
||||
#if !defined(PWM_FREQ_SLOW) || !defined(PWM_PERIOD_SLOW)
|
||||
// todo: migrate from hardware timer to software ADC conversion triggering
|
||||
// todo: I guess we would have to use ChibiOS timer and not our own timer because
|
||||
// todo: adcStartConversionI requires OS lock. currently slow ADC is 20Hz
|
||||
#define PWM_FREQ_SLOW 5000 /* PWM clock frequency. I wonder what does this setting mean? */
|
||||
#define PWM_PERIOD_SLOW 250 /* PWM period (in PWM ticks). */
|
||||
#endif /* PWM_FREQ_SLOW PWM_PERIOD_SLOW */
|
||||
|
||||
#if !defined(PWM_FREQ_FAST) || !defined(PWM_PERIOD_FAST)
|
||||
/**
|
||||
* 8000 RPM is 133Hz
|
||||
* If we want to sample MAP once per 5 degrees we need 133Hz * (360 / 5) = 9576Hz of fast ADC
|
||||
|
@ -67,12 +70,17 @@ AdcDevice::AdcDevice(ADCConversionGroup* hwConfig) {
|
|||
// todo: continues mode. todo: look into our options
|
||||
#define PWM_FREQ_FAST 100000 /* PWM clock frequency. I wonder what does this setting mean? */
|
||||
#define PWM_PERIOD_FAST 10 /* PWM period (in PWM ticks). */
|
||||
#endif /* PWM_FREQ_FAST PWM_PERIOD_FAST */
|
||||
|
||||
// is there a reason to have this configurable?
|
||||
#ifndef ADC_SLOW_DEVICE
|
||||
#define ADC_SLOW_DEVICE ADCD1
|
||||
#endif /* ADC_SLOW_DEVICE */
|
||||
|
||||
// is there a reason to have this configurable?
|
||||
#ifndef ADC_FAST_DEVICE
|
||||
#define ADC_FAST_DEVICE ADCD2
|
||||
#endif /* ADC_FAST_DEVICE */
|
||||
|
||||
static volatile int slowAdcCounter = 0;
|
||||
static LoggingWithStorage logger("ADC");
|
||||
|
@ -235,12 +243,16 @@ static void pwmpcb_fast(PWMDriver *pwmp) {
|
|||
#endif /* HAL_USE_PWM */
|
||||
|
||||
float getMCUInternalTemperature(void) {
|
||||
#ifdef ADC_CHANNEL_SENSOR
|
||||
float TemperatureValue = adcToVolts(slowAdc.getAdcValueByHwChannel(ADC_CHANNEL_SENSOR));
|
||||
TemperatureValue -= 0.760; // Subtract the reference voltage at 25°C
|
||||
TemperatureValue /= .0025; // Divide by slope 2.5mV
|
||||
|
||||
TemperatureValue += 25.0; // Add the 25°C
|
||||
return TemperatureValue;
|
||||
#else
|
||||
return 0;
|
||||
#endif /* ADC_CHANNEL_SENSOR */
|
||||
}
|
||||
|
||||
int getInternalAdcValue(const char *msg, adc_channel_e hwChannel) {
|
||||
|
@ -290,128 +302,6 @@ static void initAdcPin(brain_pin_e pin, const char *msg) {
|
|||
efiSetPadMode("adc input", pin, PAL_MODE_INPUT_ANALOG);
|
||||
}
|
||||
|
||||
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case EFI_ADC_0:
|
||||
return GPIOA_0;
|
||||
case EFI_ADC_1:
|
||||
return GPIOA_1;
|
||||
case EFI_ADC_2:
|
||||
return GPIOA_2;
|
||||
case EFI_ADC_3:
|
||||
return GPIOA_3;
|
||||
case EFI_ADC_4:
|
||||
return GPIOA_4;
|
||||
case EFI_ADC_5:
|
||||
return GPIOA_5;
|
||||
case EFI_ADC_6:
|
||||
return GPIOA_6;
|
||||
case EFI_ADC_7:
|
||||
return GPIOA_7;
|
||||
case EFI_ADC_8:
|
||||
return GPIOB_0;
|
||||
case EFI_ADC_9:
|
||||
return GPIOB_1;
|
||||
case EFI_ADC_10:
|
||||
return GPIOC_0;
|
||||
case EFI_ADC_11:
|
||||
return GPIOC_1;
|
||||
case EFI_ADC_12:
|
||||
return GPIOC_2;
|
||||
case EFI_ADC_13:
|
||||
return GPIOC_3;
|
||||
case EFI_ADC_14:
|
||||
return GPIOC_4;
|
||||
case EFI_ADC_15:
|
||||
return GPIOC_5;
|
||||
default:
|
||||
firmwareError(CUSTOM_ERR_ADC_UNKNOWN_CHANNEL, "Unknown hw channel %d [%s]", hwChannel, msg);
|
||||
return GPIO_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
adc_channel_e getAdcChannel(brain_pin_e pin) {
|
||||
switch (pin) {
|
||||
case GPIOA_0:
|
||||
return EFI_ADC_0;
|
||||
case GPIOA_1:
|
||||
return EFI_ADC_1;
|
||||
case GPIOA_2:
|
||||
return EFI_ADC_2;
|
||||
case GPIOA_3:
|
||||
return EFI_ADC_3;
|
||||
case GPIOA_4:
|
||||
return EFI_ADC_4;
|
||||
case GPIOA_5:
|
||||
return EFI_ADC_5;
|
||||
case GPIOA_6:
|
||||
return EFI_ADC_6;
|
||||
case GPIOA_7:
|
||||
return EFI_ADC_7;
|
||||
case GPIOB_0:
|
||||
return EFI_ADC_8;
|
||||
case GPIOB_1:
|
||||
return EFI_ADC_9;
|
||||
case GPIOC_0:
|
||||
return EFI_ADC_10;
|
||||
case GPIOC_1:
|
||||
return EFI_ADC_11;
|
||||
case GPIOC_2:
|
||||
return EFI_ADC_12;
|
||||
case GPIOC_3:
|
||||
return EFI_ADC_13;
|
||||
case GPIOC_4:
|
||||
return EFI_ADC_14;
|
||||
case GPIOC_5:
|
||||
return EFI_ADC_15;
|
||||
default:
|
||||
return EFI_ADC_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||
ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case ADC_CHANNEL_IN0:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN1:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN2:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN3:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN4:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN5:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN6:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN7:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN8:
|
||||
return GPIOB;
|
||||
case ADC_CHANNEL_IN9:
|
||||
return GPIOB;
|
||||
case ADC_CHANNEL_IN10:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN11:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN12:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN13:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN14:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN15:
|
||||
return GPIOC;
|
||||
default:
|
||||
firmwareError(CUSTOM_ERR_ADC_UNKNOWN_CHANNEL, "Unknown hw channel %d [%s]", hwChannel, msg);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
const char * getAdcMode(adc_channel_e hwChannel) {
|
||||
if (slowAdc.isHwUsed(hwChannel)) {
|
||||
return "slow";
|
||||
|
@ -422,49 +312,6 @@ const char * getAdcMode(adc_channel_e hwChannel) {
|
|||
return "INACTIVE - need restart";
|
||||
}
|
||||
|
||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||
int getAdcChannelPin(adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case ADC_CHANNEL_IN0:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN1:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN2:
|
||||
return 2;
|
||||
case ADC_CHANNEL_IN3:
|
||||
return 3;
|
||||
case ADC_CHANNEL_IN4:
|
||||
return 4;
|
||||
case ADC_CHANNEL_IN5:
|
||||
return 5;
|
||||
case ADC_CHANNEL_IN6:
|
||||
return 6;
|
||||
case ADC_CHANNEL_IN7:
|
||||
return 7;
|
||||
case ADC_CHANNEL_IN8:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN9:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN10:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN11:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN12:
|
||||
return 2;
|
||||
case ADC_CHANNEL_IN13:
|
||||
return 3;
|
||||
case ADC_CHANNEL_IN14:
|
||||
return 4;
|
||||
case ADC_CHANNEL_IN15:
|
||||
return 5;
|
||||
default:
|
||||
// todo: better error handling, that's input parameter validation
|
||||
firmwareError(CUSTOM_ERR_ADC_CHANNEL, "Unknown hw channel %d", hwChannel);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static void initAdcHwChannel(adc_channel_e hwChannel) {
|
||||
brain_pin_e pin = getAdcChannelBrainPin("adc", hwChannel);
|
||||
|
||||
|
@ -597,7 +444,7 @@ static void adc_callback_slow(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
|
|||
|
||||
static char errorMsgBuff[10];
|
||||
|
||||
static void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode) {
|
||||
void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode) {
|
||||
if (setting == EFI_ADC_NONE) {
|
||||
return;
|
||||
}
|
||||
|
@ -610,6 +457,13 @@ static void addChannel(const char *name, adc_channel_e setting, adc_channel_mode
|
|||
adcHwChannelEnabled[setting] = mode;
|
||||
}
|
||||
|
||||
void removeChannel(const char *name, adc_channel_e setting) {
|
||||
if (setting == EFI_ADC_NONE) {
|
||||
return;
|
||||
}
|
||||
adcHwChannelEnabled[setting] = ADC_OFF;
|
||||
}
|
||||
|
||||
static void configureInputs(void) {
|
||||
memset(adcHwChannelEnabled, 0, sizeof(adcHwChannelEnabled));
|
||||
memset(adcHwChannelUsage, 0, sizeof(adcHwChannelUsage));
|
||||
|
@ -639,6 +493,8 @@ static void configureInputs(void) {
|
|||
for (int i = 0; i < FSIO_ANALOG_INPUT_COUNT ; i++) {
|
||||
addChannel("FSIOadc", engineConfiguration->fsioAdc[i], ADC_SLOW);
|
||||
}
|
||||
|
||||
setAdcChannelOverrides();
|
||||
}
|
||||
|
||||
void initAdcInputs(bool boardTestMode) {
|
||||
|
@ -694,23 +550,6 @@ void initAdcInputs(bool boardTestMode) {
|
|||
#endif /* HAL_USE_PWM */
|
||||
}
|
||||
|
||||
// ADC_CHANNEL_IN0 // PA0
|
||||
// ADC_CHANNEL_IN1 // PA1
|
||||
// ADC_CHANNEL_IN2 // PA2
|
||||
// ADC_CHANNEL_IN3 // PA3
|
||||
// ADC_CHANNEL_IN4 // PA4
|
||||
// ADC_CHANNEL_IN5 // PA5 - this is also TIM2_CH1
|
||||
// ADC_CHANNEL_IN6 // PA6
|
||||
// ADC_CHANNEL_IN7 // PA7
|
||||
// ADC_CHANNEL_IN8 // PB0
|
||||
// ADC_CHANNEL_IN9 // PB1
|
||||
// ADC_CHANNEL_IN10 // PC0
|
||||
// ADC_CHANNEL_IN11 // PC1
|
||||
// ADC_CHANNEL_IN12 // PC2
|
||||
// ADC_CHANNEL_IN13 // PC3
|
||||
// ADC_CHANNEL_IN14 // PC4
|
||||
// ADC_CHANNEL_IN15 // PC5
|
||||
|
||||
//if(slowAdcChannelCount > ADC_MAX_SLOW_CHANNELS_COUNT) // todo: do we need this logic? do we need this check
|
||||
|
||||
addConsoleActionI("adc", (VoidInt) printAdcValue);
|
||||
|
|
|
@ -38,6 +38,9 @@ void printFullAdcReportIfNeeded(Logging *log);
|
|||
int getInternalAdcValue(const char *msg, adc_channel_e index);
|
||||
float getMCUInternalTemperature(void);
|
||||
|
||||
void addChannel(const char *name, adc_channel_e setting, adc_channel_mode_e mode);
|
||||
void removeChannel(const char *name, adc_channel_e setting);
|
||||
|
||||
// max(ADC_BUF_DEPTH_SLOW, ADC_BUF_DEPTH_FAST)
|
||||
#define MAX_ADC_GRP_BUF_DEPTH 8
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include "global.h"
|
||||
|
||||
#if EFI_PROD_CODE
|
||||
#if EFI_BOARD_TEST
|
||||
#include "engine.h"
|
||||
#include "board_test.h"
|
||||
#include "pin_repository.h"
|
||||
|
@ -231,4 +231,4 @@ void initBoardTest(void) {
|
|||
chThdSleepSeconds(1);
|
||||
}
|
||||
}
|
||||
#endif /* EFI_PROD_CODE */
|
||||
#endif /* EFI_BOARD_TEST */
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
* @author Andrey Gusakov, (c) 2019
|
||||
*/
|
||||
|
||||
#include <hal.h>
|
||||
#include "global.h"
|
||||
#include "gpio/gpio_ext.h"
|
||||
#include "gpio/tle6240.h"
|
||||
#include "pin_repository.h"
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#include "tle8888.h"
|
||||
#include "hardware.h"
|
||||
|
||||
#if EFI_TLE8888 || defined(__DOXYGEN__)
|
||||
|
||||
/**
|
||||
* 15.2 SPI Frame Definition
|
||||
*
|
||||
|
@ -80,3 +82,5 @@ void initTle8888(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
|
|||
|
||||
spiUnselect(driver);
|
||||
}
|
||||
|
||||
#endif /* EFI_TLE8888 */
|
||||
|
|
|
@ -34,18 +34,21 @@ HW_LAYER_EMS_CPP = $(HW_LAYER_EGT_CPP) \
|
|||
$(PROJECT_DIR)/hw_layer/backup_ram.cpp
|
||||
|
||||
ifeq ($(PROJECT_CPU),ST_STM32F7)
|
||||
HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/stm32f7/stm32f7xx_hal_flash.c \
|
||||
$(PROJECT_DIR)/hw_layer/stm32f7/stm32f7xx_hal_flash_ex.c
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/stm32f7/mpu_util.cpp
|
||||
HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f7/stm32f7xx_hal_flash.c \
|
||||
$(PROJECT_DIR)/hw_layer/ports/stm32/stm32f7/stm32f7xx_hal_flash_ex.c
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f7/mpu_util.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(PROJECT_CPU),ST_STM32F4)
|
||||
HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/stm32f4/stm32f4xx_hal_flash.c \
|
||||
$(PROJECT_DIR)/hw_layer/stm32f4/stm32f4xx_hal_flash_ex.c
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/stm32f4/mpu_util.cpp
|
||||
HW_LAYER_EMS += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f4/stm32f4xx_hal_flash.c \
|
||||
$(PROJECT_DIR)/hw_layer/ports/stm32/stm32f4/stm32f4xx_hal_flash_ex.c
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f4/mpu_util.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.cpp
|
||||
endif
|
||||
|
||||
ifeq ($(PROJECT_CPU),ST_STM32F1)
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/stm32f1/mpu_util.cpp
|
||||
HW_LAYER_EMS_CPP += $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f1/mpu_util.cpp \
|
||||
$(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.cpp
|
||||
endif
|
||||
|
|
@ -27,12 +27,7 @@ EXTERN_ENGINE;
|
|||
static LoggingWithStorage logger("io_pins");
|
||||
|
||||
extern EnginePins enginePins;
|
||||
|
||||
#if defined(STM32F4XX) || defined(STM32F7XX)
|
||||
static ioportid_t PORTS[] = { GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH };
|
||||
#else
|
||||
static ioportid_t PORTS[] = { GPIOA, GPIOB, GPIOC, GPIOD, GPIOF};
|
||||
#endif /* defined(STM32F4XX) || defined(STM32F7XX) */
|
||||
extern ioportid_t PORTS[];
|
||||
|
||||
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin) {
|
||||
if (brainPin == GPIO_UNASSIGNED || brainPin == GPIO_INVALID)
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
#include "engine.h"
|
||||
|
||||
#if (HAL_USE_PAL && EFI_PROD_CODE) || defined(__DOXYGEN__)
|
||||
#if (HAL_USE_PAL && EFI_JOYSTICK) || defined(__DOXYGEN__)
|
||||
#include "joystick.h"
|
||||
#include "pin_repository.h"
|
||||
#include "digital_input_exti.h"
|
||||
|
@ -117,4 +117,4 @@ void initJoystick(Logging *shared) {
|
|||
efiSetPadMode("joy D", CONFIGB(joystickDPin), PAL_MODE_INPUT_PULLUP);
|
||||
}
|
||||
|
||||
#endif /* HAL_USE_PAL && EFI_PROD_CODE */
|
||||
#endif /* HAL_USE_PAL && EFI_JOYSTICK */
|
||||
|
|
|
@ -29,7 +29,9 @@
|
|||
uint32_t maxPrecisionCallbackDuration = 0;
|
||||
|
||||
// must be one of 32 bit times
|
||||
#ifndef GPTDEVICE
|
||||
#define GPTDEVICE GPTD5
|
||||
#endif /* GPTDEVICE */
|
||||
|
||||
static volatile efitick_t lastSetTimerTimeNt;
|
||||
static int lastSetTimerValue;
|
||||
|
|
|
@ -20,10 +20,26 @@ static ioportid_t ports[] = {GPIOA,
|
|||
GPIOB,
|
||||
GPIOC,
|
||||
GPIOD,
|
||||
#if STM32_HAS_GPIOE
|
||||
GPIOE,
|
||||
#else
|
||||
nullptr,
|
||||
#endif /* STM32_HAS_GPIOE */
|
||||
#if STM32_HAS_GPIOF
|
||||
GPIOF,
|
||||
#else
|
||||
nullptr,
|
||||
#endif /* STM32_HAS_GPIOF */
|
||||
#if STM32_HAS_GPIOG
|
||||
GPIOG,
|
||||
#else
|
||||
nullptr,
|
||||
#endif /* STM32_HAS_GPIOG */
|
||||
#if STM32_HAS_GPIOH
|
||||
GPIOH,
|
||||
#else
|
||||
nullptr,
|
||||
#endif /* STM32_HAS_GPIOH */
|
||||
};
|
||||
|
||||
#define PIN_REPO_SIZE (sizeof(ports) / sizeof(ports[0])) * PORT_SIZE
|
||||
|
@ -49,20 +65,22 @@ static int getPortIndex(ioportid_t port) {
|
|||
return 2;
|
||||
if (port == GPIOD)
|
||||
return 3;
|
||||
#if defined(STM32F4XX) || defined(STM32F7XX)
|
||||
#if STM32_HAS_GPIOE
|
||||
if (port == GPIOE)
|
||||
return 4;
|
||||
#endif /* defined(STM32F4XX) */
|
||||
#endif /* STM32_HAS_GPIOE */
|
||||
#if STM32_HAS_GPIOF
|
||||
if (port == GPIOF)
|
||||
return 5;
|
||||
#if defined(STM32F4XX) || defined(STM32F7XX)
|
||||
#endif /* STM32_HAS_GPIOF */
|
||||
#if STM32_HAS_GPIOG
|
||||
if (port == GPIOG)
|
||||
return 6;
|
||||
#endif /* defined(STM32F4XX) */
|
||||
#if defined(STM32F4XX) || defined(STM32F7XX)
|
||||
#endif /* STM32_HAS_GPIOG */
|
||||
#if STM32_HAS_GPIOH
|
||||
if (port == GPIOH)
|
||||
return 7;
|
||||
#endif /* defined(STM32F4XX) */
|
||||
#endif /* STM32_HAS_GPIOH */
|
||||
firmwareError(CUSTOM_ERR_UNKNOWN_PORT, "unknown port");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,204 @@
|
|||
/**
|
||||
* @file stm32_common.cpp
|
||||
* @brief Low level common STM32 code
|
||||
*
|
||||
* @date Mar 28, 2019
|
||||
* @author Andrey Belomutskiy, (c) 2012-2019
|
||||
*/
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#if EFI_PROD_CODE
|
||||
extern ioportid_t PORTS[];
|
||||
#if defined(STM32F4XX) || defined(STM32F7XX)
|
||||
ioportid_t PORTS[] = { GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH };
|
||||
#else
|
||||
ioportid_t PORTS[] = { GPIOA, GPIOB, GPIOC, GPIOD, GPIOF};
|
||||
#endif /* defined(STM32F4XX) || defined(STM32F7XX) */
|
||||
#endif /* EFI_PROD_CODE */
|
||||
|
||||
#if HAL_USE_ADC || defined(__DOXYGEN__)
|
||||
|
||||
// ADC_CHANNEL_IN0 // PA0
|
||||
// ADC_CHANNEL_IN1 // PA1
|
||||
// ADC_CHANNEL_IN2 // PA2
|
||||
// ADC_CHANNEL_IN3 // PA3
|
||||
// ADC_CHANNEL_IN4 // PA4
|
||||
// ADC_CHANNEL_IN5 // PA5 - this is also TIM2_CH1
|
||||
// ADC_CHANNEL_IN6 // PA6
|
||||
// ADC_CHANNEL_IN7 // PA7
|
||||
// ADC_CHANNEL_IN8 // PB0
|
||||
// ADC_CHANNEL_IN9 // PB1
|
||||
// ADC_CHANNEL_IN10 // PC0
|
||||
// ADC_CHANNEL_IN11 // PC1
|
||||
// ADC_CHANNEL_IN12 // PC2
|
||||
// ADC_CHANNEL_IN13 // PC3
|
||||
// ADC_CHANNEL_IN14 // PC4
|
||||
// ADC_CHANNEL_IN15 // PC5
|
||||
|
||||
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case EFI_ADC_0:
|
||||
return GPIOA_0;
|
||||
case EFI_ADC_1:
|
||||
return GPIOA_1;
|
||||
case EFI_ADC_2:
|
||||
return GPIOA_2;
|
||||
case EFI_ADC_3:
|
||||
return GPIOA_3;
|
||||
case EFI_ADC_4:
|
||||
return GPIOA_4;
|
||||
case EFI_ADC_5:
|
||||
return GPIOA_5;
|
||||
case EFI_ADC_6:
|
||||
return GPIOA_6;
|
||||
case EFI_ADC_7:
|
||||
return GPIOA_7;
|
||||
case EFI_ADC_8:
|
||||
return GPIOB_0;
|
||||
case EFI_ADC_9:
|
||||
return GPIOB_1;
|
||||
case EFI_ADC_10:
|
||||
return GPIOC_0;
|
||||
case EFI_ADC_11:
|
||||
return GPIOC_1;
|
||||
case EFI_ADC_12:
|
||||
return GPIOC_2;
|
||||
case EFI_ADC_13:
|
||||
return GPIOC_3;
|
||||
case EFI_ADC_14:
|
||||
return GPIOC_4;
|
||||
case EFI_ADC_15:
|
||||
return GPIOC_5;
|
||||
default:
|
||||
firmwareError(CUSTOM_ERR_ADC_UNKNOWN_CHANNEL, "Unknown hw channel %d [%s]", hwChannel, msg);
|
||||
return GPIO_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
adc_channel_e getAdcChannel(brain_pin_e pin) {
|
||||
switch (pin) {
|
||||
case GPIOA_0:
|
||||
return EFI_ADC_0;
|
||||
case GPIOA_1:
|
||||
return EFI_ADC_1;
|
||||
case GPIOA_2:
|
||||
return EFI_ADC_2;
|
||||
case GPIOA_3:
|
||||
return EFI_ADC_3;
|
||||
case GPIOA_4:
|
||||
return EFI_ADC_4;
|
||||
case GPIOA_5:
|
||||
return EFI_ADC_5;
|
||||
case GPIOA_6:
|
||||
return EFI_ADC_6;
|
||||
case GPIOA_7:
|
||||
return EFI_ADC_7;
|
||||
case GPIOB_0:
|
||||
return EFI_ADC_8;
|
||||
case GPIOB_1:
|
||||
return EFI_ADC_9;
|
||||
case GPIOC_0:
|
||||
return EFI_ADC_10;
|
||||
case GPIOC_1:
|
||||
return EFI_ADC_11;
|
||||
case GPIOC_2:
|
||||
return EFI_ADC_12;
|
||||
case GPIOC_3:
|
||||
return EFI_ADC_13;
|
||||
case GPIOC_4:
|
||||
return EFI_ADC_14;
|
||||
case GPIOC_5:
|
||||
return EFI_ADC_15;
|
||||
default:
|
||||
return EFI_ADC_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||
ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case ADC_CHANNEL_IN0:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN1:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN2:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN3:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN4:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN5:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN6:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN7:
|
||||
return GPIOA;
|
||||
case ADC_CHANNEL_IN8:
|
||||
return GPIOB;
|
||||
case ADC_CHANNEL_IN9:
|
||||
return GPIOB;
|
||||
case ADC_CHANNEL_IN10:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN11:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN12:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN13:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN14:
|
||||
return GPIOC;
|
||||
case ADC_CHANNEL_IN15:
|
||||
return GPIOC;
|
||||
default:
|
||||
firmwareError(CUSTOM_ERR_ADC_UNKNOWN_CHANNEL, "Unknown hw channel %d [%s]", hwChannel, msg);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||
int getAdcChannelPin(adc_channel_e hwChannel) {
|
||||
// todo: replace this with an array :)
|
||||
switch (hwChannel) {
|
||||
case ADC_CHANNEL_IN0:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN1:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN2:
|
||||
return 2;
|
||||
case ADC_CHANNEL_IN3:
|
||||
return 3;
|
||||
case ADC_CHANNEL_IN4:
|
||||
return 4;
|
||||
case ADC_CHANNEL_IN5:
|
||||
return 5;
|
||||
case ADC_CHANNEL_IN6:
|
||||
return 6;
|
||||
case ADC_CHANNEL_IN7:
|
||||
return 7;
|
||||
case ADC_CHANNEL_IN8:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN9:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN10:
|
||||
return 0;
|
||||
case ADC_CHANNEL_IN11:
|
||||
return 1;
|
||||
case ADC_CHANNEL_IN12:
|
||||
return 2;
|
||||
case ADC_CHANNEL_IN13:
|
||||
return 3;
|
||||
case ADC_CHANNEL_IN14:
|
||||
return 4;
|
||||
case ADC_CHANNEL_IN15:
|
||||
return 5;
|
||||
default:
|
||||
// todo: better error handling, that's input parameter validation
|
||||
firmwareError(CUSTOM_ERR_ADC_CHANNEL, "Unknown hw channel %d", hwChannel);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAL_USE_ADC */
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f0/mpu_util.cpp
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f4/mpu_util.cpp
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/ports/stm32/stm32f7/mpu_util.cpp
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/stm32f0/mpu_util.cpp
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/stm32f4/mpu_util.cpp
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
|
||||
HW_STM32_SRC_CPP = $(PROJECT_DIR)/hw_layer/stm32f7/mpu_util.cpp
|
||||
|
|
@ -21,18 +21,18 @@ DDEFS += -D$(PROJECT_CPU)
|
|||
ifeq ($(PROJECT_CPU),ST_STM32F7)
|
||||
CPU_STARTUP = startup_stm32f7xx.mk
|
||||
CPU_PLATFORM = STM32F7xx/platform.mk
|
||||
CPU_HWLAYER = stm32f7
|
||||
CPU_HWLAYER = ports/stm32/stm32f7
|
||||
endif
|
||||
|
||||
ifeq ($(PROJECT_CPU),ST_STM32F4)
|
||||
CPU_STARTUP = startup_stm32f4xx.mk
|
||||
CPU_PLATFORM = STM32F4xx/platform.mk
|
||||
CPU_HWLAYER = stm32f4
|
||||
CPU_HWLAYER = ports/stm32/stm32f4
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(PROJECT_CPU),ST_STM32F1)
|
||||
CPU_STARTUP = startup_stm32f1xx.mk
|
||||
CPU_PLATFORM = STM32F1xx/platform.mk
|
||||
CPU_HWLAYER = stm32f1
|
||||
CPU_HWLAYER = ports/stm32/stm32f1
|
||||
endif
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
#define EFI_IDLE_INCREMENTAL_PID_CIC FALSE
|
||||
#define EFI_MAIN_RELAY_CONTROL FALSE
|
||||
#define EFI_HIP_9011 TRUE
|
||||
#define EFI_CJ125 TRUE
|
||||
#define EFI_CJ125 FALSE
|
||||
#define EFI_CAN_SUPPORT FALSE
|
||||
#define EFI_MAX_31855 FALSE
|
||||
#define EFI_TLE8888 FALSE
|
||||
|
@ -115,4 +115,8 @@
|
|||
|
||||
#define EFI_UNIT_TEST FALSE
|
||||
|
||||
#define EFI_BOARD_TEST FALSE
|
||||
#define EFI_JOYSTICK FALSE
|
||||
|
||||
|
||||
#endif /* EFIFEATURES_H_ */
|
||||
|
|
|
@ -55,4 +55,8 @@
|
|||
|
||||
#define BOARD_EXT_GPIOCHIPS 3
|
||||
|
||||
#define EFI_BOARD_TEST FALSE
|
||||
#define EFI_JOYSTICK FALSE
|
||||
|
||||
|
||||
#endif /* EFIFEATURES_H_ */
|
||||
|
|
Loading…
Reference in New Issue