Browse Source

Fix SAMD51 timer usage (#17471)

vanilla_fb_2.0.x
Giuliano Zaro 5 years ago
committed by GitHub
parent
commit
c16818b261
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      Marlin/src/HAL/SAMD51/Servo.cpp
  2. 4
      Marlin/src/HAL/SAMD51/inc/SanityCheck.h

8
Marlin/src/HAL/SAMD51/Servo.cpp

@ -55,7 +55,7 @@
static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval) static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval)
FORCE_INLINE static uint16_t getTimerCount() { FORCE_INLINE static uint16_t getTimerCount() {
Tc * const tc = TimerConfig[SERVO_TC].pTimer; Tc * const tc = TimerConfig[SERVO_TC].pTc;
tc->COUNT16.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC; tc->COUNT16.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC;
SYNC(tc->COUNT16.SYNCBUSY.bit.CTRLB || tc->COUNT16.SYNCBUSY.bit.COUNT); SYNC(tc->COUNT16.SYNCBUSY.bit.CTRLB || tc->COUNT16.SYNCBUSY.bit.COUNT);
@ -67,7 +67,7 @@ FORCE_INLINE static uint16_t getTimerCount() {
// Interrupt handler for the TC // Interrupt handler for the TC
// ---------------------------- // ----------------------------
HAL_SERVO_TIMER_ISR() { HAL_SERVO_TIMER_ISR() {
Tc * const tc = TimerConfig[SERVO_TC].pTimer; Tc * const tc = TimerConfig[SERVO_TC].pTc;
const timer16_Sequence_t timer = const timer16_Sequence_t timer =
#ifndef _useTimer1 #ifndef _useTimer1
_timer2 _timer2
@ -127,7 +127,7 @@ HAL_SERVO_TIMER_ISR() {
} }
void initISR(timer16_Sequence_t timer) { void initISR(timer16_Sequence_t timer) {
Tc * const tc = TimerConfig[SERVO_TC].pTimer; Tc * const tc = TimerConfig[SERVO_TC].pTc;
const uint8_t tcChannel = TIMER_TCCHANNEL(timer); const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
static bool initialized = false; // Servo TC has been initialized static bool initialized = false; // Servo TC has been initialized
@ -204,7 +204,7 @@ void initISR(timer16_Sequence_t timer) {
} }
void finISR(timer16_Sequence_t timer) { void finISR(timer16_Sequence_t timer) {
Tc * const tc = TimerConfig[SERVO_TC].pTimer; Tc * const tc = TimerConfig[SERVO_TC].pTc;
const uint8_t tcChannel = TIMER_TCCHANNEL(timer); const uint8_t tcChannel = TIMER_TCCHANNEL(timer);
// Disable the match channel interrupt request // Disable the match channel interrupt request

4
Marlin/src/HAL/SAMD51/inc/SanityCheck.h

@ -35,6 +35,10 @@
#error "OnBoard SPI BUS can't be shared with other devices." #error "OnBoard SPI BUS can't be shared with other devices."
#endif #endif
#if SERVO_TC == RTC_TIMER_NUM
#error "Servos can't use RTC timer"
#endif
#if ENABLED(EMERGENCY_PARSER) #if ENABLED(EMERGENCY_PARSER)
#error "EMERGENCY_PARSER is not yet implemented for SAMD51. Disable EMERGENCY_PARSER to continue." #error "EMERGENCY_PARSER is not yet implemented for SAMD51. Disable EMERGENCY_PARSER to continue."
#endif #endif

Loading…
Cancel
Save