Skip to content

Commit

Permalink
Merge pull request ARMmbed#3424 from bcostm/fix_dma_f4
Browse files Browse the repository at this point in the history
STM32F4 - FIX to add the update of hdma->State variable
  • Loading branch information
sg- committed Dec 15, 2016
2 parents 8966d15 + fe73b43 commit cf75543
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
27 changes: 27 additions & 0 deletions targets/TARGET_STM/TARGET_STM32F4/device/stm32f4xx_hal_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)

/* Update error code */
hdma->ErrorCode |= HAL_DMA_ERROR_TE;

/* Change the DMA state */
hdma->State = HAL_DMA_STATE_ERROR; // FIX
}
}
/* FIFO Error Interrupt management ******************************************/
Expand All @@ -774,6 +777,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)

/* Update error code */
hdma->ErrorCode |= HAL_DMA_ERROR_FE;

/* Change the DMA state */
hdma->State = HAL_DMA_STATE_ERROR; // FIX
}
}
/* Direct Mode Error Interrupt management ***********************************/
Expand All @@ -786,6 +792,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)

/* Update error code */
hdma->ErrorCode |= HAL_DMA_ERROR_DME;

/* Change the DMA state */
hdma->State = HAL_DMA_STATE_ERROR; // FIX
}
}
/* Half Transfer Complete Interrupt management ******************************/
Expand All @@ -802,6 +811,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
/* Current memory buffer used is Memory 0 */
if((hdma->Instance->CR & DMA_SxCR_CT) == RESET)
{
/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_HALF_MEM0; // FIX

if(hdma->XferHalfCpltCallback != NULL)
{
/* Half transfer callback */
Expand All @@ -811,6 +823,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
/* Current memory buffer used is Memory 1 */
else
{
/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_HALF_MEM1; // FIX

if(hdma->XferM1HalfCpltCallback != NULL)
{
/* Half transfer callback */
Expand All @@ -827,6 +842,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
hdma->Instance->CR &= ~(DMA_IT_HT);
}

/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_HALF_MEM0; // FIX

if(hdma->XferHalfCpltCallback != NULL)
{
/* Half transfer callback */
Expand Down Expand Up @@ -875,6 +893,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
/* Current memory buffer used is Memory 0 */
if((hdma->Instance->CR & DMA_SxCR_CT) == RESET)
{
/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_MEM1; // FIX

if(hdma->XferM1CpltCallback != NULL)
{
/* Transfer complete Callback for memory1 */
Expand All @@ -884,6 +905,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
/* Current memory buffer used is Memory 1 */
else
{
/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_MEM0; // FIX

if(hdma->XferCpltCallback != NULL)
{
/* Transfer complete Callback for memory0 */
Expand All @@ -894,6 +918,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
/* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
else
{
/* Change DMA peripheral state */
hdma->State = HAL_DMA_STATE_READY_MEM0; // FIX

if((hdma->Instance->CR & DMA_SxCR_CIRC) == RESET)
{
/* Disable the transfer complete interrupt */
Expand Down
6 changes: 6 additions & 0 deletions targets/TARGET_STM/TARGET_STM32F4/device/stm32f4xx_hal_dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,13 @@ typedef enum
{
HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */
HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */
HAL_DMA_STATE_READY_MEM0 = 0x11U, /*!< DMA Mem0 process success */ // FIX
HAL_DMA_STATE_READY_MEM1 = 0x21U, /*!< DMA Mem1 process success */ // FIX
HAL_DMA_STATE_READY_HALF_MEM0 = 0x31U, /*!< DMA Mem0 Half process success */ // FIX
HAL_DMA_STATE_READY_HALF_MEM1 = 0x41U, /*!< DMA Mem1 Half process success */ // FIX
HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */
HAL_DMA_STATE_BUSY_MEM0 = 0x12U, /*!< DMA Mem0 process is ongoing */ // FIX
HAL_DMA_STATE_BUSY_MEM1 = 0x22U, /*!< DMA Mem1 process is ongoing */ // FIX
HAL_DMA_STATE_TIMEOUT = 0x03U, /*!< DMA timeout state */
HAL_DMA_STATE_ERROR = 0x04U, /*!< DMA error state */
HAL_DMA_STATE_ABORT = 0x05U, /*!< DMA Abort state */
Expand Down

0 comments on commit cf75543

Please sign in to comment.