diff --git a/hal/lib/athena/DIO.cpp b/hal/lib/athena/DIO.cpp index ce1cfc19ec..1326635b25 100644 --- a/hal/lib/athena/DIO.cpp +++ b/hal/lib/athena/DIO.cpp @@ -126,6 +126,10 @@ void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t* status) { void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t* status) { uint32_t id = (uint32_t)pwmGenerator; if (id > 5) return; + if (pin >= kNumHeaders) { // if it is on the MXP + pin += kMXPDigitalPWMOffset; // then to write as a digital PWM pin requires + // an offset to write on the correct pin + } digitalSystem->writePWMOutputSelect(id, pin, status); } diff --git a/hal/lib/athena/DigitalInternal.h b/hal/lib/athena/DigitalInternal.h index 44be4d3d5e..0bbf699172 100644 --- a/hal/lib/athena/DigitalInternal.h +++ b/hal/lib/athena/DigitalInternal.h @@ -16,7 +16,9 @@ namespace hal { constexpr uint32_t kNumHeaders = 10; // Number of non-MXP pins constexpr uint32_t kDigitalPins = 26; constexpr uint32_t kPwmPins = 20; - +constexpr uint32_t kMXPDigitalPWMOffset = 6; // MXP pins when used as digital + // output pwm are offset by 6 from + // actual value constexpr uint32_t kExpectedLoopTiming = 40; /**