Wait for pending DMA transfter to avoid missing step counts
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Mon, 12 Mar 2018 10:55:51 +0000 (03:55 -0700)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Mon, 12 Mar 2018 10:55:51 +0000 (03:55 -0700)
CHANGELOG.md
src/avr/src/motor.c

index 8314278b9a2678383310134317005d20371c20e5..239fbdb83ef7ee7245357b79cde654615aac23e9 100644 (file)
@@ -8,6 +8,7 @@ Buildbotics CNC Controller Firmware Change Log
  - Added site favicon.
  - Fixed problems with offsets and imperial units.
  - Fixed ``All zero s-curve times`` caused by extreemly short, non-zero moves.
+ - Fixed position drift.
 
 ## v0.3.18
  - Don't enable any tool by default.
index b82a583fe9195deea538e0428cb69f5bd4e2e1e1..cf6e8a72a095697743e3eda61482a88f20cbb368 100644 (file)
@@ -242,8 +242,8 @@ void motor_end_move(int motor) {
   // Stop clock
   m->timer->CTRLA = 0;
 
-  // TODO Wait for pending DMA transfers
-  //while (m->dma->CTRLB & (DMA_CH_CHBUSY_bm | DMA_CH_CHPEND_bm)) continue;
+  // Wait for pending DMA transfers
+  while (m->dma->CTRLB & DMA_CH_CHPEND_bm) continue;
 
   // Get actual step count from DMA channel
   const int24_t half_steps = 0xffff - m->dma->TRFCNT;