at32: at32_common: reuse some parts from STM32
This is temporally, some parts are quite different and need rework
This commit is contained in:
parent
5a11a2a2b4
commit
4634a741c2
|
@ -54,15 +54,6 @@ typedef enum {
|
||||||
adc_channel_mode_e getAdcMode(adc_channel_e hwChannel);
|
adc_channel_mode_e getAdcMode(adc_channel_e hwChannel);
|
||||||
void initAdcInputs();
|
void initAdcInputs();
|
||||||
|
|
||||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
|
||||||
int getAdcChannelPin(adc_channel_e hwChannel);
|
|
||||||
|
|
||||||
// deprecated - migrate to 'getAdcChannelBrainPin'
|
|
||||||
ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel);
|
|
||||||
|
|
||||||
adc_channel_e getAdcChannel(brain_pin_e pin);
|
|
||||||
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel);
|
|
||||||
|
|
||||||
// wait until at least 1 slowADC sampling is complete
|
// wait until at least 1 slowADC sampling is complete
|
||||||
void waitForSlowAdc(uint32_t lastAdcCounter = 0);
|
void waitForSlowAdc(uint32_t lastAdcCounter = 0);
|
||||||
// get a number of completed slowADC samples
|
// get a number of completed slowADC samples
|
||||||
|
|
|
@ -50,7 +50,7 @@ int at32GetMcuType(uint32_t id, const char **pn, const char **package, uint32_t
|
||||||
{ 0x70083257, "AT32F437RCT7", 256, "LQFP64" },
|
{ 0x70083257, "AT32F437RCT7", 256, "LQFP64" },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < efi::size(at32f43x_types); i++) {
|
for (size_t i = 0; i < efi::size(at32f43x_types); i++) {
|
||||||
if (id == at32f43x_types[i].uid) {
|
if (id == at32f43x_types[i].uid) {
|
||||||
if (pn)
|
if (pn)
|
||||||
*pn = at32f43x_types[i].pn;
|
*pn = at32f43x_types[i].pn;
|
||||||
|
@ -93,3 +93,78 @@ int at32GetRamSizeKb(void)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if EFI_PROD_CODE
|
||||||
|
|
||||||
|
static void reset_and_jump(void) {
|
||||||
|
// and now reboot
|
||||||
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void jump_to_bootloader() {
|
||||||
|
// leave DFU breadcrumb which assembly startup code would check, see [rusefi][DFU] section in assembly code
|
||||||
|
|
||||||
|
*((unsigned long *)0x2001FFF0) = 0xDEADBEEF; // End of RAM
|
||||||
|
|
||||||
|
reset_and_jump();
|
||||||
|
}
|
||||||
|
|
||||||
|
void jump_to_openblt() {
|
||||||
|
#if EFI_USE_OPENBLT
|
||||||
|
/* safe to call on already inited shares area */
|
||||||
|
SharedParamsInit();
|
||||||
|
/* Store sing to stay in OpenBLT */
|
||||||
|
SharedParamsWriteByIndex(0, 0x01);
|
||||||
|
|
||||||
|
reset_and_jump();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
BOR_Level_t BOR_Get(void) {
|
||||||
|
/* TODO: Artery */
|
||||||
|
/* Fake */
|
||||||
|
return BOR_Level_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOR_Result_t BOR_Set(BOR_Level_t BORValue) {
|
||||||
|
/* NOP */
|
||||||
|
return BOR_Result_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
void baseMCUInit(void) {
|
||||||
|
// looks like this holds a random value on start? Let's set a nice clean zero
|
||||||
|
DWT->CYCCNT = 0;
|
||||||
|
|
||||||
|
BOR_Set(BOR_Level_1); // one step above default value
|
||||||
|
}
|
||||||
|
|
||||||
|
extern uint32_t __main_stack_base__;
|
||||||
|
|
||||||
|
typedef struct port_intctx intctx_t;
|
||||||
|
|
||||||
|
EXTERNC int getRemainingStack(thread_t *otp) {
|
||||||
|
#if CH_DBG_ENABLE_STACK_CHECK
|
||||||
|
// this would dismiss coverity warning - see http://rusefi.com/forum/viewtopic.php?f=5&t=655
|
||||||
|
// coverity[uninit_use]
|
||||||
|
register intctx_t *r13 asm ("r13");
|
||||||
|
otp->activeStack = r13;
|
||||||
|
|
||||||
|
int remainingStack;
|
||||||
|
if (ch.dbg.isr_cnt > 0) {
|
||||||
|
// ISR context
|
||||||
|
remainingStack = (int)(r13 - 1) - (int)&__main_stack_base__;
|
||||||
|
} else {
|
||||||
|
remainingStack = (int)(r13 - 1) - (int)otp->wabase;
|
||||||
|
}
|
||||||
|
otp->remainingStack = remainingStack;
|
||||||
|
return remainingStack;
|
||||||
|
#else
|
||||||
|
UNUSED(otp);
|
||||||
|
return 99999;
|
||||||
|
#endif /* CH_DBG_ENABLE_STACK_CHECK */
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) void boardPrepareForStandby() {
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* EFI_PROD_CODE */
|
||||||
|
|
|
@ -3,3 +3,33 @@ HW_AT32_PORT_DIR = $(PROJECT_DIR)/hw_layer/ports/at32
|
||||||
HW_LAYER_PORT_CPP += \
|
HW_LAYER_PORT_CPP += \
|
||||||
$(HW_AT32_PORT_DIR)/at32_common.cpp \
|
$(HW_AT32_PORT_DIR)/at32_common.cpp \
|
||||||
$(HW_AT32_PORT_DIR)/at32f4/mpu_util.cpp
|
$(HW_AT32_PORT_DIR)/at32f4/mpu_util.cpp
|
||||||
|
|
||||||
|
HW_INC += \
|
||||||
|
$(HW_AT32_PORT_DIR)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Use some stuff from STM32
|
||||||
|
#
|
||||||
|
|
||||||
|
HW_STM32_PORT_DIR = $(PROJECT_DIR)/hw_layer/ports/stm32
|
||||||
|
|
||||||
|
HW_LAYER_PORT_CPP += \
|
||||||
|
$(HW_STM32_PORT_DIR)/serial_over_usb/usbconsole.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/serial_over_usb/usbcfg.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_pins.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_adc.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_can.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_pwm.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_serial.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_spi.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/stm32_icu.cpp \
|
||||||
|
$(HW_STM32_PORT_DIR)/microsecond_timer_stm32.cpp
|
||||||
|
|
||||||
|
#RUSEFIASM = \
|
||||||
|
# $(HW_STM32_PORT_DIR)/rusEfiStartup.S
|
||||||
|
|
||||||
|
HW_STM32_PORT_DIR = $(PROJECT_DIR)/hw_layer/ports/stm32
|
||||||
|
|
||||||
|
HW_INC += \
|
||||||
|
$(HW_STM32_PORT_DIR) \
|
||||||
|
$(HW_STM32_PORT_DIR)/serial_over_usb
|
||||||
|
|
|
@ -21,6 +21,15 @@ bool isStm32F42x();
|
||||||
|
|
||||||
// ADC
|
// ADC
|
||||||
#if HAL_USE_ADC
|
#if HAL_USE_ADC
|
||||||
|
|
||||||
|
adc_channel_e getAdcChannel(brain_pin_e pin);
|
||||||
|
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel);
|
||||||
|
|
||||||
|
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||||
|
ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel);
|
||||||
|
// deprecated - migrate to 'getAdcChannelBrainPin'
|
||||||
|
int getAdcChannelPin(adc_channel_e hwChannel);
|
||||||
|
|
||||||
void portInitAdc();
|
void portInitAdc();
|
||||||
float getMcuTemperature();
|
float getMcuTemperature();
|
||||||
// Convert all slow ADC inputs. Returns true if the conversion succeeded, false if a failure occured.
|
// Convert all slow ADC inputs. Returns true if the conversion succeeded, false if a failure occured.
|
||||||
|
@ -34,8 +43,11 @@ bool isValidCanRxPin(brain_pin_e pin);
|
||||||
CANDriver* detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx);
|
CANDriver* detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx);
|
||||||
#endif // HAL_USE_CAN
|
#endif // HAL_USE_CAN
|
||||||
|
|
||||||
|
// Serial
|
||||||
|
#if EFI_AUX_SERIAL
|
||||||
bool isValidSerialTxPin(brain_pin_e pin);
|
bool isValidSerialTxPin(brain_pin_e pin);
|
||||||
bool isValidSerialRxPin(brain_pin_e pin);
|
bool isValidSerialRxPin(brain_pin_e pin);
|
||||||
|
#endif //EFI_AUX_SERIAL
|
||||||
|
|
||||||
// SPI
|
// SPI
|
||||||
#if HAL_USE_SPI
|
#if HAL_USE_SPI
|
||||||
|
|
|
@ -67,18 +67,6 @@ void jump_to_openblt() {
|
||||||
|
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
|
|
||||||
#ifdef AT32F4XX
|
|
||||||
BOR_Level_t BOR_Get(void) {
|
|
||||||
/* TODO: Artery */
|
|
||||||
/* Fake */
|
|
||||||
return BOR_Level_None;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOR_Result_t BOR_Set(BOR_Level_t BORValue) {
|
|
||||||
/* NOP */
|
|
||||||
return BOR_Result_Ok;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
BOR_Level_t BOR_Get(void) {
|
BOR_Level_t BOR_Get(void) {
|
||||||
FLASH_OBProgramInitTypeDef FLASH_Handle;
|
FLASH_OBProgramInitTypeDef FLASH_Handle;
|
||||||
|
|
||||||
|
@ -114,7 +102,6 @@ BOR_Result_t BOR_Set(BOR_Level_t BORValue) {
|
||||||
|
|
||||||
return BOR_Result_Ok;
|
return BOR_Result_Ok;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void baseMCUInit(void) {
|
void baseMCUInit(void) {
|
||||||
// looks like this holds a random value on start? Let's set a nice clean zero
|
// looks like this holds a random value on start? Let's set a nice clean zero
|
||||||
|
|
|
@ -4,11 +4,11 @@ HW_LAYER_PORT_CPP += \
|
||||||
$(HW_STM32_PORT_DIR)/serial_over_usb/usbconsole.cpp \
|
$(HW_STM32_PORT_DIR)/serial_over_usb/usbconsole.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_pins.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_pins.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_common.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common_adc.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_adc.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common_can.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_can.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common_pwm.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_pwm.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common_serial.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_serial.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_common_spi.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_spi.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/stm32_icu.cpp \
|
$(HW_STM32_PORT_DIR)/stm32_icu.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/backup_ram.cpp \
|
$(HW_STM32_PORT_DIR)/backup_ram.cpp \
|
||||||
$(HW_STM32_PORT_DIR)/microsecond_timer_stm32.cpp \
|
$(HW_STM32_PORT_DIR)/microsecond_timer_stm32.cpp \
|
||||||
|
|
|
@ -33,12 +33,12 @@ else
|
||||||
DDEFS += -DSTM32F407xx
|
DDEFS += -DSTM32F407xx
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Now add common stm32 stuff
|
|
||||||
include $(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.mk
|
|
||||||
|
|
||||||
# Add Artery AT32 common stuff
|
|
||||||
ifeq ($(IS_AT32F435),yes)
|
ifeq ($(IS_AT32F435),yes)
|
||||||
|
# Add Artery AT32 common stuff
|
||||||
include $(PROJECT_DIR)/hw_layer/ports/at32/at32_common.mk
|
include $(PROJECT_DIR)/hw_layer/ports/at32/at32_common.mk
|
||||||
|
else
|
||||||
|
# Or STM32 common stuff
|
||||||
|
include $(PROJECT_DIR)/hw_layer/ports/stm32/stm32_common.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# TODO: remove, for efifeatures.h
|
# TODO: remove, for efifeatures.h
|
||||||
|
|
Loading…
Reference in New Issue