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
parent5c414694d3a4891e8296891709c3dac62d37d439 (diff)
Don't allow DueX pins to be used for laser control
-rw-r--r--src/DuetNG/DueXn.cpp38
-rw-r--r--src/Platform/Platform.cpp19
-rw-r--r--src/Version.h2
3 files changed, 38 insertions, 21 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));
+ }
}
}
}
diff --git a/src/Platform/Platform.cpp b/src/Platform/Platform.cpp
index a92df70d..e12dd579 100644
--- a/src/Platform/Platform.cpp
+++ b/src/Platform/Platform.cpp
@@ -4191,12 +4191,23 @@ float Platform::GetLaserPwm() const noexcept
bool Platform::AssignLaserPin(GCodeBuffer& gb, const StringRef& reply)
{
- const bool ok = laserPort.AssignPort(gb, reply, PinUsedBy::laser, PinAccess::pwm);
- if (ok)
+ if (!laserPort.AssignPort(gb, reply, PinUsedBy::laser, PinAccess::pwm))
{
- SetLaserPwm(0);
+ return false;
}
- return ok;
+
+#ifdef DUET_NG
+ // We can't use DueX fan pins because we need to set the PWM from within the tick ISR
+ if (laserPort.GetPin() >= DueXnExpansionStart)
+ {
+ reply.copy("DueX fan or GPIO pins may not be used to control lasers");
+ laserPort.Release();
+ return false;
+ }
+#endif
+
+ SetLaserPwm(0);
+ return true;
}
void Platform::SetLaserPwmFrequency(PwmFrequency freq) noexcept
diff --git a/src/Version.h b/src/Version.h
index bf4d0eee..eaaafbb0 100644
--- a/src/Version.h
+++ b/src/Version.h
@@ -9,7 +9,7 @@
#define SRC_VERSION_H_
#ifndef VERSION
-# define MAIN_VERSION "3.3RC3"
+# define MAIN_VERSION "3.3RC3+1"
# ifdef USE_CAN0
# define VERSION_SUFFIX " (CAN0)"
# else