From d17ed079a074cb30243489414d7448e9d1ebde80 Mon Sep 17 00:00:00 2001
From: Federico Terraneo <fede.tft@miosix.org>
Date: Sat, 13 May 2017 16:03:22 +0200
Subject: [PATCH] Enabled fifo by setting DMDIS and configured MBURST to read 4
 bytes at once to optimize bus requests

---
 src/shared/DMA/DMA.cpp | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/shared/DMA/DMA.cpp b/src/shared/DMA/DMA.cpp
index c87dfdd08..14a8df202 100644
--- a/src/shared/DMA/DMA.cpp
+++ b/src/shared/DMA/DMA.cpp
@@ -188,16 +188,18 @@ void SPIRequest::IRQbeginTransaction()
     DMA2_Stream0->NDTR = fromPeripheral.size();
 
     DMA2_Stream0->FCR  = DMA_SxFCR_FEIE   //Enable interrupt on FIFO error 
+                       | DMA_SxFCR_DMDIS  //Enable FIFO
                        | DMA_SxFCR_FTH_0  //FTH = 11 -> Full FIFO
                        | DMA_SxFCR_FTH_1;
 
     DMA2_Stream0->CR   = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 // Channel 3
-                       | DMA_SxCR_PL_1    //High priority because fifo disabled
-                       | DMA_SxCR_MINC    //Increment memory pointer
-                       | DMA_SxCR_TCIE    //Interrupt on transfer complete
-                       | DMA_SxCR_TEIE    //Interrupt on transfer error
-                       | DMA_SxCR_DMEIE   //Interrupt on direct mode error
-                       | DMA_SxCR_EN;     //Start DMA
+                       | DMA_SxCR_MBURST_0 //Read 4 byte at a time from RAM
+                       | DMA_SxCR_PL_1     //High priority because fifo disabled
+                       | DMA_SxCR_MINC     //Increment memory pointer
+                       | DMA_SxCR_TCIE     //Interrupt on transfer complete
+                       | DMA_SxCR_TEIE     //Interrupt on transfer error
+                       | DMA_SxCR_DMEIE    //Interrupt on direct mode error
+                       | DMA_SxCR_EN;      //Start DMA
 
     
     // Tx
@@ -207,16 +209,18 @@ void SPIRequest::IRQbeginTransaction()
     DMA2_Stream5->NDTR = toPeripheral.size();
 
     DMA2_Stream5->FCR  = DMA_SxFCR_FEIE   //Enable interrupt on FIFO error 
+                       | DMA_SxFCR_DMDIS  //Enable FIFO
                        | DMA_SxFCR_FTH_0  //FTH = 11 -> Full FIFO
                        | DMA_SxFCR_FTH_1;
 
     DMA2_Stream5->CR   = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 // Channel 3
-                       | DMA_SxCR_PL_1    //High priority because fifo disabled
-                       | DMA_SxCR_MINC    //Increment memory pointer
-                       | DMA_SxCR_DIR_0   //Memory to peripheral
-                       | DMA_SxCR_TEIE    //Interrupt on transfer error 
-                       | DMA_SxCR_DMEIE   //Interrupt on direct mode error
-                       | DMA_SxCR_EN;     //Start DMA
+                       | DMA_SxCR_MBURST_0 //Read 4 byte at a time from RAM
+                       | DMA_SxCR_PL_1     //High priority because fifo disabled
+                       | DMA_SxCR_MINC     //Increment memory pointer
+                       | DMA_SxCR_DIR_0    //Memory to peripheral
+                       | DMA_SxCR_TEIE     //Interrupt on transfer error 
+                       | DMA_SxCR_DMEIE    //Interrupt on direct mode error
+                       | DMA_SxCR_EN;      //Start DMA
 }
     
 void SPIRequest::IRQendTransaction()
-- 
GitLab