lib/stm32: Pass DCMI handle to DCMI_DMAConvCpltUser.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
This commit is contained in:
iabdalkader 2025-07-02 13:05:16 +02:00
parent c8a486cbda
commit 9f98ac73a0
3 changed files with 24 additions and 31 deletions

View File

@ -1114,12 +1114,6 @@ HAL_StatusTypeDef HAL_DCMI_UnRegisterCallback(DCMI_HandleTypeDef *hdcmi, HAL_DCM
/** @defgroup DCMI_Private_Functions DCMI Private Functions /** @defgroup DCMI_Private_Functions DCMI Private Functions
* @{ * @{
*/ */
__weak void DCMI_DMAConvCpltUser(uint32_t addr)
{
}
/** /**
* @brief DMA conversion complete callback. * @brief DMA conversion complete callback.
* @param hdma pointer to a DMA_HandleTypeDef structure that contains * @param hdma pointer to a DMA_HandleTypeDef structure that contains
@ -1129,28 +1123,30 @@ __weak void DCMI_DMAConvCpltUser(uint32_t addr)
static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma) static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
{ {
DCMI_HandleTypeDef* hdcmi; DCMI_HandleTypeDef* hdcmi;
DMA_Stream_TypeDef *stream;
extern void DCMI_DMAConvCpltUser(DCMI_HandleTypeDef* hdcmi, uint32_t addr);
hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; hdcmi = (DCMI_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
hdcmi->State= HAL_DCMI_STATE_READY; stream = (DMA_Stream_TypeDef*) (hdcmi->DMA_Handle->Instance);
// Note: we don't need to adjust memory addresses because they stay the same. // Note: we don't need to adjust memory addresses because they stay the same.
if(hdcmi->XferCount != 0) { if (hdcmi->XferCount != 0) {
hdcmi->XferCount--; hdcmi->XferCount--;
} }
if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0) { if ((stream->CR & DMA_SxCR_CT) == 0) {
// Current traget is M0 call user callback with M1 // Current traget is M0 call user callback with M1
DCMI_DMAConvCpltUser(hdcmi->DMA_Handle->Instance->M1AR); DCMI_DMAConvCpltUser(hdcmi, stream->M1AR);
} else { } else {
// Current traget is M1 call user callback with M0 // Current traget is M1 call user callback with M0
DCMI_DMAConvCpltUser(hdcmi->DMA_Handle->Instance->M0AR); DCMI_DMAConvCpltUser(hdcmi, stream->M0AR);
} }
/* Check if the frame is transferred */ /* Check if the frame is transferred */
if(hdcmi->XferCount == 0) { if (hdcmi->XferCount == 0) {
/* Reload XferCount */ /* Reload XferCount */
hdcmi->XferCount = hdcmi->XferTransferNumber; hdcmi->XferCount = hdcmi->XferTransferNumber;
/* Enable the Frame interrupt */ /* Re-enable frame interrupt */
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME); __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME);
/* When snapshot mode, set dcmi state to ready */ /* When snapshot mode, set dcmi state to ready */

View File

@ -800,10 +800,6 @@ __weak void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
*/ */
} }
__weak void DCMI_DMAConvCpltUser(uint32_t addr)
{
}
/** /**
* @} * @}
*/ */
@ -1168,26 +1164,30 @@ HAL_StatusTypeDef HAL_DCMI_UnRegisterCallback(DCMI_HandleTypeDef *hdcmi, HAL_DCM
static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma) static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
{ {
DCMI_HandleTypeDef* hdcmi; DCMI_HandleTypeDef* hdcmi;
hdcmi = (DCMI_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent; DMA_Stream_TypeDef *stream;
extern void DCMI_DMAConvCpltUser(DCMI_HandleTypeDef* hdcmi, uint32_t addr);
hdcmi = (DCMI_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
stream = (DMA_Stream_TypeDef*) (hdcmi->DMA_Handle->Instance);
// Note: we don't need to adjust memory addresses because they stay the same. // Note: we don't need to adjust memory addresses because they stay the same.
if (hdcmi->XferCount != 0) { if (hdcmi->XferCount != 0) {
hdcmi->XferCount--; hdcmi->XferCount--;
} }
if ((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0) { if ((stream->CR & DMA_SxCR_CT) == 0) {
// Current traget is M0 call user callback with M1 // Current traget is M0 call user callback with M1
DCMI_DMAConvCpltUser(hdcmi->DMA_Handle->Instance->M1AR); DCMI_DMAConvCpltUser(hdcmi, stream->M1AR);
} else { } else {
// Current traget is M1 call user callback with M0 // Current traget is M1 call user callback with M0
DCMI_DMAConvCpltUser(hdcmi->DMA_Handle->Instance->M0AR); DCMI_DMAConvCpltUser(hdcmi, stream->M0AR);
} }
/* Check if the frame is transferred */ /* Check if the frame is transferred */
if(hdcmi->XferCount == 0) { if (hdcmi->XferCount == 0) {
/* Reload XferCount */ /* Reload XferCount */
hdcmi->XferCount = hdcmi->XferTransferNumber; hdcmi->XferCount = hdcmi->XferTransferNumber;
/* Enable the Frame interrupt */ /* Re-enable frame interrupt */
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME); __HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME);
/* When snapshot mode, set dcmi state to ready */ /* When snapshot mode, set dcmi state to ready */
@ -1196,6 +1196,7 @@ static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
} }
} }
} }
/** /**
* @brief DMA error callback * @brief DMA error callback
* @param hdma pointer to a DMA_HandleTypeDef structure that contains * @param hdma pointer to a DMA_HandleTypeDef structure that contains

View File

@ -809,11 +809,6 @@ __weak void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
*/ */
} }
__weak void DCMI_DMAConvCpltUser(uint32_t addr)
{
}
/** /**
* @} * @}
*/ */
@ -1194,6 +1189,7 @@ static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
{ {
DCMI_HandleTypeDef* hdcmi; DCMI_HandleTypeDef* hdcmi;
DMA_Stream_TypeDef *stream; DMA_Stream_TypeDef *stream;
extern void DCMI_DMAConvCpltUser(DCMI_HandleTypeDef* hdcmi, uint32_t addr);
hdcmi = (DCMI_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent; hdcmi = (DCMI_HandleTypeDef*) ((DMA_HandleTypeDef*)hdma)->Parent;
stream = (DMA_Stream_TypeDef*) (hdcmi->DMA_Handle->Instance); stream = (DMA_Stream_TypeDef*) (hdcmi->DMA_Handle->Instance);
@ -1205,10 +1201,10 @@ static void DCMI_DMAXferCplt(DMA_HandleTypeDef *hdma)
if ((stream->CR & DMA_SxCR_CT) == 0) { if ((stream->CR & DMA_SxCR_CT) == 0) {
// Current traget is M0 call user callback with M1 // Current traget is M0 call user callback with M1
DCMI_DMAConvCpltUser(stream->M1AR); DCMI_DMAConvCpltUser(hdcmi, stream->M1AR);
} else { } else {
// Current traget is M1 call user callback with M0 // Current traget is M1 call user callback with M0
DCMI_DMAConvCpltUser(stream->M0AR); DCMI_DMAConvCpltUser(hdcmi, stream->M0AR);
} }
/* Check if the frame is transferred */ /* Check if the frame is transferred */