Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2021-06-01 15:04:19 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-06-01 15:04:19 +0300
commit5a578f2a63d6e3b4526893f9beb6713f1224ef26 (patch)
tree83ff7b773e2307d0b65889eced39b31043e1cb4b /src/DuetNG
parent5c414694d3a4891e8296891709c3dac62d37d439 (diff)
Don't allow DueX pins to be used for laser control
Diffstat (limited to 'src/DuetNG')
-rw-r--r--src/DuetNG/DueXn.cpp38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/DuetNG/DueXn.cpp b/src/DuetNG/DueXn.cpp
index 4706f7ba..7b59b49e 100644
--- a/src/DuetNG/DueXn.cpp
+++ b/src/DuetNG/DueXn.cpp
@@ -275,18 +275,21 @@ bool DuetExpansion::DigitalRead(Pin pin) noexcept
// Write a pin
void DuetExpansion::DigitalWrite(Pin pin, bool high) noexcept
{
- if (pin >= DueXnExpansionStart && pin < DueXnExpansionStart + 16)
+ if (!inInterrupt() && __get_BASEPRI() == 0) // we must not call expander.digitalWrite() from within an ISR
{
- if (dueXnBoardType != ExpansionBoardType::none)
+ if (pin >= DueXnExpansionStart && pin < DueXnExpansionStart + 16)
{
- dueXnExpander.digitalWrite(pin - DueXnExpansionStart, high);
+ if (dueXnBoardType != ExpansionBoardType::none)
+ {
+ dueXnExpander.digitalWrite(pin - DueXnExpansionStart, high);
+ }
}
- }
- else if (pin >= AdditionalIoExpansionStart && pin < AdditionalIoExpansionStart + 16)
- {
- if (additionalIoExpanderPresent)
+ else if (pin >= AdditionalIoExpansionStart && pin < AdditionalIoExpansionStart + 16)
{
- additionalIoExpander.digitalWrite(pin - AdditionalIoExpansionStart, high);
+ if (additionalIoExpanderPresent)
+ {
+ additionalIoExpander.digitalWrite(pin - AdditionalIoExpansionStart, high);
+ }
}
}
}
@@ -294,18 +297,21 @@ void DuetExpansion::DigitalWrite(Pin pin, bool high) noexcept
// Set the PWM value on this pin
void DuetExpansion::AnalogOut(Pin pin, float pwm) noexcept
{
- if (pin >= DueXnExpansionStart && pin < DueXnExpansionStart + 16)
+ if (!inInterrupt() && __get_BASEPRI() == 0) // we must not call expander.analogWrite() from within an ISR
{
- if (dueXnBoardType != ExpansionBoardType::none)
+ if (pin >= DueXnExpansionStart && pin < DueXnExpansionStart + 16)
{
- dueXnExpander.analogWrite(pin - DueXnExpansionStart, (uint8_t)(constrain<float>(pwm, 0.0, 1.0) * 255));
+ if (dueXnBoardType != ExpansionBoardType::none)
+ {
+ dueXnExpander.analogWrite(pin - DueXnExpansionStart, (uint8_t)(constrain<float>(pwm, 0.0, 1.0) * 255));
+ }
}
- }
- else if (pin >= AdditionalIoExpansionStart && pin < AdditionalIoExpansionStart + 16)
- {
- if (additionalIoExpanderPresent)
+ else if (pin >= AdditionalIoExpansionStart && pin < AdditionalIoExpansionStart + 16)
{
- additionalIoExpander.analogWrite(pin - AdditionalIoExpansionStart, (uint8_t)(constrain<float>(pwm, 0.0, 1.0) * 255));
+ if (additionalIoExpanderPresent)
+ {
+ additionalIoExpander.analogWrite(pin - AdditionalIoExpansionStart, (uint8_t)(constrain<float>(pwm, 0.0, 1.0) * 255));
+ }
}
}
}