STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_dma2d.c
Go to the documentation of this file.
1 
128 /* Includes ------------------------------------------------------------------*/
129 #include "stm32f7xx_hal.h"
130 
140 #ifdef HAL_DMA2D_MODULE_ENABLED
141 
142 /* Private types -------------------------------------------------------------*/
143 /* Private define ------------------------------------------------------------*/
151 #define DMA2D_TIMEOUT_ABORT ((uint32_t)1000)
152 #define DMA2D_TIMEOUT_SUSPEND ((uint32_t)1000)
160 #define DMA2D_POSITION_FGPFCCR_CS (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_CS)
161 #define DMA2D_POSITION_BGPFCCR_CS (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_CS)
163 #define DMA2D_POSITION_FGPFCCR_CCM (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_CCM)
164 #define DMA2D_POSITION_BGPFCCR_CCM (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_CCM)
166 #define DMA2D_POSITION_OPFCCR_AI (uint32_t)POSITION_VAL(DMA2D_OPFCCR_AI)
167 #define DMA2D_POSITION_FGPFCCR_AI (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_AI)
168 #define DMA2D_POSITION_BGPFCCR_AI (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_AI)
170 #define DMA2D_POSITION_OPFCCR_RBS (uint32_t)POSITION_VAL(DMA2D_OPFCCR_RBS)
171 #define DMA2D_POSITION_FGPFCCR_RBS (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_RBS)
172 #define DMA2D_POSITION_BGPFCCR_RBS (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_RBS)
174 #define DMA2D_POSITION_AMTCR_DT (uint32_t)POSITION_VAL(DMA2D_AMTCR_DT)
176 #define DMA2D_POSITION_FGPFCCR_AM (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_AM)
177 #define DMA2D_POSITION_BGPFCCR_AM (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_AM)
179 #define DMA2D_POSITION_FGPFCCR_ALPHA (uint32_t)POSITION_VAL(DMA2D_FGPFCCR_ALPHA)
180 #define DMA2D_POSITION_BGPFCCR_ALPHA (uint32_t)POSITION_VAL(DMA2D_BGPFCCR_ALPHA)
182 #define DMA2D_POSITION_NLR_PL (uint32_t)POSITION_VAL(DMA2D_NLR_PL)
191 /* Private variables ---------------------------------------------------------*/
192 /* Private constants ---------------------------------------------------------*/
193 /* Private macro -------------------------------------------------------------*/
194 /* Private function prototypes -----------------------------------------------*/
198 static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height);
203 /* Private functions ---------------------------------------------------------*/
204 /* Exported functions --------------------------------------------------------*/
232 {
233  /* Check the DMA2D peripheral state */
234  if(hdma2d == NULL)
235  {
236  return HAL_ERROR;
237  }
238 
239  /* Check the parameters */
244 
245  if(hdma2d->State == HAL_DMA2D_STATE_RESET)
246  {
247  /* Allocate lock resource and initialize it */
248  hdma2d->Lock = HAL_UNLOCKED;
249  /* Init the low level hardware */
250  HAL_DMA2D_MspInit(hdma2d);
251  }
252 
253  /* Change DMA2D peripheral state */
254  hdma2d->State = HAL_DMA2D_STATE_BUSY;
255 
256  /* DMA2D CR register configuration -------------------------------------------*/
257  MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode);
258 
259  /* DMA2D OPFCCR register configuration ---------------------------------------*/
261 
262  /* DMA2D OOR register configuration ------------------------------------------*/
263  MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset);
264 
265 #if defined (DMA2D_OPFCCR_AI)
266  /* DMA2D OPFCCR AI fields setting (Output Alpha Inversion)*/
267  MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_AI, (hdma2d->Init.AlphaInverted << DMA2D_POSITION_OPFCCR_AI));
268 #endif /* DMA2D_OPFCCR_AI */
269 
270 #if defined (DMA2D_OPFCCR_RBS)
271  MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_RBS,(hdma2d->Init.RedBlueSwap << DMA2D_POSITION_OPFCCR_RBS));
272 #endif /* DMA2D_OPFCCR_RBS */
273 
274 
275  /* Update error code */
277 
278  /* Initialize the DMA2D state*/
279  hdma2d->State = HAL_DMA2D_STATE_READY;
280 
281  return HAL_OK;
282 }
283 
293 {
294 
295  /* Check the DMA2D peripheral state */
296  if(hdma2d == NULL)
297  {
298  return HAL_ERROR;
299  }
300 
301  /* Before aborting any DMA2D transfer or CLUT loading, check
302  first whether or not DMA2D clock is enabled */
304  {
305  /* Abort DMA2D transfer if any */
306  if ((hdma2d->Instance->CR & DMA2D_CR_START) == DMA2D_CR_START)
307  {
308  if (HAL_DMA2D_Abort(hdma2d) != HAL_OK)
309  {
310  /* Issue when aborting DMA2D transfer */
311  return HAL_ERROR;
312  }
313  }
314  else
315  {
316  /* Abort background CLUT loading if any */
318  {
319  if (HAL_DMA2D_CLUTLoading_Abort(hdma2d, 0) != HAL_OK)
320  {
321  /* Issue when aborting background CLUT loading */
322  return HAL_ERROR;
323  }
324  }
325  else
326  {
327  /* Abort foreground CLUT loading if any */
329  {
330  if (HAL_DMA2D_CLUTLoading_Abort(hdma2d, 1) != HAL_OK)
331  {
332  /* Issue when aborting foreground CLUT loading */
333  return HAL_ERROR;
334  }
335  }
336  }
337  }
338  }
339 
340 
341  /* Carry on with de-initialization of low level hardware */
342  HAL_DMA2D_MspDeInit(hdma2d);
343 
344  /* Reset DMA2D control registers*/
345  hdma2d->Instance->CR = 0;
346  hdma2d->Instance->FGOR = 0;
347  hdma2d->Instance->BGOR = 0;
348  hdma2d->Instance->FGPFCCR = 0;
349  hdma2d->Instance->BGPFCCR = 0;
350  hdma2d->Instance->OPFCCR = 0;
351 
352  /* Update error code */
354 
355  /* Initialize the DMA2D state*/
356  hdma2d->State = HAL_DMA2D_STATE_RESET;
357 
358  /* Release Lock */
359  __HAL_UNLOCK(hdma2d);
360 
361  return HAL_OK;
362 }
363 
370 __weak void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d)
371 {
372  /* Prevent unused argument(s) compilation warning */
373  UNUSED(hdma2d);
374 
375  /* NOTE : This function should not be modified; when the callback is needed,
376  the HAL_DMA2D_MspInit can be implemented in the user file.
377  */
378 }
379 
386 __weak void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d)
387 {
388  /* Prevent unused argument(s) compilation warning */
389  UNUSED(hdma2d);
390 
391  /* NOTE : This function should not be modified; when the callback is needed,
392  the HAL_DMA2D_MspDeInit can be implemented in the user file.
393  */
394 }
395 
449 HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
450 {
451  /* Check the parameters */
452  assert_param(IS_DMA2D_LINE(Height));
454 
455  /* Process locked */
456  __HAL_LOCK(hdma2d);
457 
458  /* Change DMA2D peripheral state */
459  hdma2d->State = HAL_DMA2D_STATE_BUSY;
460 
461  /* Configure the source, destination address and the data size */
462  DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
463 
464  /* Enable the Peripheral */
465  __HAL_DMA2D_ENABLE(hdma2d);
466 
467  return HAL_OK;
468 }
469 
483 HAL_StatusTypeDef HAL_DMA2D_Start_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
484 {
485  /* Check the parameters */
486  assert_param(IS_DMA2D_LINE(Height));
488 
489  /* Process locked */
490  __HAL_LOCK(hdma2d);
491 
492  /* Change DMA2D peripheral state */
493  hdma2d->State = HAL_DMA2D_STATE_BUSY;
494 
495  /* Configure the source, destination address and the data size */
496  DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
497 
498  /* Enable the transfer complete, transfer error and configuration error interrupts */
500 
501  /* Enable the Peripheral */
502  __HAL_DMA2D_ENABLE(hdma2d);
503 
504  return HAL_OK;
505 }
506 
518 HAL_StatusTypeDef HAL_DMA2D_BlendingStart(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
519 {
520  /* Check the parameters */
521  assert_param(IS_DMA2D_LINE(Height));
522  assert_param(IS_DMA2D_PIXEL(Width));
523 
524  /* Process locked */
525  __HAL_LOCK(hdma2d);
526 
527  /* Change DMA2D peripheral state */
528  hdma2d->State = HAL_DMA2D_STATE_BUSY;
529 
530  /* Configure DMA2D Stream source2 address */
531  WRITE_REG(hdma2d->Instance->BGMAR, SrcAddress2);
532 
533  /* Configure the source, destination address and the data size */
534  DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
535 
536  /* Enable the Peripheral */
537  __HAL_DMA2D_ENABLE(hdma2d);
538 
539  return HAL_OK;
540 }
541 
553 HAL_StatusTypeDef HAL_DMA2D_BlendingStart_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
554 {
555  /* Check the parameters */
556  assert_param(IS_DMA2D_LINE(Height));
558 
559  /* Process locked */
560  __HAL_LOCK(hdma2d);
561 
562  /* Change DMA2D peripheral state */
563  hdma2d->State = HAL_DMA2D_STATE_BUSY;
564 
565  /* Configure DMA2D Stream source2 address */
566  WRITE_REG(hdma2d->Instance->BGMAR, SrcAddress2);
567 
568  /* Configure the source, destination address and the data size */
569  DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
570 
571  /* Enable the transfer complete, transfer error and configuration error interrupts */
573 
574  /* Enable the Peripheral */
575  __HAL_DMA2D_ENABLE(hdma2d);
576 
577  return HAL_OK;
578 }
579 
587 {
588  uint32_t tickstart = 0;
589 
590  /* Abort the DMA2D transfer */
591  /* START bit is reset to make sure not to set it again, in the event the HW clears it
592  between the register read and the register write by the CPU (writing ‘0’ has no
593  effect on START bitvalue). */
595 
596  /* Get tick */
597  tickstart = HAL_GetTick();
598 
599  /* Check if the DMA2D is effectively disabled */
600  while((hdma2d->Instance->CR & DMA2D_CR_START) != RESET)
601  {
602  if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT_ABORT)
603  {
604  /* Update error code */
606 
607  /* Change the DMA2D state */
608  hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
609 
610  /* Process Unlocked */
611  __HAL_UNLOCK(hdma2d);
612 
613  return HAL_TIMEOUT;
614  }
615  }
616 
617  /* Disable the Transfer Complete, Transfer Error and Configuration Error interrupts */
619 
620  /* Change the DMA2D state*/
621  hdma2d->State = HAL_DMA2D_STATE_READY;
622 
623  /* Process Unlocked */
624  __HAL_UNLOCK(hdma2d);
625 
626  return HAL_OK;
627 }
628 
636 {
637  uint32_t tickstart = 0;
638 
639  /* Suspend the DMA2D transfer */
640  /* START bit is reset to make sure not to set it again, in the event the HW clears it
641  between the register read and the register write by the CPU (writing ‘0’ has no
642  effect on START bitvalue). */
644 
645  /* Get tick */
646  tickstart = HAL_GetTick();
647 
648  /* Check if the DMA2D is effectively suspended */
649  while (((hdma2d->Instance->CR & DMA2D_CR_SUSP) != DMA2D_CR_SUSP) \
650  && ((hdma2d->Instance->CR & DMA2D_CR_START) == DMA2D_CR_START))
651  {
652  if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT_SUSPEND)
653  {
654  /* Update error code */
656 
657  /* Change the DMA2D state */
658  hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
659 
660  return HAL_TIMEOUT;
661  }
662  }
663 
664  /* Check whether or not a transfer is actually suspended and change the DMA2D state accordingly */
665  if ((hdma2d->Instance->CR & DMA2D_CR_START) != RESET)
666  {
667  hdma2d->State = HAL_DMA2D_STATE_SUSPEND;
668  }
669  else
670  {
671  /* Make sure SUSP bit is cleared since it is meaningless
672  when no tranfer is on-going */
673  CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
674  }
675 
676  return HAL_OK;
677 }
678 
686 {
687  /* Check the SUSP and START bits */
689  {
690  /* Ongoing transfer is suspended: change the DMA2D state before resuming */
691  hdma2d->State = HAL_DMA2D_STATE_BUSY;
692  }
693 
694  /* Resume the DMA2D transfer */
695  /* START bit is reset to make sure not to set it again, in the event the HW clears it
696  between the register read and the register write by the CPU (writing ‘0’ has no
697  effect on START bitvalue). */
699 
700  return HAL_OK;
701 }
702 
703 
714 {
715  /* Check the parameters */
716  assert_param(IS_DMA2D_LAYER(LayerIdx));
717 
718  /* Process locked */
719  __HAL_LOCK(hdma2d);
720 
721  /* Change DMA2D peripheral state */
722  hdma2d->State = HAL_DMA2D_STATE_BUSY;
723 
724  if(LayerIdx == 0)
725  {
726  /* Enable the background CLUT loading */
728  }
729  else
730  {
731  /* Enable the foreground CLUT loading */
733  }
734 
735  return HAL_OK;
736 }
737 
738 
752 {
753  /* Check the parameters */
754  assert_param(IS_DMA2D_LAYER(LayerIdx));
757 
758  /* Process locked */
759  __HAL_LOCK(hdma2d);
760 
761  /* Change DMA2D peripheral state */
762  hdma2d->State = HAL_DMA2D_STATE_BUSY;
763 
764  /* Configure the CLUT of the background DMA2D layer */
765  if(LayerIdx == 0)
766  {
767  /* Write background CLUT memory address */
768  WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
769 
770  /* Write background CLUT size and CLUT color mode */
772  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_BGPFCCR_CCM)));
773 
774  /* Enable the CLUT loading for the background */
776  }
777  /* Configure the CLUT of the foreground DMA2D layer */
778  else
779  {
780  /* Write foreground CLUT memory address */
781  WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
782 
783  /* Write foreground CLUT size and CLUT color mode */
785  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_FGPFCCR_CCM)));
786 
787  /* Enable the CLUT loading for the foreground */
789  }
790 
791  return HAL_OK;
792 }
793 
806 {
807  /* Check the parameters */
808  assert_param(IS_DMA2D_LAYER(LayerIdx));
811 
812  /* Process locked */
813  __HAL_LOCK(hdma2d);
814 
815  /* Change DMA2D peripheral state */
816  hdma2d->State = HAL_DMA2D_STATE_BUSY;
817 
818  /* Configure the CLUT of the background DMA2D layer */
819  if(LayerIdx == 0)
820  {
821  /* Write background CLUT memory address */
822  WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
823 
824  /* Write background CLUT size and CLUT color mode */
826  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_BGPFCCR_CCM)));
827 
828  /* Enable the CLUT Transfer Complete, transfer Error, configuration Error and CLUT Access Error interrupts */
830 
831  /* Enable the CLUT loading for the background */
833  }
834  /* Configure the CLUT of the foreground DMA2D layer */
835  else
836  {
837  /* Write foreground CLUT memory address */
838  WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
839 
840  /* Write foreground CLUT size and CLUT color mode */
842  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_FGPFCCR_CCM)));
843 
844  /* Enable the CLUT Transfer Complete, transfer Error, configuration Error and CLUT Access Error interrupts */
846 
847  /* Enable the CLUT loading for the foreground */
849  }
850 
851  return HAL_OK;
852 }
853 
864 {
865  uint32_t tickstart = 0;
866  __IO uint32_t * reg = &(hdma2d->Instance->BGPFCCR); /* by default, point at background register */
867 
868  /* Abort the CLUT loading */
869  SET_BIT(hdma2d->Instance->CR, DMA2D_CR_ABORT);
870 
871  /* If foreground CLUT loading is considered, update local variables */
872  if(LayerIdx == 1)
873  {
874  reg = &(hdma2d->Instance->FGPFCCR);
875  }
876 
877 
878  /* Get tick */
879  tickstart = HAL_GetTick();
880 
881  /* Check if the CLUT loading is aborted */
882  while((*reg & DMA2D_BGPFCCR_START) != RESET)
883  {
884  if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT_ABORT)
885  {
886  /* Update error code */
888 
889  /* Change the DMA2D state */
890  hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
891 
892  /* Process Unlocked */
893  __HAL_UNLOCK(hdma2d);
894 
895  return HAL_TIMEOUT;
896  }
897  }
898 
899  /* Disable the CLUT Transfer Complete, Transfer Error, Configuration Error and CLUT Access Error interrupts */
901 
902  /* Change the DMA2D state*/
903  hdma2d->State = HAL_DMA2D_STATE_READY;
904 
905  /* Process Unlocked */
906  __HAL_UNLOCK(hdma2d);
907 
908  return HAL_OK;
909 }
910 
921 {
922  uint32_t tickstart = 0;
923  __IO uint32_t * reg = &(hdma2d->Instance->BGPFCCR); /* by default, point at background register */
924 
925  /* Suspend the CLUT loading */
926  SET_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
927 
928  /* If foreground CLUT loading is considered, update local variables */
929  if(LayerIdx == 1)
930  {
931  reg = &(hdma2d->Instance->FGPFCCR);
932  }
933 
934  /* Get tick */
935  tickstart = HAL_GetTick();
936 
937  /* Check if the CLUT loading is suspended */
938  while (((hdma2d->Instance->CR & DMA2D_CR_SUSP) != DMA2D_CR_SUSP) \
939  && ((*reg & DMA2D_BGPFCCR_START) == DMA2D_BGPFCCR_START))
940  {
941  if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT_SUSPEND)
942  {
943  /* Update error code */
945 
946  /* Change the DMA2D state */
947  hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
948 
949  return HAL_TIMEOUT;
950  }
951  }
952 
953  /* Check whether or not a transfer is actually suspended and change the DMA2D state accordingly */
954  if ((*reg & DMA2D_BGPFCCR_START) != RESET)
955  {
956  hdma2d->State = HAL_DMA2D_STATE_SUSPEND;
957  }
958  else
959  {
960  /* Make sure SUSP bit is cleared since it is meaningless
961  when no tranfer is on-going */
962  CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
963  }
964 
965  return HAL_OK;
966 }
967 
978 {
979  /* Check the SUSP and START bits for background or foreground CLUT loading */
980  if(LayerIdx == 0)
981  {
982  /* Background CLUT loading suspension check */
983  if (((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
984  && ((hdma2d->Instance->BGPFCCR & DMA2D_BGPFCCR_START) == DMA2D_BGPFCCR_START))
985  {
986  /* Ongoing CLUT loading is suspended: change the DMA2D state before resuming */
987  hdma2d->State = HAL_DMA2D_STATE_BUSY;
988  }
989  }
990  else
991  {
992  /* Foreground CLUT loading suspension check */
993  if (((hdma2d->Instance->CR & DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
995  {
996  /* Ongoing CLUT loading is suspended: change the DMA2D state before resuming */
997  hdma2d->State = HAL_DMA2D_STATE_BUSY;
998  }
999  }
1000 
1001  /* Resume the CLUT loading */
1002  CLEAR_BIT(hdma2d->Instance->CR, DMA2D_CR_SUSP);
1003 
1004  return HAL_OK;
1005 }
1006 
1007 
1017 {
1018  uint32_t tickstart = 0;
1019  __IO uint32_t isrflags = 0x0;
1020 
1021  /* Polling for DMA2D transfer */
1022  if((hdma2d->Instance->CR & DMA2D_CR_START) != RESET)
1023  {
1024  /* Get tick */
1025  tickstart = HAL_GetTick();
1026 
1027  while(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TC) == RESET)
1028  {
1029  isrflags = READ_REG(hdma2d->Instance->ISR);
1030  if ((isrflags & (DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET)
1031  {
1032  if ((isrflags & DMA2D_FLAG_CE) != RESET)
1033  {
1034  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1035  }
1036  if ((isrflags & DMA2D_FLAG_TE) != RESET)
1037  {
1038  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1039  }
1040  /* Clear the transfer and configuration error flags */
1041  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE | DMA2D_FLAG_TE);
1042 
1043  /* Change DMA2D state */
1044  hdma2d->State = HAL_DMA2D_STATE_ERROR;
1045 
1046  /* Process unlocked */
1047  __HAL_UNLOCK(hdma2d);
1048 
1049  return HAL_ERROR;
1050  }
1051  /* Check for the Timeout */
1052  if(Timeout != HAL_MAX_DELAY)
1053  {
1054  if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
1055  {
1056  /* Update error code */
1058 
1059  /* Change the DMA2D state */
1060  hdma2d->State = HAL_DMA2D_STATE_TIMEOUT;
1061 
1062  /* Process unlocked */
1063  __HAL_UNLOCK(hdma2d);
1064 
1065  return HAL_TIMEOUT;
1066  }
1067  }
1068  }
1069  }
1070  /* Polling for CLUT loading (foreground or background) */
1071  if (((hdma2d->Instance->FGPFCCR & DMA2D_FGPFCCR_START) != RESET) ||
1072  ((hdma2d->Instance->BGPFCCR & DMA2D_BGPFCCR_START) != RESET))
1073  {
1074  /* Get tick */
1075  tickstart = HAL_GetTick();
1076 
1077  while(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CTC) == RESET)
1078  {
1079  isrflags = READ_REG(hdma2d->Instance->ISR);
1080  if ((isrflags & (DMA2D_FLAG_CAE|DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET)
1081  {
1082  if ((isrflags & DMA2D_FLAG_CAE) != RESET)
1083  {
1084  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE;
1085  }
1086  if ((isrflags & DMA2D_FLAG_CE) != RESET)
1087  {
1088  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1089  }
1090  if ((isrflags & DMA2D_FLAG_TE) != RESET)
1091  {
1092  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1093  }
1094  /* Clear the CLUT Access Error, Configuration Error and Transfer Error flags */
1095  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE | DMA2D_FLAG_CE | DMA2D_FLAG_TE);
1096 
1097  /* Change DMA2D state */
1098  hdma2d->State= HAL_DMA2D_STATE_ERROR;
1099 
1100  /* Process unlocked */
1101  __HAL_UNLOCK(hdma2d);
1102 
1103  return HAL_ERROR;
1104  }
1105  /* Check for the Timeout */
1106  if(Timeout != HAL_MAX_DELAY)
1107  {
1108  if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
1109  {
1110  /* Update error code */
1112 
1113  /* Change the DMA2D state */
1114  hdma2d->State= HAL_DMA2D_STATE_TIMEOUT;
1115 
1116  /* Process unlocked */
1117  __HAL_UNLOCK(hdma2d);
1118 
1119  return HAL_TIMEOUT;
1120  }
1121  }
1122  }
1123  }
1124 
1125  /* Clear the transfer complete and CLUT loading flags */
1127 
1128  /* Change DMA2D state */
1129  hdma2d->State = HAL_DMA2D_STATE_READY;
1130 
1131  /* Process unlocked */
1132  __HAL_UNLOCK(hdma2d);
1133 
1134  return HAL_OK;
1135 }
1143 {
1144  uint32_t isrflags = READ_REG(hdma2d->Instance->ISR);
1145  uint32_t crflags = READ_REG(hdma2d->Instance->CR);
1146 
1147  /* Transfer Error Interrupt management ***************************************/
1148  if ((isrflags & DMA2D_FLAG_TE) != RESET)
1149  {
1150  if ((crflags & DMA2D_IT_TE) != RESET)
1151  {
1152  /* Disable the transfer Error interrupt */
1153  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TE);
1154 
1155  /* Update error code */
1156  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
1157 
1158  /* Clear the transfer error flag */
1159  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TE);
1160 
1161  /* Change DMA2D state */
1162  hdma2d->State = HAL_DMA2D_STATE_ERROR;
1163 
1164  /* Process Unlocked */
1165  __HAL_UNLOCK(hdma2d);
1166 
1167  if(hdma2d->XferErrorCallback != NULL)
1168  {
1169  /* Transfer error Callback */
1170  hdma2d->XferErrorCallback(hdma2d);
1171  }
1172  }
1173  }
1174  /* Configuration Error Interrupt management **********************************/
1175  if ((isrflags & DMA2D_FLAG_CE) != RESET)
1176  {
1177  if ((crflags & DMA2D_IT_CE) != RESET)
1178  {
1179  /* Disable the Configuration Error interrupt */
1180  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CE);
1181 
1182  /* Clear the Configuration error flag */
1183  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE);
1184 
1185  /* Update error code */
1186  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
1187 
1188  /* Change DMA2D state */
1189  hdma2d->State = HAL_DMA2D_STATE_ERROR;
1190 
1191  /* Process Unlocked */
1192  __HAL_UNLOCK(hdma2d);
1193 
1194  if(hdma2d->XferErrorCallback != NULL)
1195  {
1196  /* Transfer error Callback */
1197  hdma2d->XferErrorCallback(hdma2d);
1198  }
1199  }
1200  }
1201  /* CLUT access Error Interrupt management ***********************************/
1202  if ((isrflags & DMA2D_FLAG_CAE) != RESET)
1203  {
1204  if ((crflags & DMA2D_IT_CAE) != RESET)
1205  {
1206  /* Disable the CLUT access error interrupt */
1207  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CAE);
1208 
1209  /* Clear the CLUT access error flag */
1210  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE);
1211 
1212  /* Update error code */
1213  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE;
1214 
1215  /* Change DMA2D state */
1216  hdma2d->State = HAL_DMA2D_STATE_ERROR;
1217 
1218  /* Process Unlocked */
1219  __HAL_UNLOCK(hdma2d);
1220 
1221  if(hdma2d->XferErrorCallback != NULL)
1222  {
1223  /* Transfer error Callback */
1224  hdma2d->XferErrorCallback(hdma2d);
1225  }
1226  }
1227  }
1228  /* Transfer watermark Interrupt management **********************************/
1229  if ((isrflags & DMA2D_FLAG_TW) != RESET)
1230  {
1231  if ((crflags & DMA2D_IT_TW) != RESET)
1232  {
1233  /* Disable the transfer watermark interrupt */
1234  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TW);
1235 
1236  /* Clear the transfer watermark flag */
1237  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TW);
1238 
1239  /* Transfer watermark Callback */
1241  }
1242  }
1243  /* Transfer Complete Interrupt management ************************************/
1244  if ((isrflags & DMA2D_FLAG_TC) != RESET)
1245  {
1246  if ((crflags & DMA2D_IT_TC) != RESET)
1247  {
1248  /* Disable the transfer complete interrupt */
1249  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TC);
1250 
1251  /* Clear the transfer complete flag */
1252  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC);
1253 
1254  /* Update error code */
1255  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE;
1256 
1257  /* Change DMA2D state */
1258  hdma2d->State = HAL_DMA2D_STATE_READY;
1259 
1260  /* Process Unlocked */
1261  __HAL_UNLOCK(hdma2d);
1262 
1263  if(hdma2d->XferCpltCallback != NULL)
1264  {
1265  /* Transfer complete Callback */
1266  hdma2d->XferCpltCallback(hdma2d);
1267  }
1268  }
1269  }
1270  /* CLUT Transfer Complete Interrupt management ******************************/
1271  if ((isrflags & DMA2D_FLAG_CTC) != RESET)
1272  {
1273  if ((crflags & DMA2D_IT_CTC) != RESET)
1274  {
1275  /* Disable the CLUT transfer complete interrupt */
1276  __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CTC);
1277 
1278  /* Clear the CLUT transfer complete flag */
1279  __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CTC);
1280 
1281  /* Update error code */
1282  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE;
1283 
1284  /* Change DMA2D state */
1285  hdma2d->State = HAL_DMA2D_STATE_READY;
1286 
1287  /* Process Unlocked */
1288  __HAL_UNLOCK(hdma2d);
1289 
1290  /* CLUT Transfer complete Callback */
1292  }
1293  }
1294 
1295 }
1296 
1304 {
1305  /* Prevent unused argument(s) compilation warning */
1306  UNUSED(hdma2d);
1307 
1308  /* NOTE : This function should not be modified; when the callback is needed,
1309  the HAL_DMA2D_LineEventCallback can be implemented in the user file.
1310  */
1311 }
1312 
1320 {
1321  /* Prevent unused argument(s) compilation warning */
1322  UNUSED(hdma2d);
1323 
1324  /* NOTE : This function should not be modified; when the callback is needed,
1325  the HAL_DMA2D_CLUTLoadingCpltCallback can be implemented in the user file.
1326  */
1327 }
1328 
1363 {
1364  DMA2D_LayerCfgTypeDef *pLayerCfg = &hdma2d->LayerCfg[LayerIdx];
1365 
1366  uint32_t regMask = 0, regValue = 0;
1367 
1368  /* Check the parameters */
1369  assert_param(IS_DMA2D_LAYER(LayerIdx));
1371  if(hdma2d->Init.Mode != DMA2D_R2M)
1372  {
1374  if(hdma2d->Init.Mode != DMA2D_M2M)
1375  {
1377  }
1378  }
1379 
1380  /* Process locked */
1381  __HAL_LOCK(hdma2d);
1382 
1383  /* Change DMA2D peripheral state */
1384  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1385 
1386  /* DMA2D BGPFCR register configuration -----------------------------------*/
1387  /* Prepare the value to be written to the BGPFCCR register */
1388 
1389  regValue = pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << DMA2D_POSITION_BGPFCCR_AM);
1391 
1392 #if defined (DMA2D_FGPFCCR_AI) && defined (DMA2D_BGPFCCR_AI)
1393  regValue |= (pLayerCfg->AlphaInverted << DMA2D_POSITION_BGPFCCR_AI);
1394  regMask |= DMA2D_BGPFCCR_AI;
1395 #endif /* (DMA2D_FGPFCCR_AI) && (DMA2D_BGPFCCR_AI) */
1396 
1397 #if defined (DMA2D_FGPFCCR_RBS) && defined (DMA2D_BGPFCCR_RBS)
1398  regValue |= (pLayerCfg->RedBlueSwap << DMA2D_POSITION_BGPFCCR_RBS);
1399  regMask |= DMA2D_BGPFCCR_RBS;
1400 #endif
1401 
1402  if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1403  {
1404  regValue |= (pLayerCfg->InputAlpha & DMA2D_BGPFCCR_ALPHA);
1405  }
1406  else
1407  {
1408  regValue |= (pLayerCfg->InputAlpha << DMA2D_POSITION_BGPFCCR_ALPHA);
1409  }
1410 
1411  /* Configure the background DMA2D layer */
1412  if(LayerIdx == 0)
1413  {
1414  /* Write DMA2D BGPFCCR register */
1415  MODIFY_REG(hdma2d->Instance->BGPFCCR, regMask, regValue);
1416 
1417  /* DMA2D BGOR register configuration -------------------------------------*/
1418  WRITE_REG(hdma2d->Instance->BGOR, pLayerCfg->InputOffset);
1419 
1420  /* DMA2D BGCOLR register configuration -------------------------------------*/
1421  if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1422  {
1424  }
1425  }
1426  /* Configure the foreground DMA2D layer */
1427  else
1428  {
1429  /* Write DMA2D FGPFCCR register */
1430  MODIFY_REG(hdma2d->Instance->FGPFCCR, regMask, regValue);
1431 
1432  /* DMA2D FGOR register configuration -------------------------------------*/
1433  WRITE_REG(hdma2d->Instance->FGOR, pLayerCfg->InputOffset);
1434 
1435  /* DMA2D FGCOLR register configuration -------------------------------------*/
1436  if ((pLayerCfg->InputColorMode == DMA2D_INPUT_A4) || (pLayerCfg->InputColorMode == DMA2D_INPUT_A8))
1437  {
1439  }
1440  }
1441  /* Initialize the DMA2D state*/
1442  hdma2d->State = HAL_DMA2D_STATE_READY;
1443 
1444  /* Process unlocked */
1445  __HAL_UNLOCK(hdma2d);
1446 
1447  return HAL_OK;
1448 }
1449 
1462 {
1463  /* Check the parameters */
1464  assert_param(IS_DMA2D_LAYER(LayerIdx));
1467 
1468  /* Process locked */
1469  __HAL_LOCK(hdma2d);
1470 
1471  /* Change DMA2D peripheral state */
1472  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1473 
1474  /* Configure the CLUT of the background DMA2D layer */
1475  if(LayerIdx == 0)
1476  {
1477  /* Write background CLUT memory address */
1478  WRITE_REG(hdma2d->Instance->BGCMAR, (uint32_t)CLUTCfg.pCLUT);
1479 
1480  /* Write background CLUT size and CLUT color mode */
1482  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_BGPFCCR_CCM)));
1483  }
1484  /* Configure the CLUT of the foreground DMA2D layer */
1485  else
1486  {
1487  /* Write foreground CLUT memory address */
1488  WRITE_REG(hdma2d->Instance->FGCMAR, (uint32_t)CLUTCfg.pCLUT);
1489 
1490  /* Write foreground CLUT size and CLUT color mode */
1492  ((CLUTCfg.Size << DMA2D_POSITION_BGPFCCR_CS) | (CLUTCfg.CLUTColorMode << DMA2D_POSITION_FGPFCCR_CCM)));
1493  }
1494 
1495  /* Set the DMA2D state to Ready*/
1496  hdma2d->State = HAL_DMA2D_STATE_READY;
1497 
1498  /* Process unlocked */
1499  __HAL_UNLOCK(hdma2d);
1500 
1501  return HAL_OK;
1502 }
1503 
1504 
1516 {
1517  /* Check the parameters */
1519 
1520  if (Line > DMA2D_LWR_LW)
1521  {
1522  return HAL_ERROR;
1523  }
1524  else
1525  {
1526  /* Process locked */
1527  __HAL_LOCK(hdma2d);
1528 
1529  /* Change DMA2D peripheral state */
1530  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1531 
1532  /* Sets the Line watermark configuration */
1533  WRITE_REG(hdma2d->Instance->LWR, Line);
1534 
1535  /* Enable the Line interrupt */
1537 
1538  /* Initialize the DMA2D state*/
1539  hdma2d->State = HAL_DMA2D_STATE_READY;
1540 
1541  /* Process unlocked */
1542  __HAL_UNLOCK(hdma2d);
1543 
1544  return HAL_OK;
1545  }
1546 }
1547 
1554 {
1555  /* Process Locked */
1556  __HAL_LOCK(hdma2d);
1557 
1558  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1559 
1560  /* Set DMA2D_AMTCR EN bit */
1561  SET_BIT(hdma2d->Instance->AMTCR, DMA2D_AMTCR_EN);
1562 
1563  hdma2d->State = HAL_DMA2D_STATE_READY;
1564 
1565  /* Process Unlocked */
1566  __HAL_UNLOCK(hdma2d);
1567 
1568  return HAL_OK;
1569 }
1570 
1577 {
1578  /* Process Locked */
1579  __HAL_LOCK(hdma2d);
1580 
1581  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1582 
1583  /* Clear DMA2D_AMTCR EN bit */
1585 
1586  hdma2d->State = HAL_DMA2D_STATE_READY;
1587 
1588  /* Process Unlocked */
1589  __HAL_UNLOCK(hdma2d);
1590 
1591  return HAL_OK;
1592 }
1593 
1603 {
1604  /* Process Locked */
1605  __HAL_LOCK(hdma2d);
1606 
1607  hdma2d->State = HAL_DMA2D_STATE_BUSY;
1608 
1609  /* Set DMA2D_AMTCR DT field */
1610  MODIFY_REG(hdma2d->Instance->AMTCR, DMA2D_AMTCR_DT, (((uint32_t) DeadTime) << DMA2D_POSITION_AMTCR_DT));
1611 
1612  hdma2d->State = HAL_DMA2D_STATE_READY;
1613 
1614  /* Process Unlocked */
1615  __HAL_UNLOCK(hdma2d);
1616 
1617  return HAL_OK;
1618 }
1619 
1648 {
1649  return hdma2d->State;
1650 }
1651 
1658 uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d)
1659 {
1660  return hdma2d->ErrorCode;
1661 }
1662 
1686 static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
1687 {
1688  uint32_t tmp = 0;
1689  uint32_t tmp1 = 0;
1690  uint32_t tmp2 = 0;
1691  uint32_t tmp3 = 0;
1692  uint32_t tmp4 = 0;
1693 
1694  /* Configure DMA2D data size */
1695  MODIFY_REG(hdma2d->Instance->NLR, (DMA2D_NLR_NL|DMA2D_NLR_PL), (Height| (Width << DMA2D_POSITION_NLR_PL)));
1696 
1697  /* Configure DMA2D destination address */
1698  WRITE_REG(hdma2d->Instance->OMAR, DstAddress);
1699 
1700  /* Register to memory DMA2D mode selected */
1701  if (hdma2d->Init.Mode == DMA2D_R2M)
1702  {
1703  tmp1 = pdata & DMA2D_OCOLR_ALPHA_1;
1704  tmp2 = pdata & DMA2D_OCOLR_RED_1;
1705  tmp3 = pdata & DMA2D_OCOLR_GREEN_1;
1706  tmp4 = pdata & DMA2D_OCOLR_BLUE_1;
1707 
1708  /* Prepare the value to be written to the OCOLR register according to the color mode */
1709  if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_ARGB8888)
1710  {
1711  tmp = (tmp3 | tmp2 | tmp1| tmp4);
1712  }
1713  else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_RGB888)
1714  {
1715  tmp = (tmp3 | tmp2 | tmp4);
1716  }
1717  else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_RGB565)
1718  {
1719  tmp2 = (tmp2 >> 19);
1720  tmp3 = (tmp3 >> 10);
1721  tmp4 = (tmp4 >> 3 );
1722  tmp = ((tmp3 << 5) | (tmp2 << 11) | tmp4);
1723  }
1724  else if (hdma2d->Init.ColorMode == DMA2D_OUTPUT_ARGB1555)
1725  {
1726  tmp1 = (tmp1 >> 31);
1727  tmp2 = (tmp2 >> 19);
1728  tmp3 = (tmp3 >> 11);
1729  tmp4 = (tmp4 >> 3 );
1730  tmp = ((tmp3 << 5) | (tmp2 << 10) | (tmp1 << 15) | tmp4);
1731  }
1732  else /* Dhdma2d->Init.ColorMode = DMA2D_OUTPUT_ARGB4444 */
1733  {
1734  tmp1 = (tmp1 >> 28);
1735  tmp2 = (tmp2 >> 20);
1736  tmp3 = (tmp3 >> 12);
1737  tmp4 = (tmp4 >> 4 );
1738  tmp = ((tmp3 << 4) | (tmp2 << 8) | (tmp1 << 12) | tmp4);
1739  }
1740  /* Write to DMA2D OCOLR register */
1741  WRITE_REG(hdma2d->Instance->OCOLR, tmp);
1742  }
1743  else /* M2M, M2M_PFC or M2M_Blending DMA2D Mode */
1744  {
1745  /* Configure DMA2D source address */
1746  WRITE_REG(hdma2d->Instance->FGMAR, pdata);
1747  }
1748 }
1749 
1753 #endif /* HAL_DMA2D_MODULE_ENABLED */
1754 
1762 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
#define CLEAR_BIT(REG, BIT)
Definition: stm32f7xx.h:180
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
Definition: stm32f7xx.h:190
#define DMA2D_BGPFCCR_CCM
Definition: stm32f745xx.h:3533
#define DMA2D_BGCOLR_BLUE
Definition: stm32f745xx.h:3543
#define HAL_DMA2D_ERROR_TE
#define DMA2D_BGPFCCR_AI
Definition: stm32f765xx.h:3836
#define __HAL_DMA2D_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the specified DMA2D interrupts.
HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Resume(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
HAL_StatusTypeDef HAL_DMA2D_Suspend(DMA2D_HandleTypeDef *hdma2d)
__IO uint32_t OOR
Definition: stm32f745xx.h:431
#define DMA2D_CR_SUSP
Definition: stm32f745xx.h:3451
HAL_StatusTypeDef HAL_DMA2D_Start_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
#define IS_DMA2D_LINEWATERMARK(LineWatermark)
__IO uint32_t OPFCCR
Definition: stm32f745xx.h:428
__IO uint32_t OCOLR
Definition: stm32f745xx.h:429
#define DMA2D_OUTPUT_RGB888
#define DMA2D_BGPFCCR_ALPHA
Definition: stm32f745xx.h:3539
HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
#define assert_param(expr)
Include module&#39;s header file.
#define DMA2D_OCOLR_BLUE_1
Definition: stm32f745xx.h:3566
#define HAL_DMA2D_ERROR_TIMEOUT
#define HAL_DMA2D_ERROR_CAE
#define DMA2D_BGPFCCR_CS
Definition: stm32f745xx.h:3535
__IO uint32_t FGPFCCR
Definition: stm32f745xx.h:422
__IO uint32_t BGMAR
Definition: stm32f745xx.h:420
#define DMA2D_OCOLR_GREEN_1
Definition: stm32f745xx.h:3567
#define DMA2D_IT_CE
#define __HAL_UNLOCK(__HANDLE__)
#define DMA2D_LWR_LW
Definition: stm32f745xx.h:3603
__IO uint32_t FGMAR
Definition: stm32f745xx.h:418
DMA2D CLUT Structure definition.
#define DMA2D_R2M
#define DMA2D_IT_TE
#define DMA2D_IT_CTC
#define DMA2D_NLR_NL
Definition: stm32f745xx.h:3598
#define DMA2D_OUTPUT_RGB565
__IO uint32_t BGCMAR
Definition: stm32f745xx.h:427
#define __HAL_DMA2D_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the DMA2D pending flags.
#define IS_DMA2D_OFFSET(OOFFSET)
__IO uint32_t FGOR
Definition: stm32f745xx.h:419
void(* XferErrorCallback)(struct __DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_OPFCCR_RBS
Definition: stm32f765xx.h:3861
#define WRITE_REG(REG, VAL)
Definition: stm32f7xx.h:186
#define DMA2D_IT_TW
#define IS_DMA2D_ALL_INSTANCE(__INSTANCE__)
Definition: stm32f745xx.h:8800
__IO uint32_t FGCMAR
Definition: stm32f745xx.h:426
#define IS_DMA2D_LINE(LINE)
#define DMA2D_FGPFCCR_CS
Definition: stm32f745xx.h:3514
#define DMA2D_FLAG_TE
HAL_StatusTypeDef HAL_DMA2D_ConfigDeadTime(DMA2D_HandleTypeDef *hdma2d, uint8_t DeadTime)
__IO uint32_t OMAR
Definition: stm32f745xx.h:430
void HAL_DMA2D_IRQHandler(DMA2D_HandleTypeDef *hdma2d)
HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
HAL_StatusTypeDef HAL_DMA2D_CLUTLoad(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
__IO uint32_t NLR
Definition: stm32f745xx.h:432
#define DMA2D_FLAG_TW
#define __HAL_DMA2D_GET_FLAG(__HANDLE__, __FLAG__)
Get the DMA2D pending flags.
#define DMA2D_CR_MODE
Definition: stm32f745xx.h:3459
#define DMA2D_AMTCR_DT
Definition: stm32f745xx.h:3608
__IO uint32_t BGOR
Definition: stm32f745xx.h:421
#define __HAL_LOCK(__HANDLE__)
void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef *hdma2d)
#define HAL_DMA2D_ERROR_NONE
HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d)
#define NULL
Definition: usbd_def.h:53
#define HAL_MAX_DELAY
#define DMA2D_INPUT_A4
HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Suspend(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
#define __IO
Definition: core_cm0.h:213
void(* XferCpltCallback)(struct __DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_IT_CAE
#define DMA2D_OUTPUT_ARGB8888
DMA2D Layer structure definition.
#define DMA2D_OPFCCR_AI
Definition: stm32f765xx.h:3860
#define HAL_DMA2D_ERROR_CE
This file contains all the functions prototypes for the HAL module driver.
#define DMA2D_CR_START
Definition: stm32f745xx.h:3450
#define DMA2D_OUTPUT_ARGB1555
#define __HAL_RCC_DMA2D_IS_CLK_ENABLED()
#define DMA2D_FGCOLR_GREEN
Definition: stm32f745xx.h:3523
__IO HAL_DMA2D_StateTypeDef State
__IO uint32_t CR
Definition: stm32f745xx.h:415
#define DMA2D_OCOLR_RED_1
Definition: stm32f745xx.h:3568
#define DMA2D_OPFCCR_CM
Definition: stm32f745xx.h:3557
uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d)
void HAL_DMA2D_LineEventCallback(DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_BGPFCCR_RBS
Definition: stm32f765xx.h:3837
#define DMA2D_FLAG_CAE
HAL_DMA2D_StateTypeDef HAL_DMA2D_GetState(DMA2D_HandleTypeDef *hdma2d)
HAL_StatusTypeDef HAL_DMA2D_DeInit(DMA2D_HandleTypeDef *hdma2d)
void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_AMTCR_EN
Definition: stm32f745xx.h:3607
#define IS_DMA2D_CLUT_SIZE(CLUT_SIZE)
__IO uint32_t BGPFCCR
Definition: stm32f745xx.h:424
#define DMA2D_IT_TC
HAL_StatusTypeDef HAL_DMA2D_EnableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
#define __HAL_DMA2D_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified DMA2D interrupts.
HAL_StatusTypeDef HAL_DMA2D_DisableDeadTime(DMA2D_HandleTypeDef *hdma2d)
HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Abort(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
#define UNUSED(x)
__IO uint32_t AMTCR
Definition: stm32f745xx.h:434
#define DMA2D_BGPFCCR_CM
Definition: stm32f745xx.h:3528
#define DMA2D_FGCOLR_BLUE
Definition: stm32f745xx.h:3522
#define DMA2D_M2M
#define SET_BIT(REG, BIT)
Definition: stm32f7xx.h:178
__IO uint32_t LWR
Definition: stm32f745xx.h:433
#define IS_DMA2D_CLUT_CM(CLUT_CM)
#define READ_REG(REG)
Definition: stm32f7xx.h:188
__IO uint32_t ISR
Definition: stm32f745xx.h:416
#define DMA2D_FLAG_CTC
HAL_DMA2D_StateTypeDef
HAL DMA2D State structures definition.
HAL_StatusTypeDef HAL_DMA2D_ConfigCLUT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
#define DMA2D_FGPFCCR_CCM
Definition: stm32f745xx.h:3512
HAL_StatusTypeDef HAL_DMA2D_EnableDeadTime(DMA2D_HandleTypeDef *hdma2d)
HAL_StatusTypeDef HAL_DMA2D_PollForTransfer(DMA2D_HandleTypeDef *hdma2d, uint32_t Timeout)
#define IS_DMA2D_PIXEL(PIXEL)
#define __HAL_DMA2D_ENABLE(__HANDLE__)
Enable the DMA2D.
HAL_StatusTypeDef HAL_DMA2D_BlendingStart(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
HAL_StatusTypeDef HAL_DMA2D_Abort(DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_OOR_LO
Definition: stm32f745xx.h:3594
#define IS_DMA2D_MODE(MODE)
__IO uint32_t FGCOLR
Definition: stm32f745xx.h:423
#define IS_DMA2D_INPUT_COLOR_MODE(INPUT_CM)
#define DMA2D_NLR_PL
Definition: stm32f745xx.h:3599
#define DMA2D_INPUT_A8
#define DMA2D_OCOLR_ALPHA_1
Definition: stm32f745xx.h:3569
HAL_StatusTypeDef HAL_DMA2D_ProgramLineEvent(DMA2D_HandleTypeDef *hdma2d, uint32_t Line)
HAL_StatusTypeDef
HAL Status structures definition.
#define DMA2D_FGCOLR_RED
Definition: stm32f745xx.h:3524
__IO uint32_t BGCOLR
Definition: stm32f745xx.h:425
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define IS_DMA2D_CMODE(MODE_ARGB)
#define DMA2D_BGCOLR_RED
Definition: stm32f745xx.h:3545
#define IS_DMA2D_ALPHA_MODE(AlphaMode)
HAL_StatusTypeDef HAL_DMA2D_BlendingStart_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
#define IS_DMA2D_LAYER(LAYER)
#define DMA2D_BGPFCCR_START
Definition: stm32f745xx.h:3534
#define DMA2D_FLAG_CE
HAL_StatusTypeDef HAL_DMA2D_CLUTLoad_IT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
#define DMA2D_BGCOLR_GREEN
Definition: stm32f745xx.h:3544
#define DMA2D_FLAG_TC
void HAL_DMA2D_CLUTLoadingCpltCallback(DMA2D_HandleTypeDef *hdma2d)
#define DMA2D_BGPFCCR_AM
Definition: stm32f745xx.h:3536
HAL_StatusTypeDef HAL_DMA2D_Resume(DMA2D_HandleTypeDef *hdma2d)
DMA2D_LayerCfgTypeDef LayerCfg[MAX_DMA2D_LAYER]
DMA2D handle Structure definition.
#define DMA2D_CR_ABORT
Definition: stm32f745xx.h:3452
#define DMA2D_FGPFCCR_START
Definition: stm32f745xx.h:3513