rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
hw_layer
drivers
dac.cpp
Go to the documentation of this file.
1
#include "
dac.h
"
2
3
#include <rusefi/rusefi_math.h>
4
5
#if EFI_DAC
6
7
static
DACConfig
dacConfig
= {
8
.init = 4095U,
/* full VCC */
9
.datamode = DAC_DHRM_12BIT_RIGHT,
10
.cr = 0
11
};
12
13
Dac::Dac
(DACDriver& driver)
14
: m_driver(&driver)
15
{
16
}
17
18
void
Dac::Start
(DACConfig& p_config)
19
{
20
dacStart(
m_driver
, &p_config);
21
}
22
23
void
Dac::SetVoltage
(
int
channel
,
float
voltage) {
24
voltage = clampF(0, voltage,
engineConfiguration
->
adcVcc
);
25
m_voltageFloat
[
channel
] = voltage;
26
27
dacPutChannelX(
m_driver
,
channel
, voltage /
engineConfiguration
->
adcVcc
* ((1 << 12) - 1));
28
}
29
30
float
Dac::GetLastVoltage
(
int
channel
)
31
{
32
return
m_voltageFloat
[
channel
];
33
}
34
35
static
Dac
dacs
[] {
36
/** ChibiOS magic: if not dual mode DAC1 CH1 driver identifier.*/
37
Dac
(DACD1),
38
/** ChibiOS magic: if not dual mode DAC1 CH2 driver identifier.*/
39
Dac
(DACD2)
40
};
41
42
void
initDac
() {
43
bool
dacIsUsed =
false
;
44
for
(
size_t
i = 0;i<DAC_OUTPUT_COUNT;i++) {
45
Gpio
pin
=
engineConfiguration
->
dacOutputPins
[i];
46
if
(
isBrainPinValid
(
pin
)) {
47
// setting up the output pin as analog as suggested by the Reference Manual.
48
efiSetPadMode
(
"dac"
,
pin
, PAL_MODE_INPUT_ANALOG);
49
dacIsUsed =
true
;
50
}
51
}
52
if
(dacIsUsed) {
53
// DAC peripheral changes associated pin behaviour regardless of actual pin mode
54
dacs
[0].
Start
(
dacConfig
);
55
dacs
[1].
Start
(
dacConfig
);
56
}
57
}
58
59
void
setDacVoltage
(
int
channel
,
float
voltage) {
60
dacs
[
channel
].
SetVoltage
(0, voltage);
61
}
62
63
#endif
// EFI_DAC
channel
uint16_t channel
Definition
adc_inputs.h:104
efiSetPadMode
void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode)
Definition
bootloader_main.cpp:207
Dac
Definition
dac.h:12
Dac::GetLastVoltage
float GetLastVoltage(int channel)
Definition
dac.cpp:30
Dac::SetVoltage
void SetVoltage(int channel, float volage)
Definition
dac.cpp:23
Dac::m_driver
DACDriver *const m_driver
Definition
dac.h:21
Dac::Dac
Dac(DACDriver &driver)
Definition
dac.cpp:13
Dac::m_voltageFloat
float m_voltageFloat[2]
Definition
dac.h:22
Dac::Start
void Start(DACConfig &config)
Definition
dac.cpp:18
Gpio
Gpio
Definition
rusefi_hw_enums.h:14
dacConfig
static DACConfig dacConfig
Definition
dac.cpp:7
dacs
static Dac dacs[]
Definition
dac.cpp:35
initDac
void initDac()
Definition
dac.cpp:42
setDacVoltage
void setDacVoltage(int channel, float voltage)
Definition
dac.cpp:59
dac.h
engineConfiguration
static constexpr engine_configuration_s * engineConfiguration
Definition
engine_configuration.h:80
isBrainPinValid
bool isBrainPinValid(brain_pin_e brainPin)
Definition
pin_repository.cpp:25
pin
brain_pin_e pin
Definition
stm32_adc.cpp:15
engine_configuration_s::dacOutputPins
Gpio dacOutputPins[DAC_OUTPUT_COUNT]
Definition
engine_configuration_generated_structures_alphax-2chan.h:4933
engine_configuration_s::adcVcc
float adcVcc
Definition
engine_configuration_generated_structures_alphax-2chan.h:1866
Generated on Sat Sep 27 2025 00:10:06 for rusEFI by
1.9.8