You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

636 lines
25 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_ll_dma2d.c
  4. * @author MCD Application Team
  5. * @brief DMA2D LL module driver.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. #if defined(USE_FULL_LL_DRIVER)
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "stm32h7xx_ll_dma2d.h"
  22. #include "stm32h7xx_ll_bus.h"
  23. #ifdef USE_FULL_ASSERT
  24. #include "stm32_assert.h"
  25. #else
  26. #define assert_param(expr) ((void)0U)
  27. #endif
  28. /** @addtogroup STM32H7xx_LL_Driver
  29. * @{
  30. */
  31. #if defined (DMA2D)
  32. /** @addtogroup DMA2D_LL
  33. * @{
  34. */
  35. /* Private types -------------------------------------------------------------*/
  36. /* Private variables ---------------------------------------------------------*/
  37. /* Private constants ---------------------------------------------------------*/
  38. /** @addtogroup DMA2D_LL_Private_Constants DMA2D Private Constants
  39. * @{
  40. */
  41. #define LL_DMA2D_COLOR 0xFFU /*!< Maximum output color setting */
  42. #define LL_DMA2D_NUMBEROFLINES DMA2D_NLR_NL /*!< Maximum number of lines */
  43. #define LL_DMA2D_NUMBEROFPIXELS (DMA2D_NLR_PL >> DMA2D_NLR_PL_Pos) /*!< Maximum number of pixels per lines */
  44. #define LL_DMA2D_OFFSET_MAX 0x3FFFU /*!< Maximum output line offset expressed in pixels */
  45. #define LL_DMA2D_CLUTSIZE_MAX 0xFFU /*!< Maximum CLUT size */
  46. /**
  47. * @}
  48. */
  49. /* Private macros ------------------------------------------------------------*/
  50. /** @addtogroup DMA2D_LL_Private_Macros
  51. * @{
  52. */
  53. #define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \
  54. ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \
  55. ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \
  56. ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG) || \
  57. ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG) || \
  58. ((MODE) == LL_DMA2D_MODE_R2M))
  59. #define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \
  60. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \
  61. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB565) || \
  62. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB1555) || \
  63. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB4444))
  64. #define IS_LL_DMA2D_GREEN(GREEN) ((GREEN) <= LL_DMA2D_COLOR)
  65. #define IS_LL_DMA2D_RED(RED) ((RED) <= LL_DMA2D_COLOR)
  66. #define IS_LL_DMA2D_BLUE(BLUE) ((BLUE) <= LL_DMA2D_COLOR)
  67. #define IS_LL_DMA2D_ALPHA(ALPHA) ((ALPHA) <= LL_DMA2D_COLOR)
  68. #define IS_LL_DMA2D_OFFSET_MODE(MODE) (((MODE) == LL_DMA2D_LINE_OFFSET_PIXELS) || \
  69. ((MODE) == LL_DMA2D_LINE_OFFSET_BYTES))
  70. #define IS_LL_DMA2D_OFFSET(OFFSET) ((OFFSET) <= LL_DMA2D_OFFSET_MAX)
  71. #define IS_LL_DMA2D_LINE(LINES) ((LINES) <= LL_DMA2D_NUMBEROFLINES)
  72. #define IS_LL_DMA2D_PIXEL(PIXELS) ((PIXELS) <= LL_DMA2D_NUMBEROFPIXELS)
  73. #define IS_LL_DMA2D_SWAP_MODE(MODE) (((MODE) == LL_DMA2D_SWAP_MODE_REGULAR) || \
  74. ((MODE) == LL_DMA2D_SWAP_MODE_TWO_BY_TWO))
  75. #define IS_LL_DMA2D_ALPHAINV(ALPHA) (((ALPHA) == LL_DMA2D_ALPHA_REGULAR) || \
  76. ((ALPHA) == LL_DMA2D_ALPHA_INVERTED))
  77. #define IS_LL_DMA2D_RBSWAP(RBSWAP) (((RBSWAP) == LL_DMA2D_RB_MODE_REGULAR) || \
  78. ((RBSWAP) == LL_DMA2D_RB_MODE_SWAP))
  79. #define IS_LL_DMA2D_LCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB8888) || \
  80. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB888) || \
  81. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB565) || \
  82. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB1555) || \
  83. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB4444) || \
  84. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L8) || \
  85. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL44) || \
  86. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL88) || \
  87. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L4) || \
  88. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A8) || \
  89. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A4))
  90. #define IS_LL_DMA2D_CLUTCMODE(CLUTCMODE) (((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_ARGB8888) || \
  91. ((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_RGB888))
  92. #define IS_LL_DMA2D_CLUTSIZE(SIZE) ((SIZE) <= LL_DMA2D_CLUTSIZE_MAX)
  93. #define IS_LL_DMA2D_ALPHAMODE(MODE) (((MODE) == LL_DMA2D_ALPHA_MODE_NO_MODIF) || \
  94. ((MODE) == LL_DMA2D_ALPHA_MODE_REPLACE) || \
  95. ((MODE) == LL_DMA2D_ALPHA_MODE_COMBINE))
  96. #define IS_LL_DMA2D_CHROMA_SUB_SAMPLING(CSS) (((CSS) == LL_DMA2D_CSS_444) || \
  97. ((CSS) == LL_DMA2D_CSS_422) || \
  98. ((CSS) == LL_DMA2D_CSS_420))
  99. /**
  100. * @}
  101. */
  102. /* Private function prototypes -----------------------------------------------*/
  103. /* Exported functions --------------------------------------------------------*/
  104. /** @addtogroup DMA2D_LL_Exported_Functions
  105. * @{
  106. */
  107. /** @addtogroup DMA2D_LL_EF_Init_Functions Initialization and De-initialization Functions
  108. * @{
  109. */
  110. /**
  111. * @brief De-initialize DMA2D registers (registers restored to their default values).
  112. * @param DMA2Dx DMA2D Instance
  113. * @retval An ErrorStatus enumeration value:
  114. * - SUCCESS: DMA2D registers are de-initialized
  115. * - ERROR: DMA2D registers are not de-initialized
  116. */
  117. ErrorStatus LL_DMA2D_DeInit(DMA2D_TypeDef *DMA2Dx)
  118. {
  119. ErrorStatus status = SUCCESS;
  120. /* Check the parameters */
  121. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  122. if (DMA2Dx == DMA2D)
  123. {
  124. /* Force reset of DMA2D clock */
  125. LL_AHB3_GRP1_ForceReset(LL_AHB3_GRP1_PERIPH_DMA2D);
  126. /* Release reset of DMA2D clock */
  127. LL_AHB3_GRP1_ReleaseReset(LL_AHB3_GRP1_PERIPH_DMA2D);
  128. }
  129. else
  130. {
  131. status = ERROR;
  132. }
  133. return (status);
  134. }
  135. /**
  136. * @brief Initialize DMA2D registers according to the specified parameters in DMA2D_InitStruct.
  137. * @note DMA2D transfers must be disabled to set initialization bits in configuration registers,
  138. * otherwise ERROR result is returned.
  139. * @param DMA2Dx DMA2D Instance
  140. * @param DMA2D_InitStruct pointer to a LL_DMA2D_InitTypeDef structure
  141. * that contains the configuration information for the specified DMA2D peripheral.
  142. * @retval An ErrorStatus enumeration value:
  143. * - SUCCESS: DMA2D registers are initialized according to DMA2D_InitStruct content
  144. * - ERROR: Issue occurred during DMA2D registers initialization
  145. */
  146. ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
  147. {
  148. ErrorStatus status = ERROR;
  149. LL_DMA2D_ColorTypeDef DMA2D_ColorStruct;
  150. uint32_t tmp, tmp1, tmp2;
  151. uint32_t regMask, regValue;
  152. /* Check the parameters */
  153. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  154. assert_param(IS_LL_DMA2D_MODE(DMA2D_InitStruct->Mode));
  155. assert_param(IS_LL_DMA2D_OCMODE(DMA2D_InitStruct->ColorMode));
  156. assert_param(IS_LL_DMA2D_LINE(DMA2D_InitStruct->NbrOfLines));
  157. assert_param(IS_LL_DMA2D_PIXEL(DMA2D_InitStruct->NbrOfPixelsPerLines));
  158. assert_param(IS_LL_DMA2D_GREEN(DMA2D_InitStruct->OutputGreen));
  159. assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed));
  160. assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue));
  161. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha));
  162. assert_param(IS_LL_DMA2D_SWAP_MODE(DMA2D_InitStruct->OutputSwapMode));
  163. assert_param(IS_LL_DMA2D_OFFSET_MODE(DMA2D_InitStruct->LineOffsetMode));
  164. assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset));
  165. assert_param(IS_LL_DMA2D_ALPHAINV(DMA2D_InitStruct->AlphaInversionMode));
  166. assert_param(IS_LL_DMA2D_RBSWAP(DMA2D_InitStruct->RBSwapMode));
  167. /* DMA2D transfers must be disabled to configure bits in initialization registers */
  168. tmp = LL_DMA2D_IsTransferOngoing(DMA2Dx);
  169. tmp1 = LL_DMA2D_FGND_IsEnabledCLUTLoad(DMA2Dx);
  170. tmp2 = LL_DMA2D_BGND_IsEnabledCLUTLoad(DMA2Dx);
  171. if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U))
  172. {
  173. /* DMA2D CR register configuration -------------------------------------------*/
  174. MODIFY_REG(DMA2Dx->CR, (DMA2D_CR_MODE | DMA2D_CR_LOM), \
  175. (DMA2D_InitStruct->Mode | DMA2D_InitStruct->LineOffsetMode));
  176. /* DMA2D OPFCCR register configuration ---------------------------------------*/
  177. regMask = DMA2D_OPFCCR_CM;
  178. regValue = DMA2D_InitStruct->ColorMode;
  179. regMask |= DMA2D_OPFCCR_SB;
  180. regValue |= DMA2D_InitStruct->OutputSwapMode;
  181. regMask |= (DMA2D_OPFCCR_RBS | DMA2D_OPFCCR_AI);
  182. regValue |= (DMA2D_InitStruct->AlphaInversionMode | DMA2D_InitStruct->RBSwapMode);
  183. MODIFY_REG(DMA2Dx->OPFCCR, regMask, regValue);
  184. /* DMA2D OOR register configuration ------------------------------------------*/
  185. LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset);
  186. /* DMA2D NLR register configuration ------------------------------------------*/
  187. LL_DMA2D_ConfigSize(DMA2Dx, DMA2D_InitStruct->NbrOfLines, DMA2D_InitStruct->NbrOfPixelsPerLines);
  188. /* DMA2D OMAR register configuration ------------------------------------------*/
  189. LL_DMA2D_SetOutputMemAddr(DMA2Dx, DMA2D_InitStruct->OutputMemoryAddress);
  190. /* DMA2D OCOLR register configuration ------------------------------------------*/
  191. DMA2D_ColorStruct.ColorMode = DMA2D_InitStruct->ColorMode;
  192. DMA2D_ColorStruct.OutputBlue = DMA2D_InitStruct->OutputBlue;
  193. DMA2D_ColorStruct.OutputGreen = DMA2D_InitStruct->OutputGreen;
  194. DMA2D_ColorStruct.OutputRed = DMA2D_InitStruct->OutputRed;
  195. DMA2D_ColorStruct.OutputAlpha = DMA2D_InitStruct->OutputAlpha;
  196. LL_DMA2D_ConfigOutputColor(DMA2Dx, &DMA2D_ColorStruct);
  197. status = SUCCESS;
  198. }
  199. /* If DMA2D transfers are not disabled, return ERROR */
  200. return (status);
  201. }
  202. /**
  203. * @brief Set each @ref LL_DMA2D_InitTypeDef field to default value.
  204. * @param DMA2D_InitStruct pointer to a @ref LL_DMA2D_InitTypeDef structure
  205. * whose fields will be set to default values.
  206. * @retval None
  207. */
  208. void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
  209. {
  210. /* Set DMA2D_InitStruct fields to default values */
  211. DMA2D_InitStruct->Mode = LL_DMA2D_MODE_M2M;
  212. DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888;
  213. DMA2D_InitStruct->NbrOfLines = 0x0U;
  214. DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U;
  215. DMA2D_InitStruct->LineOffsetMode = LL_DMA2D_LINE_OFFSET_PIXELS;
  216. DMA2D_InitStruct->LineOffset = 0x0U;
  217. DMA2D_InitStruct->OutputBlue = 0x0U;
  218. DMA2D_InitStruct->OutputGreen = 0x0U;
  219. DMA2D_InitStruct->OutputRed = 0x0U;
  220. DMA2D_InitStruct->OutputAlpha = 0x0U;
  221. DMA2D_InitStruct->OutputMemoryAddress = 0x0U;
  222. DMA2D_InitStruct->OutputSwapMode = LL_DMA2D_SWAP_MODE_REGULAR;
  223. DMA2D_InitStruct->AlphaInversionMode = LL_DMA2D_ALPHA_REGULAR;
  224. DMA2D_InitStruct->RBSwapMode = LL_DMA2D_RB_MODE_REGULAR;
  225. }
  226. /**
  227. * @brief Configure the foreground or background according to the specified parameters
  228. * in the LL_DMA2D_LayerCfgTypeDef structure.
  229. * @param DMA2Dx DMA2D Instance
  230. * @param DMA2D_LayerCfg pointer to a LL_DMA2D_LayerCfgTypeDef structure that contains
  231. * the configuration information for the specified layer.
  232. * @param LayerIdx DMA2D Layer index.
  233. * This parameter can be one of the following values:
  234. * 0(background) / 1(foreground)
  235. * @retval None
  236. */
  237. void LL_DMA2D_ConfigLayer(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg, uint32_t LayerIdx)
  238. {
  239. /* Check the parameters */
  240. assert_param(IS_LL_DMA2D_OFFSET(DMA2D_LayerCfg->LineOffset));
  241. assert_param(IS_LL_DMA2D_LCMODE(DMA2D_LayerCfg->ColorMode));
  242. assert_param(IS_LL_DMA2D_CLUTCMODE(DMA2D_LayerCfg->CLUTColorMode));
  243. assert_param(IS_LL_DMA2D_CLUTSIZE(DMA2D_LayerCfg->CLUTSize));
  244. assert_param(IS_LL_DMA2D_ALPHAMODE(DMA2D_LayerCfg->AlphaMode));
  245. assert_param(IS_LL_DMA2D_GREEN(DMA2D_LayerCfg->Green));
  246. assert_param(IS_LL_DMA2D_RED(DMA2D_LayerCfg->Red));
  247. assert_param(IS_LL_DMA2D_BLUE(DMA2D_LayerCfg->Blue));
  248. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_LayerCfg->Alpha));
  249. assert_param(IS_LL_DMA2D_ALPHAINV(DMA2D_LayerCfg->AlphaInversionMode));
  250. assert_param(IS_LL_DMA2D_RBSWAP(DMA2D_LayerCfg->RBSwapMode));
  251. assert_param(IS_LL_DMA2D_CHROMA_SUB_SAMPLING(DMA2D_LayerCfg->ChromaSubSampling));
  252. if (LayerIdx == 0U)
  253. {
  254. /* Configure the background memory address */
  255. LL_DMA2D_BGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
  256. /* Configure the background line offset */
  257. LL_DMA2D_BGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
  258. /* Configure the background Alpha value, Alpha mode, RB swap, Alpha inversion
  259. CLUT size, CLUT Color mode and Color mode */
  260. MODIFY_REG(DMA2Dx->BGPFCCR, \
  261. (DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_RBS | DMA2D_BGPFCCR_AI | DMA2D_BGPFCCR_AM | \
  262. DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM | DMA2D_BGPFCCR_CM), \
  263. ((DMA2D_LayerCfg->Alpha << DMA2D_BGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->RBSwapMode | \
  264. DMA2D_LayerCfg->AlphaInversionMode | DMA2D_LayerCfg->AlphaMode | \
  265. (DMA2D_LayerCfg->CLUTSize << DMA2D_BGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
  266. DMA2D_LayerCfg->ColorMode));
  267. /* Configure the background color */
  268. LL_DMA2D_BGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
  269. /* Configure the background CLUT memory address */
  270. LL_DMA2D_BGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
  271. }
  272. else
  273. {
  274. /* Configure the foreground memory address */
  275. LL_DMA2D_FGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
  276. /* Configure the foreground line offset */
  277. LL_DMA2D_FGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
  278. /* Configure the foreground Alpha value, Alpha mode, RB swap, Alpha inversion
  279. CLUT size, CLUT Color mode and Color mode */
  280. MODIFY_REG(DMA2Dx->FGPFCCR, \
  281. (DMA2D_FGPFCCR_ALPHA | DMA2D_FGPFCCR_RBS | DMA2D_FGPFCCR_AI | DMA2D_FGPFCCR_CSS | DMA2D_FGPFCCR_AM | \
  282. DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM | DMA2D_FGPFCCR_CM), \
  283. ((DMA2D_LayerCfg->Alpha << DMA2D_FGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->RBSwapMode | \
  284. DMA2D_LayerCfg->AlphaInversionMode | DMA2D_LayerCfg->ChromaSubSampling | \
  285. DMA2D_LayerCfg->AlphaMode | (DMA2D_LayerCfg->CLUTSize << DMA2D_FGPFCCR_CS_Pos) | \
  286. DMA2D_LayerCfg->CLUTColorMode | DMA2D_LayerCfg->ColorMode));
  287. /* Configure the foreground color */
  288. LL_DMA2D_FGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
  289. /* Configure the foreground CLUT memory address */
  290. LL_DMA2D_FGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
  291. }
  292. }
  293. /**
  294. * @brief Set each @ref LL_DMA2D_LayerCfgTypeDef field to default value.
  295. * @param DMA2D_LayerCfg pointer to a @ref LL_DMA2D_LayerCfgTypeDef structure
  296. * whose fields will be set to default values.
  297. * @retval None
  298. */
  299. void LL_DMA2D_LayerCfgStructInit(LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg)
  300. {
  301. /* Set DMA2D_LayerCfg fields to default values */
  302. DMA2D_LayerCfg->MemoryAddress = 0x0U;
  303. DMA2D_LayerCfg->ColorMode = LL_DMA2D_INPUT_MODE_ARGB8888;
  304. DMA2D_LayerCfg->LineOffset = 0x0U;
  305. DMA2D_LayerCfg->CLUTColorMode = LL_DMA2D_CLUT_COLOR_MODE_ARGB8888;
  306. DMA2D_LayerCfg->CLUTSize = 0x0U;
  307. DMA2D_LayerCfg->AlphaMode = LL_DMA2D_ALPHA_MODE_NO_MODIF;
  308. DMA2D_LayerCfg->Alpha = 0x0U;
  309. DMA2D_LayerCfg->Blue = 0x0U;
  310. DMA2D_LayerCfg->Green = 0x0U;
  311. DMA2D_LayerCfg->Red = 0x0U;
  312. DMA2D_LayerCfg->CLUTMemoryAddress = 0x0U;
  313. DMA2D_LayerCfg->AlphaInversionMode = LL_DMA2D_ALPHA_REGULAR;
  314. DMA2D_LayerCfg->RBSwapMode = LL_DMA2D_RB_MODE_REGULAR;
  315. DMA2D_LayerCfg->ChromaSubSampling = LL_DMA2D_CSS_444;
  316. }
  317. /**
  318. * @brief Initialize DMA2D output color register according to the specified parameters
  319. * in DMA2D_ColorStruct.
  320. * @param DMA2Dx DMA2D Instance
  321. * @param DMA2D_ColorStruct pointer to a LL_DMA2D_ColorTypeDef structure that contains
  322. * the color configuration information for the specified DMA2D peripheral.
  323. * @retval None
  324. */
  325. void LL_DMA2D_ConfigOutputColor(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_ColorTypeDef *DMA2D_ColorStruct)
  326. {
  327. uint32_t outgreen;
  328. uint32_t outred;
  329. uint32_t outalpha;
  330. /* Check the parameters */
  331. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  332. assert_param(IS_LL_DMA2D_OCMODE(DMA2D_ColorStruct->ColorMode));
  333. assert_param(IS_LL_DMA2D_GREEN(DMA2D_ColorStruct->OutputGreen));
  334. assert_param(IS_LL_DMA2D_RED(DMA2D_ColorStruct->OutputRed));
  335. assert_param(IS_LL_DMA2D_BLUE(DMA2D_ColorStruct->OutputBlue));
  336. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_ColorStruct->OutputAlpha));
  337. /* DMA2D OCOLR register configuration ------------------------------------------*/
  338. if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  339. {
  340. outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
  341. outred = DMA2D_ColorStruct->OutputRed << 16U;
  342. outalpha = DMA2D_ColorStruct->OutputAlpha << 24U;
  343. }
  344. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  345. {
  346. outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
  347. outred = DMA2D_ColorStruct->OutputRed << 16U;
  348. outalpha = 0x00000000U;
  349. }
  350. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  351. {
  352. outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
  353. outred = DMA2D_ColorStruct->OutputRed << 11U;
  354. outalpha = 0x00000000U;
  355. }
  356. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  357. {
  358. outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
  359. outred = DMA2D_ColorStruct->OutputRed << 10U;
  360. outalpha = DMA2D_ColorStruct->OutputAlpha << 15U;
  361. }
  362. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  363. {
  364. outgreen = DMA2D_ColorStruct->OutputGreen << 4U;
  365. outred = DMA2D_ColorStruct->OutputRed << 8U;
  366. outalpha = DMA2D_ColorStruct->OutputAlpha << 12U;
  367. }
  368. LL_DMA2D_SetOutputColor(DMA2Dx, (outgreen | outred | DMA2D_ColorStruct->OutputBlue | outalpha));
  369. }
  370. /**
  371. * @brief Return DMA2D output Blue color.
  372. * @param DMA2Dx DMA2D Instance.
  373. * @param ColorMode This parameter can be one of the following values:
  374. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  375. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  376. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  377. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  378. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  379. * @retval Output Blue color value between Min_Data=0 and Max_Data=0xFF
  380. */
  381. uint32_t LL_DMA2D_GetOutputBlueColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  382. {
  383. uint32_t color;
  384. /* Check the parameters */
  385. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  386. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  387. /* DMA2D OCOLR register reading ------------------------------------------*/
  388. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  389. {
  390. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
  391. }
  392. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  393. {
  394. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
  395. }
  396. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  397. {
  398. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
  399. }
  400. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  401. {
  402. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
  403. }
  404. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  405. {
  406. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFU));
  407. }
  408. return color;
  409. }
  410. /**
  411. * @brief Return DMA2D output Green color.
  412. * @param DMA2Dx DMA2D Instance.
  413. * @param ColorMode This parameter can be one of the following values:
  414. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  415. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  416. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  417. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  418. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  419. * @retval Output Green color value between Min_Data=0 and Max_Data=0xFF
  420. */
  421. uint32_t LL_DMA2D_GetOutputGreenColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  422. {
  423. uint32_t color;
  424. /* Check the parameters */
  425. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  426. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  427. /* DMA2D OCOLR register reading ------------------------------------------*/
  428. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  429. {
  430. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
  431. }
  432. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  433. {
  434. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
  435. }
  436. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  437. {
  438. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7E0U) >> 5U);
  439. }
  440. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  441. {
  442. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x3E0U) >> 5U);
  443. }
  444. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  445. {
  446. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF0U) >> 4U);
  447. }
  448. return color;
  449. }
  450. /**
  451. * @brief Return DMA2D output Red color.
  452. * @param DMA2Dx DMA2D Instance.
  453. * @param ColorMode This parameter can be one of the following values:
  454. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  455. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  456. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  457. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  458. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  459. * @retval Output Red color value between Min_Data=0 and Max_Data=0xFF
  460. */
  461. uint32_t LL_DMA2D_GetOutputRedColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  462. {
  463. uint32_t color;
  464. /* Check the parameters */
  465. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  466. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  467. /* DMA2D OCOLR register reading ------------------------------------------*/
  468. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  469. {
  470. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
  471. }
  472. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  473. {
  474. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
  475. }
  476. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  477. {
  478. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF800U) >> 11U);
  479. }
  480. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  481. {
  482. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7C00U) >> 10U);
  483. }
  484. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  485. {
  486. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF00U) >> 8U);
  487. }
  488. return color;
  489. }
  490. /**
  491. * @brief Return DMA2D output Alpha color.
  492. * @param DMA2Dx DMA2D Instance.
  493. * @param ColorMode This parameter can be one of the following values:
  494. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  495. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  496. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  497. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  498. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  499. * @retval Output Alpha color value between Min_Data=0 and Max_Data=0xFF
  500. */
  501. uint32_t LL_DMA2D_GetOutputAlphaColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  502. {
  503. uint32_t color;
  504. /* Check the parameters */
  505. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  506. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  507. /* DMA2D OCOLR register reading ------------------------------------------*/
  508. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  509. {
  510. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF000000U) >> 24U);
  511. }
  512. else if ((ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) || (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565))
  513. {
  514. color = 0x0U;
  515. }
  516. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  517. {
  518. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x8000U) >> 15U);
  519. }
  520. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  521. {
  522. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF000U) >> 12U);
  523. }
  524. return color;
  525. }
  526. /**
  527. * @brief Configure DMA2D transfer size.
  528. * @param DMA2Dx DMA2D Instance
  529. * @param NbrOfLines Value between Min_Data=0 and Max_Data=0xFFFF
  530. * @param NbrOfPixelsPerLines Value between Min_Data=0 and Max_Data=0x3FFF
  531. * @retval None
  532. */
  533. void LL_DMA2D_ConfigSize(DMA2D_TypeDef *DMA2Dx, uint32_t NbrOfLines, uint32_t NbrOfPixelsPerLines)
  534. {
  535. MODIFY_REG(DMA2Dx->NLR, (DMA2D_NLR_PL | DMA2D_NLR_NL), \
  536. ((NbrOfPixelsPerLines << DMA2D_NLR_PL_Pos) | NbrOfLines));
  537. }
  538. /**
  539. * @}
  540. */
  541. /**
  542. * @}
  543. */
  544. /**
  545. * @}
  546. */
  547. #endif /* defined (DMA2D) */
  548. /**
  549. * @}
  550. */
  551. #endif /* USE_FULL_LL_DRIVER */
  552. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/