166#ifdef HAL_DMA2D_MODULE_ENABLED
187#define DMA2D_TIMEOUT_ABORT (1000U)
188#define DMA2D_TIMEOUT_SUSPEND (1000U)
204static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width,
250 assert_param(IS_DMA2D_OFFSET(hdma2d->Init.OutputOffset));
252#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1)
253 if (hdma2d->State == HAL_DMA2D_STATE_RESET)
256 hdma2d->LineEventCallback = HAL_DMA2D_LineEventCallback;
257 hdma2d->CLUTLoadingCpltCallback = HAL_DMA2D_CLUTLoadingCpltCallback;
258 if (hdma2d->MspInitCallback == NULL)
260 hdma2d->MspInitCallback = HAL_DMA2D_MspInit;
264 hdma2d->MspInitCallback(hdma2d);
267 if (hdma2d->State == HAL_DMA2D_STATE_RESET)
272 HAL_DMA2D_MspInit(hdma2d);
277 hdma2d->State = HAL_DMA2D_STATE_BUSY;
280 MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode);
283 MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM, hdma2d->Init.ColorMode);
286 MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset);
290 hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE;
293 hdma2d->State = HAL_DMA2D_STATE_READY;
317 if (__HAL_RCC_DMA2D_IS_CLK_ENABLED() == 1U)
320 if ((hdma2d->Instance->CR & DMA2D_CR_START) == DMA2D_CR_START)
322 if (HAL_DMA2D_Abort(hdma2d) !=
HAL_OK)
331 if ((hdma2d->Instance->BGPFCCR & DMA2D_BGPFCCR_START) == DMA2D_BGPFCCR_START)
333 if (HAL_DMA2D_CLUTLoading_Abort(hdma2d, 0U) !=
HAL_OK)
342 if ((hdma2d->Instance->FGPFCCR & DMA2D_FGPFCCR_START) == DMA2D_FGPFCCR_START)
344 if (HAL_DMA2D_CLUTLoading_Abort(hdma2d, 1U) !=
HAL_OK)
355 hdma2d->Instance->CR = 0U;
356 hdma2d->Instance->IFCR = 0x3FU;
357 hdma2d->Instance->FGOR = 0U;
358 hdma2d->Instance->BGOR = 0U;
359 hdma2d->Instance->FGPFCCR = 0U;
360 hdma2d->Instance->BGPFCCR = 0U;
361 hdma2d->Instance->OPFCCR = 0U;
363#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1)
365 if (hdma2d->MspDeInitCallback == NULL)
367 hdma2d->MspDeInitCallback = HAL_DMA2D_MspDeInit;
371 hdma2d->MspDeInitCallback(hdma2d);
375 HAL_DMA2D_MspDeInit(hdma2d);
379 hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE;
382 hdma2d->State = HAL_DMA2D_STATE_RESET;
396__weak
void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef *hdma2d)
412__weak
void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef *hdma2d)
422#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1)
439HAL_StatusTypeDef HAL_DMA2D_RegisterCallback(DMA2D_HandleTypeDef *hdma2d, HAL_DMA2D_CallbackIDTypeDef CallbackID,
440 pDMA2D_CallbackTypeDef pCallback)
444 if (pCallback == NULL)
447 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
453 if (HAL_DMA2D_STATE_READY == hdma2d->State)
457 case HAL_DMA2D_TRANSFERCOMPLETE_CB_ID :
458 hdma2d->XferCpltCallback = pCallback;
461 case HAL_DMA2D_TRANSFERERROR_CB_ID :
462 hdma2d->XferErrorCallback = pCallback;
465 case HAL_DMA2D_LINEEVENT_CB_ID :
466 hdma2d->LineEventCallback = pCallback;
469 case HAL_DMA2D_CLUTLOADINGCPLT_CB_ID :
470 hdma2d->CLUTLoadingCpltCallback = pCallback;
473 case HAL_DMA2D_MSPINIT_CB_ID :
474 hdma2d->MspInitCallback = pCallback;
477 case HAL_DMA2D_MSPDEINIT_CB_ID :
478 hdma2d->MspDeInitCallback = pCallback;
483 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
489 else if (HAL_DMA2D_STATE_RESET == hdma2d->State)
493 case HAL_DMA2D_MSPINIT_CB_ID :
494 hdma2d->MspInitCallback = pCallback;
497 case HAL_DMA2D_MSPDEINIT_CB_ID :
498 hdma2d->MspDeInitCallback = pCallback;
503 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
512 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
537HAL_StatusTypeDef HAL_DMA2D_UnRegisterCallback(DMA2D_HandleTypeDef *hdma2d, HAL_DMA2D_CallbackIDTypeDef CallbackID)
544 if (HAL_DMA2D_STATE_READY == hdma2d->State)
548 case HAL_DMA2D_TRANSFERCOMPLETE_CB_ID :
549 hdma2d->XferCpltCallback = NULL;
552 case HAL_DMA2D_TRANSFERERROR_CB_ID :
553 hdma2d->XferErrorCallback = NULL;
556 case HAL_DMA2D_LINEEVENT_CB_ID :
557 hdma2d->LineEventCallback = HAL_DMA2D_LineEventCallback;
560 case HAL_DMA2D_CLUTLOADINGCPLT_CB_ID :
561 hdma2d->CLUTLoadingCpltCallback = HAL_DMA2D_CLUTLoadingCpltCallback;
564 case HAL_DMA2D_MSPINIT_CB_ID :
565 hdma2d->MspInitCallback = HAL_DMA2D_MspInit;
568 case HAL_DMA2D_MSPDEINIT_CB_ID :
569 hdma2d->MspDeInitCallback = HAL_DMA2D_MspDeInit;
574 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
580 else if (HAL_DMA2D_STATE_RESET == hdma2d->State)
584 case HAL_DMA2D_MSPINIT_CB_ID :
585 hdma2d->MspInitCallback = HAL_DMA2D_MspInit;
588 case HAL_DMA2D_MSPDEINIT_CB_ID :
589 hdma2d->MspDeInitCallback = HAL_DMA2D_MspDeInit;
594 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
603 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_INVALID_CALLBACK;
668HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width,
679 hdma2d->State = HAL_DMA2D_STATE_BUSY;
682 DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
685 __HAL_DMA2D_ENABLE(hdma2d);
704HAL_StatusTypeDef HAL_DMA2D_Start_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width,
715 hdma2d->State = HAL_DMA2D_STATE_BUSY;
718 DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
721 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TC | DMA2D_IT_TE | DMA2D_IT_CE);
724 __HAL_DMA2D_ENABLE(hdma2d);
741HAL_StatusTypeDef HAL_DMA2D_BlendingStart(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2,
742 uint32_t DstAddress, uint32_t Width, uint32_t Height)
752 hdma2d->State = HAL_DMA2D_STATE_BUSY;
755 WRITE_REG(hdma2d->Instance->BGMAR, SrcAddress2);
758 DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
761 __HAL_DMA2D_ENABLE(hdma2d);
778HAL_StatusTypeDef HAL_DMA2D_BlendingStart_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2,
779 uint32_t DstAddress, uint32_t Width, uint32_t Height)
789 hdma2d->State = HAL_DMA2D_STATE_BUSY;
792 WRITE_REG(hdma2d->Instance->BGMAR, SrcAddress2);
795 DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
798 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TC | DMA2D_IT_TE | DMA2D_IT_CE);
801 __HAL_DMA2D_ENABLE(hdma2d);
820 MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_ABORT | DMA2D_CR_START, DMA2D_CR_ABORT);
826 while ((hdma2d->Instance->CR & DMA2D_CR_START) != 0U)
828 if ((
HAL_GetTick() - tickstart) > DMA2D_TIMEOUT_ABORT)
831 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
834 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
844 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TC | DMA2D_IT_TE | DMA2D_IT_CE);
847 hdma2d->State = HAL_DMA2D_STATE_READY;
869 MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_SUSP | DMA2D_CR_START, DMA2D_CR_SUSP);
875 while ((hdma2d->Instance->CR & (DMA2D_CR_SUSP | DMA2D_CR_START)) == DMA2D_CR_START)
877 if ((
HAL_GetTick() - tickstart) > DMA2D_TIMEOUT_SUSPEND)
880 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
883 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
890 if ((hdma2d->Instance->CR & DMA2D_CR_START) != 0U)
892 hdma2d->State = HAL_DMA2D_STATE_SUSPEND;
898 CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
913 if ((hdma2d->Instance->CR & (DMA2D_CR_SUSP | DMA2D_CR_START)) == (DMA2D_CR_SUSP | DMA2D_CR_START))
916 hdma2d->State = HAL_DMA2D_STATE_BUSY;
923 CLEAR_BIT(hdma2d->Instance->CR, (DMA2D_CR_SUSP | DMA2D_CR_START));
938HAL_StatusTypeDef HAL_DMA2D_EnableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
947 hdma2d->State = HAL_DMA2D_STATE_BUSY;
949 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
952 SET_BIT(hdma2d->Instance->BGPFCCR, DMA2D_BGPFCCR_START);
957 SET_BIT(hdma2d->Instance->FGPFCCR, DMA2D_FGPFCCR_START);
974HAL_StatusTypeDef HAL_DMA2D_CLUTStartLoad(DMA2D_HandleTypeDef *hdma2d,
const DMA2D_CLUTCfgTypeDef *CLUTCfg,
986 hdma2d->State = HAL_DMA2D_STATE_BUSY;
989 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
992 WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg->pCLUT);
995 MODIFY_REG(hdma2d->Instance->BGPFCCR, (DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM),
996 ((CLUTCfg->Size << DMA2D_BGPFCCR_CS_Pos) | (CLUTCfg->CLUTColorMode << DMA2D_BGPFCCR_CCM_Pos)));
999 SET_BIT(hdma2d->Instance->BGPFCCR, DMA2D_BGPFCCR_START);
1005 WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg->pCLUT);
1008 MODIFY_REG(hdma2d->Instance->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM),
1009 ((CLUTCfg->Size << DMA2D_FGPFCCR_CS_Pos) | (CLUTCfg->CLUTColorMode << DMA2D_FGPFCCR_CCM_Pos)));
1012 SET_BIT(hdma2d->Instance->FGPFCCR, DMA2D_FGPFCCR_START);
1029HAL_StatusTypeDef HAL_DMA2D_CLUTStartLoad_IT(DMA2D_HandleTypeDef *hdma2d,
const DMA2D_CLUTCfgTypeDef *CLUTCfg,
1034 assert_param(IS_DMA2D_CLUT_CM(CLUTCfg->CLUTColorMode));
1041 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1044 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1047 WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg->pCLUT);
1050 MODIFY_REG(hdma2d->Instance->BGPFCCR, (DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM),
1051 ((CLUTCfg->Size << DMA2D_BGPFCCR_CS_Pos) | (CLUTCfg->CLUTColorMode << DMA2D_BGPFCCR_CCM_Pos)));
1054 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CTC | DMA2D_IT_TE | DMA2D_IT_CE | DMA2D_IT_CAE);
1057 SET_BIT(hdma2d->Instance->BGPFCCR, DMA2D_BGPFCCR_START);
1063 WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg->pCLUT);
1066 MODIFY_REG(hdma2d->Instance->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM),
1067 ((CLUTCfg->Size << DMA2D_FGPFCCR_CS_Pos) | (CLUTCfg->CLUTColorMode << DMA2D_FGPFCCR_CCM_Pos)));
1070 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CTC | DMA2D_IT_TE | DMA2D_IT_CE | DMA2D_IT_CAE);
1073 SET_BIT(hdma2d->Instance->FGPFCCR, DMA2D_FGPFCCR_START);
1093HAL_StatusTypeDef HAL_DMA2D_CLUTLoad(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
1104 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1107 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1110 WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
1113 MODIFY_REG(hdma2d->Instance->BGPFCCR, (DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM),
1114 ((CLUTCfg.Size << DMA2D_BGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_BGPFCCR_CCM_Pos)));
1117 SET_BIT(hdma2d->Instance->BGPFCCR, DMA2D_BGPFCCR_START);
1123 WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
1126 MODIFY_REG(hdma2d->Instance->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM),
1127 ((CLUTCfg.Size << DMA2D_FGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_FGPFCCR_CCM_Pos)));
1130 SET_BIT(hdma2d->Instance->FGPFCCR, DMA2D_FGPFCCR_START);
1150HAL_StatusTypeDef HAL_DMA2D_CLUTLoad_IT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
1161 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1164 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1167 WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
1170 MODIFY_REG(hdma2d->Instance->BGPFCCR, (DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM),
1171 ((CLUTCfg.Size << DMA2D_BGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_BGPFCCR_CCM_Pos)));
1174 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CTC | DMA2D_IT_TE | DMA2D_IT_CE | DMA2D_IT_CAE);
1177 SET_BIT(hdma2d->Instance->BGPFCCR, DMA2D_BGPFCCR_START);
1183 WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
1186 MODIFY_REG(hdma2d->Instance->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM),
1187 ((CLUTCfg.Size << DMA2D_FGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_FGPFCCR_CCM_Pos)));
1190 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CTC | DMA2D_IT_TE | DMA2D_IT_CE | DMA2D_IT_CAE);
1193 SET_BIT(hdma2d->Instance->FGPFCCR, DMA2D_FGPFCCR_START);
1208HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Abort(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
1211 const __IO uint32_t *reg = &(hdma2d->Instance->BGPFCCR);
1214 SET_BIT(hdma2d->Instance->CR, DMA2D_CR_ABORT);
1217 if (LayerIdx == DMA2D_FOREGROUND_LAYER)
1219 reg = &(hdma2d->Instance->FGPFCCR);
1227 while ((*reg & DMA2D_BGPFCCR_START) != 0U)
1229 if ((
HAL_GetTick() - tickstart) > DMA2D_TIMEOUT_ABORT)
1232 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
1235 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
1245 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CTC | DMA2D_IT_TE | DMA2D_IT_CE | DMA2D_IT_CAE);
1248 hdma2d->State = HAL_DMA2D_STATE_READY;
1265HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Suspend(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
1268 uint32_t loadsuspended;
1269 const __IO uint32_t *reg = &(hdma2d->Instance->BGPFCCR);
1272 SET_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
1275 if (LayerIdx == DMA2D_FOREGROUND_LAYER)
1277 reg = &(hdma2d->Instance->FGPFCCR);
1285 loadsuspended = ((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP) ? 1UL : 0UL;
1287 loadsuspended |= ((*reg & DMA2D_BGPFCCR_START) != DMA2D_BGPFCCR_START) ? 1UL : 0UL;
1288 while (loadsuspended == 0UL)
1290 if ((
HAL_GetTick() - tickstart) > DMA2D_TIMEOUT_SUSPEND)
1293 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
1296 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
1301 loadsuspended = ((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP) ? 1UL : 0UL;
1303 loadsuspended |= ((*reg & DMA2D_BGPFCCR_START) != DMA2D_BGPFCCR_START) ? 1UL : 0UL;
1307 if ((*reg & DMA2D_BGPFCCR_START) != 0U)
1309 hdma2d->State = HAL_DMA2D_STATE_SUSPEND;
1315 CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
1330HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Resume(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
1333 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1336 if ((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
1338 if ((hdma2d->Instance->BGPFCCR & DMA2D_BGPFCCR_START) == DMA2D_BGPFCCR_START)
1341 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1348 if ((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
1350 if ((hdma2d->Instance->FGPFCCR & DMA2D_FGPFCCR_START) == DMA2D_FGPFCCR_START)
1353 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1359 CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
1373HAL_StatusTypeDef HAL_DMA2D_PollForTransfer(DMA2D_HandleTypeDef *hdma2d, uint32_t Timeout)
1376 uint32_t layer_start;
1377 __IO uint32_t isrflags = 0x0U;
1380 if ((hdma2d->Instance->CR & DMA2D_CR_START) != 0U)
1385 while (__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TC) == 0U)
1387 isrflags = READ_REG(hdma2d->Instance->ISR);
1388 if ((isrflags & (DMA2D_FLAG_CE | DMA2D_FLAG_TE)) != 0U)
1390 if ((isrflags & DMA2D_FLAG_CE) != 0U)
1392 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1394 if ((isrflags & DMA2D_FLAG_TE) != 0U)
1396 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1399 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE | DMA2D_FLAG_TE);
1402 hdma2d->State = HAL_DMA2D_STATE_ERROR;
1412 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
1415 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
1418 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
1429 layer_start = hdma2d->Instance->FGPFCCR & DMA2D_FGPFCCR_START;
1430 layer_start |= hdma2d->Instance->BGPFCCR & DMA2D_BGPFCCR_START;
1431 if (layer_start != 0U)
1436 while (__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CTC) == 0U)
1438 isrflags = READ_REG(hdma2d->Instance->ISR);
1439 if ((isrflags & (DMA2D_FLAG_CAE | DMA2D_FLAG_CE | DMA2D_FLAG_TE)) != 0U)
1441 if ((isrflags & DMA2D_FLAG_CAE) != 0U)
1443 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE;
1445 if ((isrflags & DMA2D_FLAG_CE) != 0U)
1447 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1449 if ((isrflags & DMA2D_FLAG_TE) != 0U)
1451 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1454 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE | DMA2D_FLAG_CE | DMA2D_FLAG_TE);
1457 hdma2d->State = HAL_DMA2D_STATE_ERROR;
1467 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
1470 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
1473 hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
1485 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC | DMA2D_FLAG_CTC);
1488 hdma2d->State = HAL_DMA2D_STATE_READY;
1501void HAL_DMA2D_IRQHandler(DMA2D_HandleTypeDef *hdma2d)
1503 uint32_t isrflags = READ_REG(hdma2d->Instance->ISR);
1504 uint32_t crflags = READ_REG(hdma2d->Instance->CR);
1507 if ((isrflags & DMA2D_FLAG_TE) != 0U)
1509 if ((crflags & DMA2D_IT_TE) != 0U)
1512 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TE);
1515 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1518 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TE);
1521 hdma2d->State = HAL_DMA2D_STATE_ERROR;
1526 if (hdma2d->XferErrorCallback != NULL)
1529 hdma2d->XferErrorCallback(hdma2d);
1534 if ((isrflags & DMA2D_FLAG_CE) != 0U)
1536 if ((crflags & DMA2D_IT_CE) != 0U)
1539 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CE);
1542 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE);
1545 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1548 hdma2d->State = HAL_DMA2D_STATE_ERROR;
1553 if (hdma2d->XferErrorCallback != NULL)
1556 hdma2d->XferErrorCallback(hdma2d);
1561 if ((isrflags & DMA2D_FLAG_CAE) != 0U)
1563 if ((crflags & DMA2D_IT_CAE) != 0U)
1566 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CAE);
1569 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE);
1572 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE;
1575 hdma2d->State = HAL_DMA2D_STATE_ERROR;
1580 if (hdma2d->XferErrorCallback != NULL)
1583 hdma2d->XferErrorCallback(hdma2d);
1588 if ((isrflags & DMA2D_FLAG_TW) != 0U)
1590 if ((crflags & DMA2D_IT_TW) != 0U)
1593 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TW);
1596 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TW);
1599#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1)
1600 hdma2d->LineEventCallback(hdma2d);
1602 HAL_DMA2D_LineEventCallback(hdma2d);
1608 if ((isrflags & DMA2D_FLAG_TC) != 0U)
1610 if ((crflags & DMA2D_IT_TC) != 0U)
1613 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TC);
1616 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC);
1619 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE;
1622 hdma2d->State = HAL_DMA2D_STATE_READY;
1627 if (hdma2d->XferCpltCallback != NULL)
1630 hdma2d->XferCpltCallback(hdma2d);
1635 if ((isrflags & DMA2D_FLAG_CTC) != 0U)
1637 if ((crflags & DMA2D_IT_CTC) != 0U)
1640 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CTC);
1643 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CTC);
1646 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE;
1649 hdma2d->State = HAL_DMA2D_STATE_READY;
1655#if (USE_HAL_DMA2D_REGISTER_CALLBACKS == 1)
1656 hdma2d->CLUTLoadingCpltCallback(hdma2d);
1658 HAL_DMA2D_CLUTLoadingCpltCallback(hdma2d);
1671__weak
void HAL_DMA2D_LineEventCallback(DMA2D_HandleTypeDef *hdma2d)
1687__weak
void HAL_DMA2D_CLUTLoadingCpltCallback(DMA2D_HandleTypeDef *hdma2d)
1730HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
1732 const DMA2D_LayerCfgTypeDef *pLayerCfg;
1738 assert_param(IS_DMA2D_OFFSET(hdma2d->LayerCfg[LayerIdx].InputOffset));
1739 if (hdma2d->Init.Mode != DMA2D_R2M)
1741 assert_param(IS_DMA2D_INPUT_COLOR_MODE(hdma2d->LayerCfg[LayerIdx].InputColorMode));
1742 if (hdma2d->Init.Mode != DMA2D_M2M)
1744 assert_param(IS_DMA2D_ALPHA_MODE(hdma2d->LayerCfg[LayerIdx].AlphaMode));
1752 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1754 pLayerCfg = &hdma2d->LayerCfg[LayerIdx];
1757 regValue = pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << DMA2D_BGPFCCR_AM_Pos);
1758 regMask = DMA2D_BGPFCCR_CM | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_ALPHA;
1761 if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1763 regValue |= (pLayerCfg->InputAlpha & DMA2D_BGPFCCR_ALPHA);
1767 regValue |= (pLayerCfg->InputAlpha << DMA2D_BGPFCCR_ALPHA_Pos);
1771 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1774 MODIFY_REG(hdma2d->Instance->BGPFCCR, regMask, regValue);
1777 WRITE_REG(hdma2d->Instance->BGOR, pLayerCfg->InputOffset);
1780 if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1782 WRITE_REG(hdma2d->Instance->BGCOLR, pLayerCfg->InputAlpha & (DMA2D_BGCOLR_BLUE | DMA2D_BGCOLR_GREEN | \
1792 MODIFY_REG(hdma2d->Instance->FGPFCCR, regMask, regValue);
1795 WRITE_REG(hdma2d->Instance->FGOR, pLayerCfg->InputOffset);
1798 if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1800 WRITE_REG(hdma2d->Instance->FGCOLR, pLayerCfg->InputAlpha & (DMA2D_FGCOLR_BLUE | DMA2D_FGCOLR_GREEN | \
1805 hdma2d->State = HAL_DMA2D_STATE_READY;
1827HAL_StatusTypeDef HAL_DMA2D_ConfigCLUT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
1838 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1841 if (LayerIdx == DMA2D_BACKGROUND_LAYER)
1844 WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
1847 MODIFY_REG(hdma2d->Instance->BGPFCCR, (DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM),
1848 ((CLUTCfg.Size << DMA2D_BGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_BGPFCCR_CCM_Pos)));
1854 WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
1857 MODIFY_REG(hdma2d->Instance->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM),
1858 ((CLUTCfg.Size << DMA2D_FGPFCCR_CS_Pos) | (CLUTCfg.CLUTColorMode << DMA2D_FGPFCCR_CCM_Pos)));
1862 hdma2d->State = HAL_DMA2D_STATE_READY;
1881HAL_StatusTypeDef HAL_DMA2D_ProgramLineEvent(DMA2D_HandleTypeDef *hdma2d, uint32_t Line)
1884 if (Line > DMA2D_LWR_LW)
1894 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1897 WRITE_REG(hdma2d->Instance->LWR, Line);
1900 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TW);
1903 hdma2d->State = HAL_DMA2D_STATE_READY;
1922 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1925 SET_BIT(hdma2d->Instance->AMTCR, DMA2D_AMTCR_EN);
1927 hdma2d->State = HAL_DMA2D_STATE_READY;
1945 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1948 CLEAR_BIT(hdma2d->Instance->AMTCR, DMA2D_AMTCR_EN);
1950 hdma2d->State = HAL_DMA2D_STATE_READY;
1966HAL_StatusTypeDef HAL_DMA2D_ConfigDeadTime(DMA2D_HandleTypeDef *hdma2d, uint8_t DeadTime)
1971 hdma2d->State = HAL_DMA2D_STATE_BUSY;
1974 MODIFY_REG(hdma2d->Instance->AMTCR, DMA2D_AMTCR_DT, (((uint32_t) DeadTime) << DMA2D_AMTCR_DT_Pos));
1976 hdma2d->State = HAL_DMA2D_STATE_READY;
2011HAL_DMA2D_StateTypeDef HAL_DMA2D_GetState(
const DMA2D_HandleTypeDef *hdma2d)
2013 return hdma2d->State;
2022uint32_t HAL_DMA2D_GetError(
const DMA2D_HandleTypeDef *hdma2d)
2024 return hdma2d->ErrorCode;
2050static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width,
2060 MODIFY_REG(hdma2d->Instance->NLR, (DMA2D_NLR_NL | DMA2D_NLR_PL), (Height | (Width << DMA2D_NLR_PL_Pos)));
2063 WRITE_REG(hdma2d->Instance->OMAR, DstAddress);
2066 if (hdma2d->Init.Mode == DMA2D_R2M)
2068 tmp1 = pdata & DMA2D_OCOLR_ALPHA_1;
2069 tmp2 = pdata & DMA2D_OCOLR_RED_1;
2070 tmp3 = pdata & DMA2D_OCOLR_GREEN_1;
2071 tmp4 = pdata & DMA2D_OCOLR_BLUE_1;
2074 if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_ARGB8888)
2076 tmp = (tmp3 | tmp2 | tmp1 | tmp4);
2078 else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_RGB888)
2080 tmp = (tmp3 | tmp2 | tmp4);
2082 else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_RGB565)
2084 tmp2 = (tmp2 >> 19U);
2085 tmp3 = (tmp3 >> 10U);
2086 tmp4 = (tmp4 >> 3U);
2087 tmp = ((tmp3 << 5U) | (tmp2 << 11U) | tmp4);
2089 else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_ARGB1555)
2091 tmp1 = (tmp1 >> 31U);
2092 tmp2 = (tmp2 >> 19U);
2093 tmp3 = (tmp3 >> 11U);
2094 tmp4 = (tmp4 >> 3U);
2095 tmp = ((tmp3 << 5U) | (tmp2 << 10U) | (tmp1 << 15U) | tmp4);
2099 tmp1 = (tmp1 >> 28U);
2100 tmp2 = (tmp2 >> 20U);
2101 tmp3 = (tmp3 >> 12U);
2102 tmp4 = (tmp4 >> 4U);
2103 tmp = ((tmp3 << 4U) | (tmp2 << 8U) | (tmp1 << 12U) | tmp4);
2106 WRITE_REG(hdma2d->Instance->OCOLR, tmp);
2111 WRITE_REG(hdma2d->Instance->FGMAR, pdata);
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition.
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_LOCK(__HANDLE__)