rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Functions | Variables
stm32_adc.cpp File Reference

Functions

brain_pin_e getAdcChannelBrainPin (const char *msg, adc_channel_e hwChannel)
 
bool adcIsMuxedInput (adc_channel_e hwChannel)
 
adc_channel_e adcMuxedGetParent (adc_channel_e hwChannel)
 
adc_channel_e getAdcChannel (brain_pin_e pin)
 
int getAdcInternalChannel (ADC_TypeDef *adc, adc_channel_e hwChannel)
 
adc_channel_e getHwChannelForAdcInput (ADC_TypeDef *adc, size_t hwIndex)
 
ioportid_t getAdcChannelPort (const char *msg, adc_channel_e hwChannel)
 
int getAdcChannelPin (adc_channel_e hwChannel)
 

Variables

struct { 
 
   brain_pin_e   pin 
 
   adc_channel_e   ch 
 
   uint8_t   adc 
 
adcChannels [] 
 

Function Documentation

◆ adcIsMuxedInput()

bool adcIsMuxedInput ( adc_channel_e  hwChannel)

Definition at line 67 of file stm32_adc.cpp.

67 {
68#ifdef ADC_MUX_PIN
69 return ((hwChannel >= EFI_ADC_16) && (hwChannel <= EFI_ADC_31));
70#else
71 UNUSED(hwChannel);
72 return false;
73#endif
74}
UNUSED(samplingTimeSeconds)

Referenced by adcMuxedGetParent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ adcMuxedGetParent()

adc_channel_e adcMuxedGetParent ( adc_channel_e  hwChannel)

Definition at line 77 of file stm32_adc.cpp.

78{
79 if (adcIsMuxedInput(hwChannel)) {
80 return (adc_channel_e)(EFI_ADC_0 + (hwChannel - EFI_ADC_16));
81 }
82
83 return hwChannel;
84}
bool adcIsMuxedInput(adc_channel_e hwChannel)
Definition stm32_adc.cpp:67

Referenced by getAdcChannelBrainPin().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getAdcChannel()

adc_channel_e getAdcChannel ( brain_pin_e  pin)

Definition at line 86 of file stm32_adc.cpp.

86 {
87 if (pin == Gpio::Unassigned)
88 return EFI_ADC_NONE;
89
90 for (size_t idx = 0; idx < efi::size(adcChannels); idx++) {
91 if (adcChannels[idx].pin == pin) {
92 return adcChannels[idx].ch;
93 }
94 }
95
96 criticalError("getAdcChannel %d", pin);
97 return EFI_ADC_ERROR;
98}
@ Unassigned
brain_pin_e pin
Definition stm32_adc.cpp:15
static const struct @48 adcChannels[]

◆ getAdcChannelBrainPin()

brain_pin_e getAdcChannelBrainPin ( const char msg,
adc_channel_e  hwChannel 
)

Definition at line 46 of file stm32_adc.cpp.

46 {
47 static_assert(EFI_ADC_NONE == ADC_CHANNEL_NONE);
48
49 /* Muxed adc inputs */
50 hwChannel = adcMuxedGetParent(hwChannel);
51
52 for (size_t idx = 0; idx < efi::size(adcChannels); idx++) {
53 if (adcChannels[idx].ch == hwChannel) {
54 return adcChannels[idx].pin;
55 }
56 }
57
58 /* todo: what is upper range ADC is used while lower range ADC is not used? how do we still mark pin used?
59 * external muxes for internal ADC #3350
60 * firmwareError(ObdCode::CUSTOM_ERR_ADC_UNKNOWN_CHANNEL, "Unknown hw channel %d [%s]", hwChannel, msg);
61 */
62 (void)msg;
63
64 return Gpio::Invalid;
65}
@ Invalid
adc_channel_e ch
Definition stm32_adc.cpp:16
adc_channel_e adcMuxedGetParent(adc_channel_e hwChannel)
Definition stm32_adc.cpp:77

Referenced by getAdcChannelPin(), and getAdcChannelPort().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getAdcChannelPin()

int getAdcChannelPin ( adc_channel_e  hwChannel)

Definition at line 187 of file stm32_adc.cpp.

187 {
188 brain_pin_e brainPin = getAdcChannelBrainPin("get_pin", hwChannel);
189 return getHwPin("get_pin", brainPin);
190}
ioportmask_t getHwPin(const char *msg, brain_pin_e brainPin)
brain_pin_e getAdcChannelBrainPin(const char *msg, adc_channel_e hwChannel)
Definition stm32_adc.cpp:46
Here is the call graph for this function:

◆ getAdcChannelPort()

ioportid_t getAdcChannelPort ( const char msg,
adc_channel_e  hwChannel 
)

Definition at line 181 of file stm32_adc.cpp.

181 {
182 brain_pin_e brainPin = getAdcChannelBrainPin(msg, hwChannel);
183 return getHwPort(msg, brainPin);
184}
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin)
Here is the call graph for this function:

◆ getAdcInternalChannel()

int getAdcInternalChannel ( ADC_TypeDef *  adc,
adc_channel_e  hwChannel 
)

Definition at line 101 of file stm32_adc.cpp.

102{
103 uint8_t mask = 0;
104
105#if STM32_ADC_USE_ADC1
106 if (adc == ADC1) {
107 mask = BIT(0);
108 }
109#endif
110#if STM32_ADC_USE_ADC2
111 if (adc == ADC2) {
112 mask = BIT(1);
113 }
114#endif
115#if STM32_ADC_USE_ADC3
116 if (adc == ADC3) {
117 mask = BIT(2);
118 }
119#endif
120
121 if (mask == 0) {
122 // Unknown ADC instance
123 return -1;
124 }
125
126 int hwIndex = 0;
127 for (size_t idx = 0; idx < efi::size(adcChannels); idx++) {
128 if (adcChannels[idx].ch == hwChannel) {
129 return hwIndex;
130 }
131 if (adcChannels[idx].adc & mask) {
132 hwIndex++;
133 }
134 }
135
136 // Channel is not supported by this ADC
137 return -1;
138}
uint8_t adc
Definition stm32_adc.cpp:17

◆ getHwChannelForAdcInput()

adc_channel_e getHwChannelForAdcInput ( ADC_TypeDef *  adc,
size_t  hwIndex 
)

Definition at line 140 of file stm32_adc.cpp.

141{
142 uint8_t mask = 0;
143
144#if STM32_ADC_USE_ADC1
145 if (adc == ADC1) {
146 mask = BIT(0);
147 }
148#endif
149#if STM32_ADC_USE_ADC2
150 if (adc == ADC2) {
151 mask = BIT(1);
152 }
153#endif
154#if STM32_ADC_USE_ADC3
155 if (adc == ADC3) {
156 mask = BIT(2);
157 }
158#endif
159
160 if (mask == 0) {
161 // Unknown ADC instance
162 return EFI_ADC_ERROR;
163 }
164
165 size_t tmpIndex = 0;
166 for (size_t idx = 0; idx < efi::size(adcChannels); idx++) {
167 if (adcChannels[idx].adc & mask) {
168 if (hwIndex == tmpIndex) {
169 return adcChannels[idx].ch;
170 }
171 tmpIndex++;
172 }
173 }
174
175 // Channel is not supported by this ADC
176 return EFI_ADC_ERROR;
177
178}

Variable Documentation

◆ adc

uint8_t adc

Definition at line 17 of file stm32_adc.cpp.

Referenced by getAdcInternalChannel(), and getHwChannelForAdcInput().

◆ [struct]

const struct { ... } adcChannels[]
Initial value:
= {
{ Gpio::A0, EFI_ADC_0, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::A1, EFI_ADC_1, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::A2, EFI_ADC_2, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::A3, EFI_ADC_3, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::A4, EFI_ADC_4, BIT(0) | BIT(1) },
{ Gpio::F6, EFI_ADC_32, BIT(2) },
{ Gpio::A5, EFI_ADC_5, BIT(0) | BIT(1) },
{ Gpio::F7, EFI_ADC_33, BIT(2) },
{ Gpio::A6, EFI_ADC_6, BIT(0) | BIT(1) },
{ Gpio::F8, EFI_ADC_34, BIT(2) },
{ Gpio::A7, EFI_ADC_7, BIT(0) | BIT(1) },
{ Gpio::F9, EFI_ADC_35, BIT(2) },
{ Gpio::B0, EFI_ADC_8, BIT(0) | BIT(1) },
{ Gpio::F10, EFI_ADC_36, BIT(2) },
{ Gpio::B1, EFI_ADC_9, BIT(0) | BIT(1) },
{ Gpio::F3, EFI_ADC_37, BIT(2) },
{ Gpio::C0, EFI_ADC_10, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::C1, EFI_ADC_11, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::C2, EFI_ADC_12, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::C3, EFI_ADC_13, BIT(0) | BIT(1) | BIT(2) },
{ Gpio::C4, EFI_ADC_14, BIT(0) | BIT(1) },
{ Gpio::F4, EFI_ADC_38, BIT(2) },
{ Gpio::C5, EFI_ADC_15, BIT(0) | BIT(1) },
{ Gpio::F5, EFI_ADC_39, BIT(2) },
}

Referenced by getAdcChannel(), getAdcChannelBrainPin(), getAdcInternalChannel(), and getHwChannelForAdcInput().

◆ ch

Definition at line 16 of file stm32_adc.cpp.

Referenced by getAdcChannelBrainPin(), and getAdcInternalChannel().

◆ pin

Definition at line 15 of file stm32_adc.cpp.

Referenced by adcPrintChannelReport(), addEngineSnifferOutputPinEvent(), benchSetPinValue(), chargeTrailingSpark(), EnginePins::debug(), debugBrainPin(), deInitIfValid(), directWritePad(), efiReadPin(), efiReadPin(), efiSetPadMode(), efiSetPadModeWithoutOwnershipAcquisition(), efiSetPadUnused(), findAfForPin(), fireTrailingSpark(), getAdcChannel(), getConfigForPin(), getPortPinIndex(), getSpiCsAf(), getSpiMisoAf(), getSpiMosiAf(), getSpiSckAf(), gpio_pin_markUnused(), gpio_pin_markUsed(), gpiochip_find(), gpiochip_tryInitPwm(), gpiochips_getChipName(), gpiochips_getDiag(), gpiochips_getPinName(), gpiochips_getPinOffset(), gpiochips_readPad(), gpiochips_setPadMode(), gpiochips_writePad(), hdAcrBench(), HellaOilLevelSensor::init(), ButtonDebounce::init(), initDac(), FrequencySensor::initIfValid(), initIfValid(), initQcBenchControls(), initSettings(), initSpiCsNoOccupy(), isValidCan1RxPin(), isValidCan1RxPin(), isValidCan1RxPin(), isValidCan1TxPin(), isValidCan1TxPin(), isValidCan1TxPin(), isValidCan2RxPin(), isValidCan2RxPin(), isValidCan2RxPin(), isValidCan2TxPin(), isValidCan2TxPin(), isValidCan2TxPin(), isValidCan3RxPin(), isValidCan3TxPin(), isValidCanRxPin(), isValidCanTxPin(), isValidSerialRxPin(), isValidSerialTxPin(), isValidUART6RxPin(), isValidUART6TxPin(), lua_readpin(), onConfigurationChangeTriggerCallback(), FanController::onSlowCallback(), SensorChecker::onSlowCallback(), parseBrainPin(), parseBrainPinWithErrorMessage(), PORT_SetPinConfig(), PORT_SetPinDriveStrength(), PORT_SetPinInterruptConfig(), PORT_SetPinMux(), readPin(), reportPins(), EnginePins::resetForUnitTest(), resetPinStats(), sendPinStatePackets(), setAnalogInputPin(), setHellenEnPin(), setIgnitionPin(), setIndividualPin(), setLogicInputPin(), setMockState(), setPin(), setTriggerInputPin(), setTriggerSimulatorPin(), startInputPinIfValid(), EnginePins::startPins(), startTriggerEmulatorPins(), EnginePins::unregisterPins(), ShiftTorqueReductionController::updateTriggerPinState(), and writePad().

Go to the source code of this file.