rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
mpu_util.h
Go to the documentation of this file.
1#pragma once
2
3#include "rusefi_types.h"
4
5#include "port_mpu_util.h"
6#include "mpu_watchdog.h"
7
8#ifdef __cplusplus
9
10// Base MCU
11void baseMCUInit();
13#if EFI_USE_OPENBLT
14void jump_to_openblt();
15#endif
16void causeHardFault();
17
18// If mcu can erase/write part of its internal memory without stalling CPU
20
21#if defined(STM32F4)
22bool isStm32F42x();
23#endif // STM32F4
24
25// ADC
26#if HAL_USE_ADC
27
29brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel);
30bool adcIsMuxedInput(adc_channel_e hwChannel);
32int getAdcInternalChannel(ADC_TypeDef *adc, adc_channel_e hwChannel);
33adc_channel_e getHwChannelForAdcInput(ADC_TypeDef *adc, size_t hwIndex);
34
35// deprecated - migrate to 'getAdcChannelBrainPin'
36ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel);
37// deprecated - migrate to 'getAdcChannelBrainPin'
38int getAdcChannelPin(adc_channel_e hwChannel);
39
40void portInitAdc();
41float getMcuTemperature();
42float getMcuVrefVoltage();
43float getMcuVbatVoltage();
44// Convert all slow ADC inputs. Returns true if the conversion succeeded, false if a failure occured.
45bool readSlowAnalogInputs(adcsample_t* convertedSamples);
46#endif
47
48// CAN bus
49#if HAL_USE_CAN
52CANDriver* detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx);
53void canHwInfo(CANDriver* cand);
54void canHwRecover(const size_t busIndex, CANDriver *cand);
55#endif // HAL_USE_CAN
56
57// Serial
58#if EFI_AUX_SERIAL
61#endif //EFI_AUX_SERIAL
62
63// SPI
64#if HAL_USE_SPI
65void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso,
66 brain_pin_e mosi,
67 int sckMode,
68 int mosiMode,
69 int misoMode);
70
71void initSpiCsNoOccupy(SPIConfig *spiConfig, brain_pin_e csPin);
72void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin);
74int spiGetBaseClock(SPIDriver *spip);
75int spiCalcClockDiv(SPIDriver *spip, SPIConfig *spiConfig, unsigned int clk);
76#endif // HAL_USE_SPI
77
78#if HAL_USE_ICU
79bool getIcuParams(brain_pin_e hwPin, iomode_t *af_ptr, ICUDriver ** icu_ptr, icuchannel_t *channel_ptr, uint32_t *clock_ptr);
80#endif
81
82// MMC Card
83#if HAL_USE_MMC_SPI
84// HS = max 50MHz SPI
85extern SPIConfig mmc_hs_spicfg;
86// LS = max 25MHz SPI
87extern SPIConfig mmc_ls_spicfg;
88#endif
89
90// Hardware PWM
92 static hardware_pwm* tryInitPin(const char* msg, brain_pin_e pin, float frequencyHz, float duty);
93 virtual void setDuty(float duty) = 0;
94};
95
96// Brownout Reset
101
102BOR_Level_t BOR_Get(void);
104
105// Reset Cause
106typedef enum {
108 Reset_Cause_IWatchdog, // Independent hardware watchdog (we use it)
109 Reset_Cause_WWatchdog, // Window watchdog
110 Reset_Cause_Soft_Reset, // NVIC_SystemReset or by debugger
111 Reset_Cause_NRST_Pin, // Reset from NRST pin
112 Reset_Cause_POR, // POR/PDR reset
113 Reset_Cause_Illegal_Mode, // Reset after illegal Stop, Standby or Shutdown mode entry
114 Reset_Cause_BOR, // BOR reset
115 Reset_Cause_Firewall, // Firewall reset
116 Reset_Cause_Option_Byte, // Option byte load reset
118
120const char *getMCUResetCause(Reset_Cause_t cause);
121
122#ifdef AT32F4XX
123int at32GetMcuType(uint32_t id, const char **pn, const char **package, uint32_t *flashSize);
124int at32GetRamSizeKb(void);
125#endif
126
127void assertInterruptPriority(const char* func, uint8_t expectedPrio);
128
129extern "C"
130{
131#endif /* __cplusplus */
132
133// these need to be declared with C linkage - they're called from C and asm files
134void DebugMonitorVector(void);
135void UsageFaultVector(void);
136void BusFaultVector(void);
137void HardFaultVector(void);
138
139#ifdef __cplusplus
140}
141#endif /* __cplusplus */
142
143// search:openblt_version
144// ascii 'BL04' in reverse LBS byte order
145#define BLT_CURRENT_VERSION 0x34304C42
146#define BLT_BIN_VERSION_ADDR ((uint32_t)0x08000024U) /*! 3rd reserved DWORD in vector table search:openblt_version */
147
148#if EFI_USE_OPENBLT
149#define getOpenBltVersion() (((uint32_t *)BLT_BIN_VERSION_ADDR)[0])
150#endif
uint16_t adc
Definition adc_inputs.h:103
BOR_Level_t
uint16_t adcsample_t
ADC sample data type.
GPIO_TypeDef * ioportid_t
Port Identifier.
uint32_t iomode_t
Digital I/O modes.
Definition hal_pal_lld.h:83
static Lps25 device
Definition init_baro.cpp:4
bool isValidSerialRxPin(brain_pin_e pin)
bool isStm32F42x()
Reset_Cause_t getMCUResetCause()
CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx)
Definition at32_can.cpp:93
int spiGetBaseClock(SPIDriver *spip)
Definition at32_spi.cpp:254
void HardFaultVector(void)
Definition mpu_util.cpp:62
void BusFaultVector(void)
Definition mpu_util.cpp:56
BOR_Level_t BOR_Get(void)
float getMcuVbatVoltage()
Definition mpu_util.cpp:279
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel)
bool readSlowAnalogInputs(adcsample_t *convertedSamples)
Definition mpu_util.cpp:284
int getAdcInternalChannel(ADC_TypeDef *adc, adc_channel_e hwChannel)
BOR_Result_t BOR_Set(BOR_Level_t BORValue)
SPIConfig mmc_hs_spicfg
Definition at32_spi.cpp:273
void jump_to_openblt()
int getAdcChannelPin(adc_channel_e hwChannel)
bool isValidCanRxPin(brain_pin_e pin)
Definition at32_can.cpp:89
bool getIcuParams(brain_pin_e hwPin, iomode_t *af_ptr, ICUDriver **icu_ptr, icuchannel_t *channel_ptr, uint32_t *clock_ptr)
void DebugMonitorVector(void)
Definition mpu_util.cpp:44
void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, brain_pin_e mosi, int sckMode, int mosiMode, int misoMode)
Definition at32_spi.cpp:206
void assertInterruptPriority(const char *func, uint8_t expectedPrio)
void baseMCUInit()
bool mcuCanFlashWhileRunning()
Definition mpu_util.cpp:10
SPIConfig mmc_ls_spicfg
Definition at32_spi.cpp:288
bool adcIsMuxedInput(adc_channel_e hwChannel)
int at32GetMcuType(uint32_t id, const char **pn, const char **package, uint32_t *flashSize)
void initSpiCsNoOccupy(SPIConfig *spiConfig, brain_pin_e csPin)
Definition at32_spi.cpp:234
void causeHardFault()
void UsageFaultVector(void)
Definition mpu_util.cpp:50
BOR_Result_t
Definition mpu_util.h:97
@ BOR_Result_Ok
Definition mpu_util.h:98
@ BOR_Result_Error
Definition mpu_util.h:99
void jump_to_bootloader()
Reset_Cause_t
Definition mpu_util.h:106
@ Reset_Cause_WWatchdog
Definition mpu_util.h:109
@ Reset_Cause_Firewall
Definition mpu_util.h:115
@ Reset_Cause_Soft_Reset
Definition mpu_util.h:110
@ Reset_Cause_Illegal_Mode
Definition mpu_util.h:113
@ Reset_Cause_NRST_Pin
Definition mpu_util.h:111
@ Reset_Cause_Unknown
Definition mpu_util.h:107
@ Reset_Cause_POR
Definition mpu_util.h:112
@ Reset_Cause_IWatchdog
Definition mpu_util.h:108
@ Reset_Cause_BOR
Definition mpu_util.h:114
@ Reset_Cause_Option_Byte
Definition mpu_util.h:116
void turnOnSpi(spi_device_e device)
Definition at32_spi.cpp:151
adc_channel_e getHwChannelForAdcInput(ADC_TypeDef *adc, size_t hwIndex)
adc_channel_e getAdcChannel(brain_pin_e pin)
float getMcuVrefVoltage()
Definition mpu_util.cpp:274
bool isValidSerialTxPin(brain_pin_e pin)
bool isValidCanTxPin(brain_pin_e pin)
Definition at32_can.cpp:85
adc_channel_e adcMuxedGetParent(adc_channel_e hwChannel)
int at32GetRamSizeKb(void)
ioportid_t getAdcChannelPort(const char *msg, adc_channel_e hwChannel)
void canHwRecover(const size_t busIndex, CANDriver *cand)
Definition at32_can.cpp:135
void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin)
Definition at32_spi.cpp:241
float getMcuTemperature()
Definition mpu_util.cpp:269
void portInitAdc()
Definition mpu_util.cpp:261
void canHwInfo(CANDriver *cand)
Definition at32_can.cpp:129
int spiCalcClockDiv(SPIDriver *spip, SPIConfig *spiConfig, unsigned int clk)
Definition at32_spi.cpp:260
Hardware Independent Watchdog (IWDG) high-level API.
spi_device_e
static uint16_t flashSize()
Definition mpu_util.cpp:21
brain_pin_e pin
Definition stm32_adc.cpp:15
static hardware_pwm * tryInitPin(const char *msg, brain_pin_e pin, float frequencyHz, float duty)
Definition mpu_util.cpp:262
virtual void setDuty(float duty)=0
static float duty