Ver Fonte

GD32F450: Wait for last byte of SCSI transfer before disabling timer

Petteri Aimonen há 2 anos atrás
pai
commit
39727626ed
1 ficheiros alterados com 8 adições e 0 exclusões
  1. 8 0
      lib/ZuluSCSI_platform_GD32F450/scsi_accel_dma.cpp

+ 8 - 0
lib/ZuluSCSI_platform_GD32F450/scsi_accel_dma.cpp

@@ -258,6 +258,14 @@ static void stop_dma()
     // DMA_CHCTL(SCSI_TIMER_DMA, SCSI_TIMER_DMACHA) &= ~(DMA_CHXCTL_FTFIE | DMA_CHXCTL_HTFIE);
     dma_interrupt_disable(SCSI_TIMER_DMA, SCSI_TIMER_DMACHB, DMA_CHXCTL_FTFIE);
     //DMA_CHCTL(SCSI_TIMER_DMA, SCSI_TIMER_DMACHB) &= ~DMA_CHXCTL_FTFIE;
+
+    // Wait for ACK of the last byte
+    volatile int timeout = 10000;
+    while (TIMER_CNT(SCSI_TIMER) < 2 && timeout > 0)
+    {
+        timeout--;
+    }
+
     timer_disable(SCSI_TIMER);
     //TIMER_CTL0(SCSI_TIMER) &= ~TIMER_CTL0_CEN;
     g_scsi_dma_state = SCSIDMA_IDLE;