mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Jul 02 16:30:08 2015 +0100
Revision:
581:39197bcd20f2
Parent:
532:fe11edbda85c
Child:
613:bc40b8d2aec4
Synchronized with git revision ae2d3cdffe70184eb8736d94f76c45c93f4b7724

Full URL: https://github.com/mbedmicro/mbed/commit/ae2d3cdffe70184eb8736d94f76c45c93f4b7724/

Make it possible to build the core mbed library with yotta

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 87:085cde657901 1 /**
mbed_official 87:085cde657901 2 ******************************************************************************
mbed_official 87:085cde657901 3 * @file stm32f4xx_hal_dma2d.c
mbed_official 87:085cde657901 4 * @author MCD Application Team
mbed_official 532:fe11edbda85c 5 * @version V1.3.0
mbed_official 532:fe11edbda85c 6 * @date 09-March-2015
mbed_official 87:085cde657901 7 * @brief DMA2D HAL module driver.
mbed_official 87:085cde657901 8 * This file provides firmware functions to manage the following
mbed_official 87:085cde657901 9 * functionalities of the DMA2D peripheral:
mbed_official 87:085cde657901 10 * + Initialization and de-initialization functions
mbed_official 87:085cde657901 11 * + IO operation functions
mbed_official 87:085cde657901 12 * + Peripheral Control functions
mbed_official 87:085cde657901 13 * + Peripheral State and Errors functions
mbed_official 532:fe11edbda85c 14 *
mbed_official 532:fe11edbda85c 15 @verbatim
mbed_official 532:fe11edbda85c 16 ==============================================================================
mbed_official 87:085cde657901 17 ##### How to use this driver #####
mbed_official 532:fe11edbda85c 18 ==============================================================================
mbed_official 87:085cde657901 19 [..]
mbed_official 87:085cde657901 20 (#) Program the required configuration through following parameters:
mbed_official 87:085cde657901 21 the Transfer Mode, the output color mode and the output offset using
mbed_official 87:085cde657901 22 HAL_DMA2D_Init() function.
mbed_official 87:085cde657901 23
mbed_official 87:085cde657901 24 (#) Program the required configuration through following parameters:
mbed_official 87:085cde657901 25 the input color mode, the input color, input alpha value, alpha mode
mbed_official 87:085cde657901 26 and the input offset using HAL_DMA2D_ConfigLayer() function for foreground
mbed_official 87:085cde657901 27 or/and background layer.
mbed_official 87:085cde657901 28
mbed_official 87:085cde657901 29 *** Polling mode IO operation ***
mbed_official 87:085cde657901 30 =================================
mbed_official 87:085cde657901 31 [..]
mbed_official 87:085cde657901 32 (+) Configure the pdata, Destination and data length and Enable
mbed_official 87:085cde657901 33 the transfer using HAL_DMA2D_Start()
mbed_official 87:085cde657901 34 (+) Wait for end of transfer using HAL_DMA2D_PollForTransfer(), at this stage
mbed_official 87:085cde657901 35 user can specify the value of timeout according to his end application.
mbed_official 87:085cde657901 36
mbed_official 87:085cde657901 37 *** Interrupt mode IO operation ***
mbed_official 87:085cde657901 38 ===================================
mbed_official 87:085cde657901 39 [..]
mbed_official 87:085cde657901 40 (#) Configure the pdata, Destination and data length and Enable
mbed_official 87:085cde657901 41 the transfer using HAL_DMA2D_Start_IT()
mbed_official 87:085cde657901 42 (#) Use HAL_DMA2D_IRQHandler() called under DMA2D_IRQHandler() Interrupt subroutine
mbed_official 87:085cde657901 43 (#) At the end of data transfer HAL_DMA2D_IRQHandler() function is executed and user can
mbed_official 87:085cde657901 44 add his own function by customization of function pointer XferCpltCallback and
mbed_official 87:085cde657901 45 XferErrorCallback (i.e a member of DMA2D handle structure).
mbed_official 87:085cde657901 46
mbed_official 87:085cde657901 47 -@- In Register-to-Memory transfer mode, the pdata parameter is the register
mbed_official 87:085cde657901 48 color, in Memory-to-memory or memory-to-memory with pixel format
mbed_official 369:2e96f1b71984 49 conversion the pdata is the source address.
mbed_official 87:085cde657901 50
mbed_official 87:085cde657901 51 -@- Configure the foreground source address, the background source address,
mbed_official 87:085cde657901 52 the Destination and data length and Enable the transfer using
mbed_official 87:085cde657901 53 HAL_DMA2D_BlendingStart() in polling mode and HAL_DMA2D_BlendingStart_IT()
mbed_official 87:085cde657901 54 in interrupt mode.
mbed_official 87:085cde657901 55
mbed_official 87:085cde657901 56 -@- HAL_DMA2D_BlendingStart() and HAL_DMA2D_BlendingStart_IT() functions
mbed_official 87:085cde657901 57 are used if the memory to memory with blending transfer mode is selected.
mbed_official 87:085cde657901 58
mbed_official 87:085cde657901 59 (#) Optionally, configure and enable the CLUT using HAL_DMA2D_ConfigCLUT()
mbed_official 87:085cde657901 60 HAL_DMA2D_EnableCLUT() functions.
mbed_official 87:085cde657901 61
mbed_official 87:085cde657901 62 (#) Optionally, configure and enable LineInterrupt using the following function:
mbed_official 87:085cde657901 63 HAL_DMA2D_ProgramLineEvent().
mbed_official 87:085cde657901 64
mbed_official 87:085cde657901 65 (#) The transfer can be suspended, continued and aborted using the following
mbed_official 87:085cde657901 66 functions: HAL_DMA2D_Suspend(), HAL_DMA2D_Resume(), HAL_DMA2D_Abort().
mbed_official 87:085cde657901 67
mbed_official 87:085cde657901 68 (#) To control DMA2D state you can use the following function: HAL_DMA2D_GetState()
mbed_official 87:085cde657901 69
mbed_official 87:085cde657901 70 *** DMA2D HAL driver macros list ***
mbed_official 87:085cde657901 71 =============================================
mbed_official 87:085cde657901 72 [..]
mbed_official 226:b062af740e40 73 Below the list of most used macros in DMA2D HAL driver :
mbed_official 87:085cde657901 74
mbed_official 87:085cde657901 75 (+) __HAL_DMA2D_ENABLE: Enable the DMA2D peripheral.
mbed_official 87:085cde657901 76 (+) __HAL_DMA2D_DISABLE: Disable the DMA2D peripheral.
mbed_official 87:085cde657901 77 (+) __HAL_DMA2D_GET_FLAG: Get the DMA2D pending flags.
mbed_official 226:b062af740e40 78 (+) __HAL_DMA2D_CLEAR_FLAG: Clear the DMA2D pending flags.
mbed_official 226:b062af740e40 79 (+) __HAL_DMA2D_ENABLE_IT: Enable the specified DMA2D interrupts.
mbed_official 226:b062af740e40 80 (+) __HAL_DMA2D_DISABLE_IT: Disable the specified DMA2D interrupts.
mbed_official 226:b062af740e40 81 (+) __HAL_DMA2D_GET_IT_SOURCE: Check whether the specified DMA2D interrupt has occurred or not.
mbed_official 87:085cde657901 82
mbed_official 87:085cde657901 83 [..]
mbed_official 87:085cde657901 84 (@) You can refer to the DMA2D HAL driver header file for more useful macros
mbed_official 87:085cde657901 85
mbed_official 87:085cde657901 86 @endverbatim
mbed_official 87:085cde657901 87 ******************************************************************************
mbed_official 87:085cde657901 88 * @attention
mbed_official 87:085cde657901 89 *
mbed_official 532:fe11edbda85c 90 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 87:085cde657901 91 *
mbed_official 87:085cde657901 92 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 87:085cde657901 93 * are permitted provided that the following conditions are met:
mbed_official 87:085cde657901 94 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 87:085cde657901 95 * this list of conditions and the following disclaimer.
mbed_official 87:085cde657901 96 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 87:085cde657901 97 * this list of conditions and the following disclaimer in the documentation
mbed_official 87:085cde657901 98 * and/or other materials provided with the distribution.
mbed_official 87:085cde657901 99 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 87:085cde657901 100 * may be used to endorse or promote products derived from this software
mbed_official 87:085cde657901 101 * without specific prior written permission.
mbed_official 87:085cde657901 102 *
mbed_official 87:085cde657901 103 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 87:085cde657901 104 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 87:085cde657901 105 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 87:085cde657901 106 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 87:085cde657901 107 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 87:085cde657901 108 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 87:085cde657901 109 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 87:085cde657901 110 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 87:085cde657901 111 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 87:085cde657901 112 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 87:085cde657901 113 *
mbed_official 87:085cde657901 114 ******************************************************************************
mbed_official 87:085cde657901 115 */
mbed_official 87:085cde657901 116
mbed_official 87:085cde657901 117 /* Includes ------------------------------------------------------------------*/
mbed_official 87:085cde657901 118 #include "stm32f4xx_hal.h"
mbed_official 87:085cde657901 119
mbed_official 87:085cde657901 120 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 87:085cde657901 121 * @{
mbed_official 87:085cde657901 122 */
mbed_official 532:fe11edbda85c 123 /** @addtogroup DMA2D
mbed_official 87:085cde657901 124 * @brief DMA2D HAL module driver
mbed_official 87:085cde657901 125 * @{
mbed_official 87:085cde657901 126 */
mbed_official 87:085cde657901 127
mbed_official 87:085cde657901 128 #ifdef HAL_DMA2D_MODULE_ENABLED
mbed_official 87:085cde657901 129
mbed_official 106:ced8cbb51063 130 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
mbed_official 87:085cde657901 131
mbed_official 532:fe11edbda85c 132 /* Private types -------------------------------------------------------------*/
mbed_official 87:085cde657901 133 /* Private define ------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 134 /** @addtogroup DMA2D_Private_Defines
mbed_official 532:fe11edbda85c 135 * @{
mbed_official 532:fe11edbda85c 136 */
mbed_official 87:085cde657901 137 #define HAL_TIMEOUT_DMA2D_ABORT ((uint32_t)1000) /* 1s */
mbed_official 87:085cde657901 138 #define HAL_TIMEOUT_DMA2D_SUSPEND ((uint32_t)1000) /* 1s */
mbed_official 532:fe11edbda85c 139 /**
mbed_official 532:fe11edbda85c 140 * @}
mbed_official 532:fe11edbda85c 141 */
mbed_official 532:fe11edbda85c 142
mbed_official 87:085cde657901 143 /* Private variables ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 144 /* Private constants ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 145 /* Private macro -------------------------------------------------------------*/
mbed_official 87:085cde657901 146 /* Private function prototypes -----------------------------------------------*/
mbed_official 532:fe11edbda85c 147 /** @addtogroup DMA2D_Private_Functions_Prototypes
mbed_official 532:fe11edbda85c 148 * @{
mbed_official 532:fe11edbda85c 149 */
mbed_official 532:fe11edbda85c 150 static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height);
mbed_official 532:fe11edbda85c 151 /**
mbed_official 532:fe11edbda85c 152 * @}
mbed_official 532:fe11edbda85c 153 */
mbed_official 87:085cde657901 154
mbed_official 87:085cde657901 155 /* Private functions ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 156 /* Exported functions --------------------------------------------------------*/
mbed_official 532:fe11edbda85c 157 /** @addtogroup DMA2D_Exported_Functions
mbed_official 87:085cde657901 158 * @{
mbed_official 87:085cde657901 159 */
mbed_official 87:085cde657901 160
mbed_official 87:085cde657901 161 /** @defgroup DMA2D_Group1 Initialization and Configuration functions
mbed_official 87:085cde657901 162 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 163 *
mbed_official 87:085cde657901 164 @verbatim
mbed_official 87:085cde657901 165 ===============================================================================
mbed_official 87:085cde657901 166 ##### Initialization and Configuration functions #####
mbed_official 87:085cde657901 167 ===============================================================================
mbed_official 87:085cde657901 168 [..] This section provides functions allowing to:
mbed_official 87:085cde657901 169 (+) Initialize and configure the DMA2D
mbed_official 87:085cde657901 170 (+) De-initialize the DMA2D
mbed_official 87:085cde657901 171
mbed_official 87:085cde657901 172 @endverbatim
mbed_official 87:085cde657901 173 * @{
mbed_official 87:085cde657901 174 */
mbed_official 87:085cde657901 175
mbed_official 87:085cde657901 176 /**
mbed_official 87:085cde657901 177 * @brief Initializes the DMA2D according to the specified
mbed_official 87:085cde657901 178 * parameters in the DMA2D_InitTypeDef and create the associated handle.
mbed_official 87:085cde657901 179 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 180 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 181 * @retval HAL status
mbed_official 87:085cde657901 182 */
mbed_official 87:085cde657901 183 HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 184 {
mbed_official 87:085cde657901 185 uint32_t tmp = 0;
mbed_official 87:085cde657901 186
mbed_official 87:085cde657901 187 /* Check the DMA2D peripheral state */
mbed_official 384:ef87175507f1 188 if(hdma2d == HAL_NULL)
mbed_official 87:085cde657901 189 {
mbed_official 87:085cde657901 190 return HAL_ERROR;
mbed_official 87:085cde657901 191 }
mbed_official 87:085cde657901 192
mbed_official 87:085cde657901 193 /* Check the parameters */
mbed_official 87:085cde657901 194 assert_param(IS_DMA2D_ALL_INSTANCE(hdma2d->Instance));
mbed_official 87:085cde657901 195 assert_param(IS_DMA2D_MODE(hdma2d->Init.Mode));
mbed_official 87:085cde657901 196 assert_param(IS_DMA2D_CMODE(hdma2d->Init.ColorMode));
mbed_official 87:085cde657901 197 assert_param(IS_DMA2D_OFFSET(hdma2d->Init.OutputOffset));
mbed_official 87:085cde657901 198
mbed_official 87:085cde657901 199 if(hdma2d->State == HAL_DMA2D_STATE_RESET)
mbed_official 87:085cde657901 200 {
mbed_official 532:fe11edbda85c 201 /* Allocate lock resource and initialize it */
mbed_official 532:fe11edbda85c 202 hdma2d->Lock = HAL_UNLOCKED;
mbed_official 87:085cde657901 203 /* Init the low level hardware */
mbed_official 87:085cde657901 204 HAL_DMA2D_MspInit(hdma2d);
mbed_official 87:085cde657901 205 }
mbed_official 87:085cde657901 206
mbed_official 87:085cde657901 207 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 208 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 209
mbed_official 87:085cde657901 210 /* DMA2D CR register configuration -------------------------------------------*/
mbed_official 87:085cde657901 211 /* Get the CR register value */
mbed_official 87:085cde657901 212 tmp = hdma2d->Instance->CR;
mbed_official 87:085cde657901 213
mbed_official 87:085cde657901 214 /* Clear Mode bits */
mbed_official 87:085cde657901 215 tmp &= (uint32_t)~DMA2D_CR_MODE;
mbed_official 87:085cde657901 216
mbed_official 87:085cde657901 217 /* Prepare the value to be wrote to the CR register */
mbed_official 87:085cde657901 218 tmp |= hdma2d->Init.Mode;
mbed_official 87:085cde657901 219
mbed_official 87:085cde657901 220 /* Write to DMA2D CR register */
mbed_official 87:085cde657901 221 hdma2d->Instance->CR = tmp;
mbed_official 87:085cde657901 222
mbed_official 87:085cde657901 223 /* DMA2D OPFCCR register configuration ---------------------------------------*/
mbed_official 87:085cde657901 224 /* Get the OPFCCR register value */
mbed_official 87:085cde657901 225 tmp = hdma2d->Instance->OPFCCR;
mbed_official 87:085cde657901 226
mbed_official 87:085cde657901 227 /* Clear Color Mode bits */
mbed_official 87:085cde657901 228 tmp &= (uint32_t)~DMA2D_OPFCCR_CM;
mbed_official 87:085cde657901 229
mbed_official 87:085cde657901 230 /* Prepare the value to be wrote to the OPFCCR register */
mbed_official 87:085cde657901 231 tmp |= hdma2d->Init.ColorMode;
mbed_official 87:085cde657901 232
mbed_official 87:085cde657901 233 /* Write to DMA2D OPFCCR register */
mbed_official 87:085cde657901 234 hdma2d->Instance->OPFCCR = tmp;
mbed_official 87:085cde657901 235
mbed_official 87:085cde657901 236 /* DMA2D OOR register configuration ------------------------------------------*/
mbed_official 87:085cde657901 237 /* Get the OOR register value */
mbed_official 87:085cde657901 238 tmp = hdma2d->Instance->OOR;
mbed_official 87:085cde657901 239
mbed_official 87:085cde657901 240 /* Clear Offset bits */
mbed_official 87:085cde657901 241 tmp &= (uint32_t)~DMA2D_OOR_LO;
mbed_official 87:085cde657901 242
mbed_official 87:085cde657901 243 /* Prepare the value to be wrote to the OOR register */
mbed_official 87:085cde657901 244 tmp |= hdma2d->Init.OutputOffset;
mbed_official 87:085cde657901 245
mbed_official 87:085cde657901 246 /* Write to DMA2D OOR register */
mbed_official 87:085cde657901 247 hdma2d->Instance->OOR = tmp;
mbed_official 87:085cde657901 248
mbed_official 87:085cde657901 249 /* Update error code */
mbed_official 87:085cde657901 250 hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE;
mbed_official 87:085cde657901 251
mbed_official 87:085cde657901 252 /* Initialize the DMA2D state*/
mbed_official 87:085cde657901 253 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 254
mbed_official 87:085cde657901 255 return HAL_OK;
mbed_official 87:085cde657901 256 }
mbed_official 87:085cde657901 257
mbed_official 87:085cde657901 258 /**
mbed_official 87:085cde657901 259 * @brief Deinitializes the DMA2D peripheral registers to their default reset
mbed_official 87:085cde657901 260 * values.
mbed_official 87:085cde657901 261 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 262 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 263 * @retval None
mbed_official 87:085cde657901 264 */
mbed_official 87:085cde657901 265
mbed_official 87:085cde657901 266 HAL_StatusTypeDef HAL_DMA2D_DeInit(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 267 {
mbed_official 87:085cde657901 268 /* Check the DMA2D peripheral state */
mbed_official 384:ef87175507f1 269 if(hdma2d == HAL_NULL)
mbed_official 87:085cde657901 270 {
mbed_official 87:085cde657901 271 return HAL_ERROR;
mbed_official 87:085cde657901 272 }
mbed_official 87:085cde657901 273
mbed_official 87:085cde657901 274 /* DeInit the low level hardware */
mbed_official 87:085cde657901 275 HAL_DMA2D_MspDeInit(hdma2d);
mbed_official 87:085cde657901 276
mbed_official 87:085cde657901 277 /* Update error code */
mbed_official 87:085cde657901 278 hdma2d->ErrorCode = HAL_DMA2D_ERROR_NONE;
mbed_official 87:085cde657901 279
mbed_official 87:085cde657901 280 /* Initialize the DMA2D state*/
mbed_official 87:085cde657901 281 hdma2d->State = HAL_DMA2D_STATE_RESET;
mbed_official 87:085cde657901 282
mbed_official 106:ced8cbb51063 283 /* Release Lock */
mbed_official 106:ced8cbb51063 284 __HAL_UNLOCK(hdma2d);
mbed_official 106:ced8cbb51063 285
mbed_official 87:085cde657901 286 return HAL_OK;
mbed_official 87:085cde657901 287 }
mbed_official 87:085cde657901 288
mbed_official 87:085cde657901 289 /**
mbed_official 87:085cde657901 290 * @brief Initializes the DMA2D MSP.
mbed_official 87:085cde657901 291 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 292 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 293 * @retval None
mbed_official 87:085cde657901 294 */
mbed_official 87:085cde657901 295 __weak void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d)
mbed_official 87:085cde657901 296 {
mbed_official 87:085cde657901 297 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 298 the HAL_DMA2D_MspInit could be implemented in the user file
mbed_official 87:085cde657901 299 */
mbed_official 87:085cde657901 300 }
mbed_official 87:085cde657901 301
mbed_official 87:085cde657901 302 /**
mbed_official 87:085cde657901 303 * @brief DeInitializes the DMA2D MSP.
mbed_official 87:085cde657901 304 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 305 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 306 * @retval None
mbed_official 87:085cde657901 307 */
mbed_official 87:085cde657901 308 __weak void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d)
mbed_official 87:085cde657901 309 {
mbed_official 87:085cde657901 310 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 311 the HAL_DMA2D_MspDeInit could be implemented in the user file
mbed_official 87:085cde657901 312 */
mbed_official 87:085cde657901 313 }
mbed_official 87:085cde657901 314
mbed_official 87:085cde657901 315 /**
mbed_official 87:085cde657901 316 * @}
mbed_official 87:085cde657901 317 */
mbed_official 87:085cde657901 318
mbed_official 87:085cde657901 319 /** @defgroup DMA2D_Group2 IO operation functions
mbed_official 87:085cde657901 320 * @brief IO operation functions
mbed_official 87:085cde657901 321 *
mbed_official 87:085cde657901 322 @verbatim
mbed_official 87:085cde657901 323 ===============================================================================
mbed_official 87:085cde657901 324 ##### IO operation functions #####
mbed_official 87:085cde657901 325 ===============================================================================
mbed_official 87:085cde657901 326 [..] This section provides functions allowing to:
mbed_official 87:085cde657901 327 (+) Configure the pdata, destination address and data size and
mbed_official 87:085cde657901 328 Start DMA2D transfer.
mbed_official 87:085cde657901 329 (+) Configure the source for foreground and background, destination address
mbed_official 87:085cde657901 330 and data size and Start MultiBuffer DMA2D transfer.
mbed_official 87:085cde657901 331 (+) Configure the pdata, destination address and data size and
mbed_official 87:085cde657901 332 Start DMA2D transfer with interrupt.
mbed_official 87:085cde657901 333 (+) Configure the source for foreground and background, destination address
mbed_official 87:085cde657901 334 and data size and Start MultiBuffer DMA2D transfer with interrupt.
mbed_official 87:085cde657901 335 (+) Abort DMA2D transfer.
mbed_official 87:085cde657901 336 (+) Suspend DMA2D transfer.
mbed_official 87:085cde657901 337 (+) Continue DMA2D transfer.
mbed_official 226:b062af740e40 338 (+) Poll for transfer complete.
mbed_official 226:b062af740e40 339 (+) handle DMA2D interrupt request.
mbed_official 87:085cde657901 340
mbed_official 87:085cde657901 341 @endverbatim
mbed_official 87:085cde657901 342 * @{
mbed_official 87:085cde657901 343 */
mbed_official 87:085cde657901 344
mbed_official 87:085cde657901 345 /**
mbed_official 87:085cde657901 346 * @brief Start the DMA2D Transfer.
mbed_official 87:085cde657901 347 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 348 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 349 * @param pdata: Configure the source memory Buffer address if
mbed_official 87:085cde657901 350 * the memory to memory or memory to memory with pixel format
mbed_official 87:085cde657901 351 * conversion DMA2D mode is selected, and configure
mbed_official 369:2e96f1b71984 352 * the color value if register to memory DMA2D mode is selected.
mbed_official 87:085cde657901 353 * @param DstAddress: The destination memory Buffer address.
mbed_official 87:085cde657901 354 * @param Width: The width of data to be transferred from source to destination.
mbed_official 532:fe11edbda85c 355 * @param Height: The height of data to be transferred from source to destination.
mbed_official 87:085cde657901 356 * @retval HAL status
mbed_official 87:085cde657901 357 */
mbed_official 532:fe11edbda85c 358 HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
mbed_official 87:085cde657901 359 {
mbed_official 87:085cde657901 360 /* Process locked */
mbed_official 87:085cde657901 361 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 362
mbed_official 87:085cde657901 363 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 364 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 365
mbed_official 87:085cde657901 366 /* Check the parameters */
mbed_official 532:fe11edbda85c 367 assert_param(IS_DMA2D_LINE(Height));
mbed_official 87:085cde657901 368 assert_param(IS_DMA2D_PIXEL(Width));
mbed_official 87:085cde657901 369
mbed_official 87:085cde657901 370 /* Disable the Peripheral */
mbed_official 87:085cde657901 371 __HAL_DMA2D_DISABLE(hdma2d);
mbed_official 87:085cde657901 372
mbed_official 87:085cde657901 373 /* Configure the source, destination address and the data size */
mbed_official 532:fe11edbda85c 374 DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
mbed_official 87:085cde657901 375
mbed_official 87:085cde657901 376 /* Enable the Peripheral */
mbed_official 87:085cde657901 377 __HAL_DMA2D_ENABLE(hdma2d);
mbed_official 87:085cde657901 378
mbed_official 87:085cde657901 379 return HAL_OK;
mbed_official 87:085cde657901 380 }
mbed_official 87:085cde657901 381
mbed_official 87:085cde657901 382 /**
mbed_official 87:085cde657901 383 * @brief Start the DMA2D Transfer with interrupt enabled.
mbed_official 87:085cde657901 384 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 385 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 386 * @param pdata: Configure the source memory Buffer address if
mbed_official 87:085cde657901 387 * the memory to memory or memory to memory with pixel format
mbed_official 87:085cde657901 388 * conversion DMA2D mode is selected, and configure
mbed_official 369:2e96f1b71984 389 * the color value if register to memory DMA2D mode is selected.
mbed_official 87:085cde657901 390 * @param DstAddress: The destination memory Buffer address.
mbed_official 87:085cde657901 391 * @param Width: The width of data to be transferred from source to destination.
mbed_official 532:fe11edbda85c 392 * @param Height: The height of data to be transferred from source to destination.
mbed_official 87:085cde657901 393 * @retval HAL status
mbed_official 87:085cde657901 394 */
mbed_official 532:fe11edbda85c 395 HAL_StatusTypeDef HAL_DMA2D_Start_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
mbed_official 87:085cde657901 396 {
mbed_official 87:085cde657901 397 /* Process locked */
mbed_official 87:085cde657901 398 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 399
mbed_official 87:085cde657901 400 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 401 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 402
mbed_official 87:085cde657901 403 /* Check the parameters */
mbed_official 532:fe11edbda85c 404 assert_param(IS_DMA2D_LINE(Height));
mbed_official 87:085cde657901 405 assert_param(IS_DMA2D_PIXEL(Width));
mbed_official 87:085cde657901 406
mbed_official 87:085cde657901 407 /* Disable the Peripheral */
mbed_official 87:085cde657901 408 __HAL_DMA2D_DISABLE(hdma2d);
mbed_official 87:085cde657901 409
mbed_official 87:085cde657901 410 /* Configure the source, destination address and the data size */
mbed_official 532:fe11edbda85c 411 DMA2D_SetConfig(hdma2d, pdata, DstAddress, Width, Height);
mbed_official 87:085cde657901 412
mbed_official 87:085cde657901 413 /* Enable the transfer complete interrupt */
mbed_official 87:085cde657901 414 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TC);
mbed_official 87:085cde657901 415
mbed_official 87:085cde657901 416 /* Enable the transfer Error interrupt */
mbed_official 87:085cde657901 417 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TE);
mbed_official 87:085cde657901 418
mbed_official 87:085cde657901 419 /* Enable the Peripheral */
mbed_official 87:085cde657901 420 __HAL_DMA2D_ENABLE(hdma2d);
mbed_official 87:085cde657901 421
mbed_official 87:085cde657901 422 /* Enable the configuration error interrupt */
mbed_official 87:085cde657901 423 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CE);
mbed_official 87:085cde657901 424
mbed_official 87:085cde657901 425 return HAL_OK;
mbed_official 87:085cde657901 426 }
mbed_official 87:085cde657901 427
mbed_official 87:085cde657901 428 /**
mbed_official 87:085cde657901 429 * @brief Start the multi-source DMA2D Transfer.
mbed_official 87:085cde657901 430 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 431 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 432 * @param SrcAddress1: The source memory Buffer address of the foreground layer.
mbed_official 369:2e96f1b71984 433 * @param SrcAddress2: The source memory Buffer address of the background layer.
mbed_official 87:085cde657901 434 * @param DstAddress: The destination memory Buffer address
mbed_official 87:085cde657901 435 * @param Width: The width of data to be transferred from source to destination.
mbed_official 532:fe11edbda85c 436 * @param Height: The height of data to be transferred from source to destination.
mbed_official 87:085cde657901 437 * @retval HAL status
mbed_official 87:085cde657901 438 */
mbed_official 532:fe11edbda85c 439 HAL_StatusTypeDef HAL_DMA2D_BlendingStart(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
mbed_official 87:085cde657901 440 {
mbed_official 87:085cde657901 441 /* Process locked */
mbed_official 87:085cde657901 442 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 443
mbed_official 87:085cde657901 444 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 445 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 446
mbed_official 87:085cde657901 447 /* Check the parameters */
mbed_official 532:fe11edbda85c 448 assert_param(IS_DMA2D_LINE(Height));
mbed_official 87:085cde657901 449 assert_param(IS_DMA2D_PIXEL(Width));
mbed_official 87:085cde657901 450
mbed_official 87:085cde657901 451 /* Disable the Peripheral */
mbed_official 87:085cde657901 452 __HAL_DMA2D_DISABLE(hdma2d);
mbed_official 87:085cde657901 453
mbed_official 87:085cde657901 454 /* Configure DMA2D Stream source2 address */
mbed_official 87:085cde657901 455 hdma2d->Instance->BGMAR = SrcAddress2;
mbed_official 87:085cde657901 456
mbed_official 87:085cde657901 457 /* Configure the source, destination address and the data size */
mbed_official 532:fe11edbda85c 458 DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
mbed_official 87:085cde657901 459
mbed_official 87:085cde657901 460 /* Enable the Peripheral */
mbed_official 87:085cde657901 461 __HAL_DMA2D_ENABLE(hdma2d);
mbed_official 87:085cde657901 462
mbed_official 87:085cde657901 463 return HAL_OK;
mbed_official 87:085cde657901 464 }
mbed_official 87:085cde657901 465
mbed_official 87:085cde657901 466 /**
mbed_official 87:085cde657901 467 * @brief Start the multi-source DMA2D Transfer with interrupt enabled.
mbed_official 87:085cde657901 468 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 469 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 470 * @param SrcAddress1: The source memory Buffer address of the foreground layer.
mbed_official 369:2e96f1b71984 471 * @param SrcAddress2: The source memory Buffer address of the background layer.
mbed_official 87:085cde657901 472 * @param DstAddress: The destination memory Buffer address.
mbed_official 87:085cde657901 473 * @param Width: The width of data to be transferred from source to destination.
mbed_official 532:fe11edbda85c 474 * @param Height: The height of data to be transferred from source to destination.
mbed_official 87:085cde657901 475 * @retval HAL status
mbed_official 87:085cde657901 476 */
mbed_official 532:fe11edbda85c 477 HAL_StatusTypeDef HAL_DMA2D_BlendingStart_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Height)
mbed_official 87:085cde657901 478 {
mbed_official 87:085cde657901 479 /* Process locked */
mbed_official 87:085cde657901 480 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 481
mbed_official 87:085cde657901 482 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 483 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 484
mbed_official 87:085cde657901 485 /* Check the parameters */
mbed_official 532:fe11edbda85c 486 assert_param(IS_DMA2D_LINE(Height));
mbed_official 87:085cde657901 487 assert_param(IS_DMA2D_PIXEL(Width));
mbed_official 87:085cde657901 488
mbed_official 87:085cde657901 489 /* Disable the Peripheral */
mbed_official 87:085cde657901 490 __HAL_DMA2D_DISABLE(hdma2d);
mbed_official 369:2e96f1b71984 491
mbed_official 369:2e96f1b71984 492 /* Configure DMA2D Stream source2 address */
mbed_official 369:2e96f1b71984 493 hdma2d->Instance->BGMAR = SrcAddress2;
mbed_official 87:085cde657901 494
mbed_official 87:085cde657901 495 /* Configure the source, destination address and the data size */
mbed_official 532:fe11edbda85c 496 DMA2D_SetConfig(hdma2d, SrcAddress1, DstAddress, Width, Height);
mbed_official 87:085cde657901 497
mbed_official 87:085cde657901 498 /* Enable the configuration error interrupt */
mbed_official 87:085cde657901 499 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_CE);
mbed_official 87:085cde657901 500
mbed_official 87:085cde657901 501 /* Enable the transfer complete interrupt */
mbed_official 87:085cde657901 502 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TC);
mbed_official 87:085cde657901 503
mbed_official 87:085cde657901 504 /* Enable the transfer Error interrupt */
mbed_official 87:085cde657901 505 __HAL_DMA2D_ENABLE_IT(hdma2d, DMA2D_IT_TE);
mbed_official 87:085cde657901 506
mbed_official 87:085cde657901 507 /* Enable the Peripheral */
mbed_official 87:085cde657901 508 __HAL_DMA2D_ENABLE(hdma2d);
mbed_official 87:085cde657901 509
mbed_official 87:085cde657901 510 return HAL_OK;
mbed_official 87:085cde657901 511 }
mbed_official 87:085cde657901 512
mbed_official 87:085cde657901 513 /**
mbed_official 87:085cde657901 514 * @brief Abort the DMA2D Transfer.
mbed_official 87:085cde657901 515 * @param hdma2d : pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 516 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 517 * @retval HAL status
mbed_official 87:085cde657901 518 */
mbed_official 87:085cde657901 519 HAL_StatusTypeDef HAL_DMA2D_Abort(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 520 {
mbed_official 369:2e96f1b71984 521 uint32_t tickstart = 0;
mbed_official 87:085cde657901 522
mbed_official 87:085cde657901 523 /* Disable the DMA2D */
mbed_official 87:085cde657901 524 __HAL_DMA2D_DISABLE(hdma2d);
mbed_official 87:085cde657901 525
mbed_official 369:2e96f1b71984 526 /* Get tick */
mbed_official 369:2e96f1b71984 527 tickstart = HAL_GetTick();
mbed_official 87:085cde657901 528
mbed_official 87:085cde657901 529 /* Check if the DMA2D is effectively disabled */
mbed_official 87:085cde657901 530 while((hdma2d->Instance->CR & DMA2D_CR_START) != 0)
mbed_official 87:085cde657901 531 {
mbed_official 369:2e96f1b71984 532 if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA2D_ABORT)
mbed_official 87:085cde657901 533 {
mbed_official 87:085cde657901 534 /* Update error code */
mbed_official 87:085cde657901 535 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
mbed_official 87:085cde657901 536
mbed_official 87:085cde657901 537 /* Change the DMA2D state */
mbed_official 87:085cde657901 538 hdma2d->State= HAL_DMA2D_STATE_TIMEOUT;
mbed_official 87:085cde657901 539
mbed_official 87:085cde657901 540 /* Process Unlocked */
mbed_official 87:085cde657901 541 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 542
mbed_official 87:085cde657901 543 return HAL_TIMEOUT;
mbed_official 87:085cde657901 544 }
mbed_official 87:085cde657901 545 }
mbed_official 87:085cde657901 546 /* Process Unlocked */
mbed_official 87:085cde657901 547 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 548
mbed_official 87:085cde657901 549 /* Change the DMA2D state*/
mbed_official 87:085cde657901 550 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 551
mbed_official 87:085cde657901 552 return HAL_OK;
mbed_official 87:085cde657901 553 }
mbed_official 87:085cde657901 554
mbed_official 87:085cde657901 555 /**
mbed_official 87:085cde657901 556 * @brief Suspend the DMA2D Transfer.
mbed_official 87:085cde657901 557 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 558 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 559 * @retval HAL status
mbed_official 87:085cde657901 560 */
mbed_official 87:085cde657901 561 HAL_StatusTypeDef HAL_DMA2D_Suspend(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 562 {
mbed_official 369:2e96f1b71984 563 uint32_t tickstart = 0;
mbed_official 87:085cde657901 564
mbed_official 87:085cde657901 565 /* Suspend the DMA2D transfer */
mbed_official 87:085cde657901 566 hdma2d->Instance->CR |= DMA2D_CR_SUSP;
mbed_official 87:085cde657901 567
mbed_official 369:2e96f1b71984 568 /* Get tick */
mbed_official 369:2e96f1b71984 569 tickstart = HAL_GetTick();
mbed_official 87:085cde657901 570
mbed_official 87:085cde657901 571 /* Check if the DMA2D is effectively suspended */
mbed_official 87:085cde657901 572 while((hdma2d->Instance->CR & DMA2D_CR_SUSP) != DMA2D_CR_SUSP)
mbed_official 87:085cde657901 573 {
mbed_official 369:2e96f1b71984 574 if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA2D_SUSPEND)
mbed_official 87:085cde657901 575 {
mbed_official 87:085cde657901 576 /* Update error code */
mbed_official 87:085cde657901 577 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
mbed_official 87:085cde657901 578
mbed_official 87:085cde657901 579 /* Change the DMA2D state */
mbed_official 87:085cde657901 580 hdma2d->State= HAL_DMA2D_STATE_TIMEOUT;
mbed_official 87:085cde657901 581
mbed_official 87:085cde657901 582 return HAL_TIMEOUT;
mbed_official 87:085cde657901 583 }
mbed_official 87:085cde657901 584 }
mbed_official 87:085cde657901 585 /* Change the DMA2D state*/
mbed_official 87:085cde657901 586 hdma2d->State = HAL_DMA2D_STATE_SUSPEND;
mbed_official 87:085cde657901 587
mbed_official 87:085cde657901 588 return HAL_OK;
mbed_official 87:085cde657901 589 }
mbed_official 87:085cde657901 590
mbed_official 87:085cde657901 591 /**
mbed_official 87:085cde657901 592 * @brief Resume the DMA2D Transfer.
mbed_official 87:085cde657901 593 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 594 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 595 * @retval HAL status
mbed_official 87:085cde657901 596 */
mbed_official 87:085cde657901 597 HAL_StatusTypeDef HAL_DMA2D_Resume(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 598 {
mbed_official 87:085cde657901 599 /* Resume the DMA2D transfer */
mbed_official 87:085cde657901 600 hdma2d->Instance->CR &= ~DMA2D_CR_SUSP;
mbed_official 87:085cde657901 601
mbed_official 87:085cde657901 602 /* Change the DMA2D state*/
mbed_official 87:085cde657901 603 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 604
mbed_official 87:085cde657901 605 return HAL_OK;
mbed_official 87:085cde657901 606 }
mbed_official 87:085cde657901 607
mbed_official 87:085cde657901 608 /**
mbed_official 87:085cde657901 609 * @brief Polling for transfer complete or CLUT loading.
mbed_official 87:085cde657901 610 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 611 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 612 * @param Timeout: Timeout duration
mbed_official 87:085cde657901 613 * @retval HAL status
mbed_official 87:085cde657901 614 */
mbed_official 87:085cde657901 615 HAL_StatusTypeDef HAL_DMA2D_PollForTransfer(DMA2D_HandleTypeDef *hdma2d, uint32_t Timeout)
mbed_official 87:085cde657901 616 {
mbed_official 87:085cde657901 617 uint32_t tmp, tmp1;
mbed_official 369:2e96f1b71984 618 uint32_t tickstart = 0;
mbed_official 87:085cde657901 619
mbed_official 87:085cde657901 620 /* Polling for DMA2D transfer */
mbed_official 87:085cde657901 621 if((hdma2d->Instance->CR & DMA2D_CR_START) != 0)
mbed_official 87:085cde657901 622 {
mbed_official 369:2e96f1b71984 623 /* Get tick */
mbed_official 369:2e96f1b71984 624 tickstart = HAL_GetTick();
mbed_official 87:085cde657901 625
mbed_official 87:085cde657901 626 while(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TC) == RESET)
mbed_official 87:085cde657901 627 {
mbed_official 87:085cde657901 628 tmp = __HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CE);
mbed_official 87:085cde657901 629 tmp1 = __HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TE);
mbed_official 87:085cde657901 630
mbed_official 87:085cde657901 631 if((tmp != RESET) || (tmp1 != RESET))
mbed_official 87:085cde657901 632 {
mbed_official 87:085cde657901 633 /* Clear the transfer and configuration error flags */
mbed_official 87:085cde657901 634 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE);
mbed_official 87:085cde657901 635 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TE);
mbed_official 87:085cde657901 636
mbed_official 87:085cde657901 637 /* Change DMA2D state */
mbed_official 87:085cde657901 638 hdma2d->State= HAL_DMA2D_STATE_ERROR;
mbed_official 87:085cde657901 639
mbed_official 87:085cde657901 640 /* Process unlocked */
mbed_official 87:085cde657901 641 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 642
mbed_official 87:085cde657901 643 return HAL_ERROR;
mbed_official 87:085cde657901 644 }
mbed_official 87:085cde657901 645 /* Check for the Timeout */
mbed_official 87:085cde657901 646 if(Timeout != HAL_MAX_DELAY)
mbed_official 87:085cde657901 647 {
mbed_official 369:2e96f1b71984 648 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 87:085cde657901 649 {
mbed_official 87:085cde657901 650 /* Process unlocked */
mbed_official 87:085cde657901 651 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 652
mbed_official 87:085cde657901 653 /* Update error code */
mbed_official 87:085cde657901 654 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
mbed_official 87:085cde657901 655
mbed_official 87:085cde657901 656 /* Change the DMA2D state */
mbed_official 87:085cde657901 657 hdma2d->State= HAL_DMA2D_STATE_TIMEOUT;
mbed_official 87:085cde657901 658
mbed_official 87:085cde657901 659 return HAL_TIMEOUT;
mbed_official 87:085cde657901 660 }
mbed_official 87:085cde657901 661 }
mbed_official 87:085cde657901 662 }
mbed_official 87:085cde657901 663 }
mbed_official 87:085cde657901 664 /* Polling for CLUT loading */
mbed_official 87:085cde657901 665 if((hdma2d->Instance->FGPFCCR & DMA2D_FGPFCCR_START) != 0)
mbed_official 87:085cde657901 666 {
mbed_official 369:2e96f1b71984 667 /* Get tick */
mbed_official 369:2e96f1b71984 668 tickstart = HAL_GetTick();
mbed_official 87:085cde657901 669
mbed_official 87:085cde657901 670 while(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CTC) == RESET)
mbed_official 87:085cde657901 671 {
mbed_official 87:085cde657901 672 if((__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CAE) != RESET))
mbed_official 87:085cde657901 673 {
mbed_official 87:085cde657901 674 /* Clear the transfer and configuration error flags */
mbed_official 87:085cde657901 675 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CAE);
mbed_official 87:085cde657901 676
mbed_official 87:085cde657901 677 /* Change DMA2D state */
mbed_official 87:085cde657901 678 hdma2d->State= HAL_DMA2D_STATE_ERROR;
mbed_official 87:085cde657901 679
mbed_official 87:085cde657901 680 return HAL_ERROR;
mbed_official 87:085cde657901 681 }
mbed_official 87:085cde657901 682 /* Check for the Timeout */
mbed_official 87:085cde657901 683 if(Timeout != HAL_MAX_DELAY)
mbed_official 87:085cde657901 684 {
mbed_official 369:2e96f1b71984 685 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 87:085cde657901 686 {
mbed_official 87:085cde657901 687 /* Update error code */
mbed_official 87:085cde657901 688 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
mbed_official 87:085cde657901 689
mbed_official 87:085cde657901 690 /* Change the DMA2D state */
mbed_official 87:085cde657901 691 hdma2d->State= HAL_DMA2D_STATE_TIMEOUT;
mbed_official 87:085cde657901 692
mbed_official 87:085cde657901 693 return HAL_TIMEOUT;
mbed_official 87:085cde657901 694 }
mbed_official 87:085cde657901 695 }
mbed_official 87:085cde657901 696 }
mbed_official 87:085cde657901 697 }
mbed_official 87:085cde657901 698 /* Clear the transfer complete flag */
mbed_official 87:085cde657901 699 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC);
mbed_official 87:085cde657901 700
mbed_official 87:085cde657901 701 /* Clear the CLUT loading flag */
mbed_official 87:085cde657901 702 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CTC);
mbed_official 87:085cde657901 703
mbed_official 87:085cde657901 704 /* Change DMA2D state */
mbed_official 87:085cde657901 705 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 706
mbed_official 87:085cde657901 707 /* Process unlocked */
mbed_official 87:085cde657901 708 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 709
mbed_official 87:085cde657901 710 return HAL_OK;
mbed_official 87:085cde657901 711 }
mbed_official 87:085cde657901 712 /**
mbed_official 87:085cde657901 713 * @brief Handles DMA2D interrupt request.
mbed_official 87:085cde657901 714 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 715 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 716 * @retval HAL status
mbed_official 87:085cde657901 717 */
mbed_official 87:085cde657901 718 void HAL_DMA2D_IRQHandler(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 719 {
mbed_official 87:085cde657901 720 /* Transfer Error Interrupt management ***************************************/
mbed_official 87:085cde657901 721 if(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TE) != RESET)
mbed_official 87:085cde657901 722 {
mbed_official 106:ced8cbb51063 723 if(__HAL_DMA2D_GET_IT_SOURCE(hdma2d, DMA2D_IT_TE) != RESET)
mbed_official 87:085cde657901 724 {
mbed_official 87:085cde657901 725 /* Disable the transfer Error interrupt */
mbed_official 87:085cde657901 726 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TE);
mbed_official 87:085cde657901 727
mbed_official 87:085cde657901 728 /* Update error code */
mbed_official 87:085cde657901 729 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;
mbed_official 87:085cde657901 730
mbed_official 87:085cde657901 731 /* Clear the transfer error flag */
mbed_official 87:085cde657901 732 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TE);
mbed_official 87:085cde657901 733
mbed_official 87:085cde657901 734 /* Change DMA2D state */
mbed_official 87:085cde657901 735 hdma2d->State = HAL_DMA2D_STATE_ERROR;
mbed_official 87:085cde657901 736
mbed_official 87:085cde657901 737 /* Process Unlocked */
mbed_official 87:085cde657901 738 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 739
mbed_official 384:ef87175507f1 740 if(hdma2d->XferErrorCallback != HAL_NULL)
mbed_official 87:085cde657901 741 {
mbed_official 87:085cde657901 742 /* Transfer error Callback */
mbed_official 87:085cde657901 743 hdma2d->XferErrorCallback(hdma2d);
mbed_official 87:085cde657901 744 }
mbed_official 87:085cde657901 745 }
mbed_official 87:085cde657901 746 }
mbed_official 87:085cde657901 747 /* Configuration Error Interrupt management **********************************/
mbed_official 87:085cde657901 748 if(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_CE) != RESET)
mbed_official 87:085cde657901 749 {
mbed_official 106:ced8cbb51063 750 if(__HAL_DMA2D_GET_IT_SOURCE(hdma2d, DMA2D_IT_CE) != RESET)
mbed_official 87:085cde657901 751 {
mbed_official 87:085cde657901 752 /* Disable the Configuration Error interrupt */
mbed_official 87:085cde657901 753 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_CE);
mbed_official 87:085cde657901 754
mbed_official 87:085cde657901 755 /* Clear the Configuration error flag */
mbed_official 87:085cde657901 756 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_CE);
mbed_official 87:085cde657901 757
mbed_official 87:085cde657901 758 /* Update error code */
mbed_official 87:085cde657901 759 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;
mbed_official 87:085cde657901 760
mbed_official 87:085cde657901 761 /* Change DMA2D state */
mbed_official 87:085cde657901 762 hdma2d->State = HAL_DMA2D_STATE_ERROR;
mbed_official 87:085cde657901 763
mbed_official 87:085cde657901 764 /* Process Unlocked */
mbed_official 87:085cde657901 765 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 766
mbed_official 384:ef87175507f1 767 if(hdma2d->XferErrorCallback != HAL_NULL)
mbed_official 87:085cde657901 768 {
mbed_official 87:085cde657901 769 /* Transfer error Callback */
mbed_official 87:085cde657901 770 hdma2d->XferErrorCallback(hdma2d);
mbed_official 87:085cde657901 771 }
mbed_official 87:085cde657901 772 }
mbed_official 87:085cde657901 773 }
mbed_official 87:085cde657901 774 /* Transfer Complete Interrupt management ************************************/
mbed_official 87:085cde657901 775 if(__HAL_DMA2D_GET_FLAG(hdma2d, DMA2D_FLAG_TC) != RESET)
mbed_official 87:085cde657901 776 {
mbed_official 106:ced8cbb51063 777 if(__HAL_DMA2D_GET_IT_SOURCE(hdma2d, DMA2D_IT_TC) != RESET)
mbed_official 87:085cde657901 778 {
mbed_official 87:085cde657901 779 /* Disable the transfer complete interrupt */
mbed_official 87:085cde657901 780 __HAL_DMA2D_DISABLE_IT(hdma2d, DMA2D_IT_TC);
mbed_official 87:085cde657901 781
mbed_official 87:085cde657901 782 /* Clear the transfer complete flag */
mbed_official 87:085cde657901 783 __HAL_DMA2D_CLEAR_FLAG(hdma2d, DMA2D_FLAG_TC);
mbed_official 87:085cde657901 784
mbed_official 87:085cde657901 785 /* Update error code */
mbed_official 87:085cde657901 786 hdma2d->ErrorCode |= HAL_DMA2D_ERROR_NONE;
mbed_official 87:085cde657901 787
mbed_official 87:085cde657901 788 /* Change DMA2D state */
mbed_official 87:085cde657901 789 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 790
mbed_official 87:085cde657901 791 /* Process Unlocked */
mbed_official 87:085cde657901 792 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 793
mbed_official 384:ef87175507f1 794 if(hdma2d->XferCpltCallback != HAL_NULL)
mbed_official 87:085cde657901 795 {
mbed_official 87:085cde657901 796 /* Transfer complete Callback */
mbed_official 87:085cde657901 797 hdma2d->XferCpltCallback(hdma2d);
mbed_official 87:085cde657901 798 }
mbed_official 87:085cde657901 799 }
mbed_official 87:085cde657901 800 }
mbed_official 87:085cde657901 801 }
mbed_official 87:085cde657901 802
mbed_official 87:085cde657901 803 /**
mbed_official 87:085cde657901 804 * @}
mbed_official 87:085cde657901 805 */
mbed_official 87:085cde657901 806
mbed_official 87:085cde657901 807 /** @defgroup DMA2D_Group3 Peripheral Control functions
mbed_official 87:085cde657901 808 * @brief Peripheral Control functions
mbed_official 87:085cde657901 809 *
mbed_official 87:085cde657901 810 @verbatim
mbed_official 87:085cde657901 811 ===============================================================================
mbed_official 87:085cde657901 812 ##### Peripheral Control functions #####
mbed_official 87:085cde657901 813 ===============================================================================
mbed_official 87:085cde657901 814 [..] This section provides functions allowing to:
mbed_official 87:085cde657901 815 (+) Configure the DMA2D foreground or/and background parameters.
mbed_official 87:085cde657901 816 (+) Configure the DMA2D CLUT transfer.
mbed_official 87:085cde657901 817 (+) Enable DMA2D CLUT.
mbed_official 87:085cde657901 818 (+) Disable DMA2D CLUT.
mbed_official 87:085cde657901 819 (+) Configure the line watermark
mbed_official 87:085cde657901 820
mbed_official 87:085cde657901 821 @endverbatim
mbed_official 87:085cde657901 822 * @{
mbed_official 87:085cde657901 823 */
mbed_official 87:085cde657901 824 /**
mbed_official 87:085cde657901 825 * @brief Configure the DMA2D Layer according to the specified
mbed_official 87:085cde657901 826 * parameters in the DMA2D_InitTypeDef and create the associated handle.
mbed_official 226:b062af740e40 827 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 226:b062af740e40 828 * the configuration information for the DMA2D.
mbed_official 226:b062af740e40 829 * @param LayerIdx: DMA2D Layer index.
mbed_official 87:085cde657901 830 * This parameter can be one of the following values:
mbed_official 87:085cde657901 831 * 0(background) / 1(foreground)
mbed_official 87:085cde657901 832 * @retval HAL status
mbed_official 87:085cde657901 833 */
mbed_official 87:085cde657901 834 HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
mbed_official 87:085cde657901 835 {
mbed_official 87:085cde657901 836 DMA2D_LayerCfgTypeDef *pLayerCfg = &hdma2d->LayerCfg[LayerIdx];
mbed_official 87:085cde657901 837
mbed_official 87:085cde657901 838 uint32_t tmp = 0;
mbed_official 87:085cde657901 839
mbed_official 87:085cde657901 840 /* Process locked */
mbed_official 87:085cde657901 841 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 842
mbed_official 87:085cde657901 843 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 844 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 845
mbed_official 87:085cde657901 846 /* Check the parameters */
mbed_official 87:085cde657901 847 assert_param(IS_DMA2D_LAYER(LayerIdx));
mbed_official 87:085cde657901 848 assert_param(IS_DMA2D_OFFSET(pLayerCfg->InputOffset));
mbed_official 87:085cde657901 849 if(hdma2d->Init.Mode != DMA2D_R2M)
mbed_official 87:085cde657901 850 {
mbed_official 87:085cde657901 851 assert_param(IS_DMA2D_INPUT_COLOR_MODE(pLayerCfg->InputColorMode));
mbed_official 87:085cde657901 852 if(hdma2d->Init.Mode != DMA2D_M2M)
mbed_official 87:085cde657901 853 {
mbed_official 87:085cde657901 854 assert_param(IS_DMA2D_ALPHA_MODE(pLayerCfg->AlphaMode));
mbed_official 87:085cde657901 855 }
mbed_official 87:085cde657901 856 }
mbed_official 87:085cde657901 857
mbed_official 87:085cde657901 858 /* Configure the background DMA2D layer */
mbed_official 87:085cde657901 859 if(LayerIdx == 0)
mbed_official 87:085cde657901 860 {
mbed_official 87:085cde657901 861 /* DMA2D BGPFCR register configuration -----------------------------------*/
mbed_official 87:085cde657901 862 /* Get the BGPFCCR register value */
mbed_official 87:085cde657901 863 tmp = hdma2d->Instance->BGPFCCR;
mbed_official 87:085cde657901 864
mbed_official 87:085cde657901 865 /* Clear Input color mode, alpha value and alpha mode bits */
mbed_official 87:085cde657901 866 tmp &= (uint32_t)~(DMA2D_BGPFCCR_CM | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_ALPHA);
mbed_official 87:085cde657901 867
mbed_official 369:2e96f1b71984 868 if ((pLayerCfg->InputColorMode == CM_A4) || (pLayerCfg->InputColorMode == CM_A8))
mbed_official 369:2e96f1b71984 869 {
mbed_official 369:2e96f1b71984 870 /* Prepare the value to be wrote to the BGPFCCR register */
mbed_official 369:2e96f1b71984 871 tmp |= (pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << 16) | ((pLayerCfg->InputAlpha) & 0xFF000000));
mbed_official 369:2e96f1b71984 872 }
mbed_official 369:2e96f1b71984 873 else
mbed_official 369:2e96f1b71984 874 {
mbed_official 369:2e96f1b71984 875 /* Prepare the value to be wrote to the BGPFCCR register */
mbed_official 369:2e96f1b71984 876 tmp |= (pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << 16) | (pLayerCfg->InputAlpha << 24));
mbed_official 369:2e96f1b71984 877 }
mbed_official 87:085cde657901 878
mbed_official 87:085cde657901 879 /* Write to DMA2D BGPFCCR register */
mbed_official 87:085cde657901 880 hdma2d->Instance->BGPFCCR = tmp;
mbed_official 87:085cde657901 881
mbed_official 87:085cde657901 882 /* DMA2D BGOR register configuration -------------------------------------*/
mbed_official 87:085cde657901 883 /* Get the BGOR register value */
mbed_official 87:085cde657901 884 tmp = hdma2d->Instance->BGOR;
mbed_official 87:085cde657901 885
mbed_official 87:085cde657901 886 /* Clear colors bits */
mbed_official 87:085cde657901 887 tmp &= (uint32_t)~DMA2D_BGOR_LO;
mbed_official 87:085cde657901 888
mbed_official 87:085cde657901 889 /* Prepare the value to be wrote to the BGOR register */
mbed_official 87:085cde657901 890 tmp |= pLayerCfg->InputOffset;
mbed_official 87:085cde657901 891
mbed_official 87:085cde657901 892 /* Write to DMA2D BGOR register */
mbed_official 87:085cde657901 893 hdma2d->Instance->BGOR = tmp;
mbed_official 369:2e96f1b71984 894
mbed_official 369:2e96f1b71984 895 if ((pLayerCfg->InputColorMode == CM_A4) || (pLayerCfg->InputColorMode == CM_A8))
mbed_official 369:2e96f1b71984 896 {
mbed_official 369:2e96f1b71984 897 /* Prepare the value to be wrote to the BGCOLR register */
mbed_official 369:2e96f1b71984 898 tmp |= ((pLayerCfg->InputAlpha) & 0x00FFFFFF);
mbed_official 369:2e96f1b71984 899
mbed_official 369:2e96f1b71984 900 /* Write to DMA2D BGCOLR register */
mbed_official 369:2e96f1b71984 901 hdma2d->Instance->BGCOLR = tmp;
mbed_official 369:2e96f1b71984 902 }
mbed_official 87:085cde657901 903 }
mbed_official 87:085cde657901 904 /* Configure the foreground DMA2D layer */
mbed_official 87:085cde657901 905 else
mbed_official 87:085cde657901 906 {
mbed_official 87:085cde657901 907 /* DMA2D FGPFCR register configuration -----------------------------------*/
mbed_official 87:085cde657901 908 /* Get the FGPFCCR register value */
mbed_official 87:085cde657901 909 tmp = hdma2d->Instance->FGPFCCR;
mbed_official 87:085cde657901 910
mbed_official 87:085cde657901 911 /* Clear Input color mode, alpha value and alpha mode bits */
mbed_official 87:085cde657901 912 tmp &= (uint32_t)~(DMA2D_FGPFCCR_CM | DMA2D_FGPFCCR_AM | DMA2D_FGPFCCR_ALPHA);
mbed_official 87:085cde657901 913
mbed_official 369:2e96f1b71984 914 if ((pLayerCfg->InputColorMode == CM_A4) || (pLayerCfg->InputColorMode == CM_A8))
mbed_official 369:2e96f1b71984 915 {
mbed_official 369:2e96f1b71984 916 /* Prepare the value to be wrote to the FGPFCCR register */
mbed_official 369:2e96f1b71984 917 tmp |= (pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << 16) | ((pLayerCfg->InputAlpha) & 0xFF000000));
mbed_official 369:2e96f1b71984 918 }
mbed_official 369:2e96f1b71984 919 else
mbed_official 369:2e96f1b71984 920 {
mbed_official 369:2e96f1b71984 921 /* Prepare the value to be wrote to the FGPFCCR register */
mbed_official 369:2e96f1b71984 922 tmp |= (pLayerCfg->InputColorMode | (pLayerCfg->AlphaMode << 16) | (pLayerCfg->InputAlpha << 24));
mbed_official 369:2e96f1b71984 923 }
mbed_official 87:085cde657901 924
mbed_official 87:085cde657901 925 /* Write to DMA2D FGPFCCR register */
mbed_official 87:085cde657901 926 hdma2d->Instance->FGPFCCR = tmp;
mbed_official 87:085cde657901 927
mbed_official 87:085cde657901 928 /* DMA2D FGOR register configuration -------------------------------------*/
mbed_official 87:085cde657901 929 /* Get the FGOR register value */
mbed_official 87:085cde657901 930 tmp = hdma2d->Instance->FGOR;
mbed_official 87:085cde657901 931
mbed_official 87:085cde657901 932 /* Clear colors bits */
mbed_official 87:085cde657901 933 tmp &= (uint32_t)~DMA2D_FGOR_LO;
mbed_official 87:085cde657901 934
mbed_official 87:085cde657901 935 /* Prepare the value to be wrote to the FGOR register */
mbed_official 87:085cde657901 936 tmp |= pLayerCfg->InputOffset;
mbed_official 87:085cde657901 937
mbed_official 87:085cde657901 938 /* Write to DMA2D FGOR register */
mbed_official 87:085cde657901 939 hdma2d->Instance->FGOR = tmp;
mbed_official 369:2e96f1b71984 940
mbed_official 369:2e96f1b71984 941 if ((pLayerCfg->InputColorMode == CM_A4) || (pLayerCfg->InputColorMode == CM_A8))
mbed_official 369:2e96f1b71984 942 {
mbed_official 369:2e96f1b71984 943 /* Prepare the value to be wrote to the FGCOLR register */
mbed_official 369:2e96f1b71984 944 tmp |= ((pLayerCfg->InputAlpha) & 0x00FFFFFF);
mbed_official 369:2e96f1b71984 945
mbed_official 369:2e96f1b71984 946 /* Write to DMA2D FGCOLR register */
mbed_official 369:2e96f1b71984 947 hdma2d->Instance->FGCOLR = tmp;
mbed_official 369:2e96f1b71984 948 }
mbed_official 87:085cde657901 949 }
mbed_official 87:085cde657901 950 /* Initialize the DMA2D state*/
mbed_official 87:085cde657901 951 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 952
mbed_official 87:085cde657901 953 /* Process unlocked */
mbed_official 87:085cde657901 954 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 955
mbed_official 87:085cde657901 956 return HAL_OK;
mbed_official 87:085cde657901 957 }
mbed_official 87:085cde657901 958
mbed_official 87:085cde657901 959 /**
mbed_official 87:085cde657901 960 * @brief Configure the DMA2D CLUT Transfer.
mbed_official 87:085cde657901 961 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 962 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 963 * @param CLUTCfg: pointer to a DMA2D_CLUTCfgTypeDef structure that contains
mbed_official 87:085cde657901 964 * the configuration information for the color look up table.
mbed_official 226:b062af740e40 965 * @param LayerIdx: DMA2D Layer index.
mbed_official 87:085cde657901 966 * This parameter can be one of the following values:
mbed_official 87:085cde657901 967 * 0(background) / 1(foreground)
mbed_official 87:085cde657901 968 * @retval HAL status
mbed_official 87:085cde657901 969 */
mbed_official 87:085cde657901 970 HAL_StatusTypeDef HAL_DMA2D_ConfigCLUT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx)
mbed_official 87:085cde657901 971 {
mbed_official 87:085cde657901 972 uint32_t tmp = 0, tmp1 = 0;
mbed_official 87:085cde657901 973
mbed_official 87:085cde657901 974 /* Check the parameters */
mbed_official 87:085cde657901 975 assert_param(IS_DMA2D_LAYER(LayerIdx));
mbed_official 87:085cde657901 976 assert_param(IS_DMA2D_CLUT_CM(CLUTCfg.CLUTColorMode));
mbed_official 87:085cde657901 977 assert_param(IS_DMA2D_CLUT_SIZE(CLUTCfg.Size));
mbed_official 87:085cde657901 978
mbed_official 87:085cde657901 979 /* Configure the CLUT of the background DMA2D layer */
mbed_official 87:085cde657901 980 if(LayerIdx == 0)
mbed_official 87:085cde657901 981 {
mbed_official 87:085cde657901 982 /* Get the BGCMAR register value */
mbed_official 87:085cde657901 983 tmp = hdma2d->Instance->BGCMAR;
mbed_official 87:085cde657901 984
mbed_official 87:085cde657901 985 /* Clear CLUT address bits */
mbed_official 87:085cde657901 986 tmp &= (uint32_t)~DMA2D_BGCMAR_MA;
mbed_official 87:085cde657901 987
mbed_official 87:085cde657901 988 /* Prepare the value to be wrote to the BGCMAR register */
mbed_official 87:085cde657901 989 tmp |= (uint32_t)CLUTCfg.pCLUT;
mbed_official 87:085cde657901 990
mbed_official 87:085cde657901 991 /* Write to DMA2D BGCMAR register */
mbed_official 87:085cde657901 992 hdma2d->Instance->BGCMAR = tmp;
mbed_official 87:085cde657901 993
mbed_official 87:085cde657901 994 /* Get the BGPFCCR register value */
mbed_official 87:085cde657901 995 tmp = hdma2d->Instance->BGPFCCR;
mbed_official 87:085cde657901 996
mbed_official 87:085cde657901 997 /* Clear CLUT size and CLUT address bits */
mbed_official 87:085cde657901 998 tmp &= (uint32_t)~(DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM);
mbed_official 87:085cde657901 999
mbed_official 87:085cde657901 1000 /* Get the CLUT size */
mbed_official 87:085cde657901 1001 tmp1 = CLUTCfg.Size << 16;
mbed_official 87:085cde657901 1002
mbed_official 87:085cde657901 1003 /* Prepare the value to be wrote to the BGPFCCR register */
mbed_official 87:085cde657901 1004 tmp |= (CLUTCfg.CLUTColorMode | tmp1);
mbed_official 87:085cde657901 1005
mbed_official 87:085cde657901 1006 /* Write to DMA2D BGPFCCR register */
mbed_official 87:085cde657901 1007 hdma2d->Instance->BGPFCCR = tmp;
mbed_official 87:085cde657901 1008 }
mbed_official 87:085cde657901 1009 /* Configure the CLUT of the foreground DMA2D layer */
mbed_official 87:085cde657901 1010 else
mbed_official 87:085cde657901 1011 {
mbed_official 87:085cde657901 1012 /* Get the FGCMAR register value */
mbed_official 87:085cde657901 1013 tmp = hdma2d->Instance->FGCMAR;
mbed_official 87:085cde657901 1014
mbed_official 87:085cde657901 1015 /* Clear CLUT address bits */
mbed_official 87:085cde657901 1016 tmp &= (uint32_t)~DMA2D_FGCMAR_MA;
mbed_official 87:085cde657901 1017
mbed_official 87:085cde657901 1018 /* Prepare the value to be wrote to the FGCMAR register */
mbed_official 87:085cde657901 1019 tmp |= (uint32_t)CLUTCfg.pCLUT;
mbed_official 87:085cde657901 1020
mbed_official 87:085cde657901 1021 /* Write to DMA2D FGCMAR register */
mbed_official 87:085cde657901 1022 hdma2d->Instance->FGCMAR = tmp;
mbed_official 87:085cde657901 1023
mbed_official 87:085cde657901 1024 /* Get the FGPFCCR register value */
mbed_official 87:085cde657901 1025 tmp = hdma2d->Instance->FGPFCCR;
mbed_official 87:085cde657901 1026
mbed_official 87:085cde657901 1027 /* Clear CLUT size and CLUT address bits */
mbed_official 87:085cde657901 1028 tmp &= (uint32_t)~(DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM);
mbed_official 87:085cde657901 1029
mbed_official 87:085cde657901 1030 /* Get the CLUT size */
mbed_official 87:085cde657901 1031 tmp1 = CLUTCfg.Size << 8;
mbed_official 87:085cde657901 1032
mbed_official 87:085cde657901 1033 /* Prepare the value to be wrote to the FGPFCCR register */
mbed_official 87:085cde657901 1034 tmp |= (CLUTCfg.CLUTColorMode | tmp1);
mbed_official 87:085cde657901 1035
mbed_official 87:085cde657901 1036 /* Write to DMA2D FGPFCCR register */
mbed_official 87:085cde657901 1037 hdma2d->Instance->FGPFCCR = tmp;
mbed_official 87:085cde657901 1038 }
mbed_official 87:085cde657901 1039
mbed_official 87:085cde657901 1040 return HAL_OK;
mbed_official 87:085cde657901 1041 }
mbed_official 87:085cde657901 1042
mbed_official 87:085cde657901 1043 /**
mbed_official 87:085cde657901 1044 * @brief Enable the DMA2D CLUT Transfer.
mbed_official 87:085cde657901 1045 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1046 * the configuration information for the DMA2D.
mbed_official 226:b062af740e40 1047 * @param LayerIdx: DMA2D Layer index.
mbed_official 87:085cde657901 1048 * This parameter can be one of the following values:
mbed_official 87:085cde657901 1049 * 0(background) / 1(foreground)
mbed_official 87:085cde657901 1050 * @retval HAL status
mbed_official 87:085cde657901 1051 */
mbed_official 87:085cde657901 1052 HAL_StatusTypeDef HAL_DMA2D_EnableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
mbed_official 87:085cde657901 1053 {
mbed_official 87:085cde657901 1054 /* Check the parameters */
mbed_official 87:085cde657901 1055 assert_param(IS_DMA2D_LAYER(LayerIdx));
mbed_official 87:085cde657901 1056
mbed_official 87:085cde657901 1057 if(LayerIdx == 0)
mbed_official 87:085cde657901 1058 {
mbed_official 87:085cde657901 1059 /* Enable the CLUT loading for the background */
mbed_official 87:085cde657901 1060 hdma2d->Instance->BGPFCCR |= DMA2D_BGPFCCR_START;
mbed_official 87:085cde657901 1061 }
mbed_official 87:085cde657901 1062 else
mbed_official 87:085cde657901 1063 {
mbed_official 87:085cde657901 1064 /* Enable the CLUT loading for the foreground */
mbed_official 87:085cde657901 1065 hdma2d->Instance->FGPFCCR |= DMA2D_FGPFCCR_START;
mbed_official 87:085cde657901 1066 }
mbed_official 87:085cde657901 1067
mbed_official 87:085cde657901 1068 return HAL_OK;
mbed_official 87:085cde657901 1069 }
mbed_official 87:085cde657901 1070
mbed_official 87:085cde657901 1071 /**
mbed_official 87:085cde657901 1072 * @brief Disable the DMA2D CLUT Transfer.
mbed_official 87:085cde657901 1073 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1074 * the configuration information for the DMA2D.
mbed_official 226:b062af740e40 1075 * @param LayerIdx: DMA2D Layer index.
mbed_official 87:085cde657901 1076 * This parameter can be one of the following values:
mbed_official 87:085cde657901 1077 * 0(background) / 1(foreground)
mbed_official 87:085cde657901 1078 * @retval HAL status
mbed_official 87:085cde657901 1079 */
mbed_official 87:085cde657901 1080 HAL_StatusTypeDef HAL_DMA2D_DisableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx)
mbed_official 87:085cde657901 1081 {
mbed_official 87:085cde657901 1082 /* Check the parameters */
mbed_official 87:085cde657901 1083 assert_param(IS_DMA2D_LAYER(LayerIdx));
mbed_official 87:085cde657901 1084
mbed_official 87:085cde657901 1085 if(LayerIdx == 0)
mbed_official 87:085cde657901 1086 {
mbed_official 87:085cde657901 1087 /* Disable the CLUT loading for the background */
mbed_official 87:085cde657901 1088 hdma2d->Instance->BGPFCCR &= ~DMA2D_BGPFCCR_START;
mbed_official 87:085cde657901 1089 }
mbed_official 87:085cde657901 1090 else
mbed_official 87:085cde657901 1091 {
mbed_official 87:085cde657901 1092 /* Disable the CLUT loading for the foreground */
mbed_official 87:085cde657901 1093 hdma2d->Instance->FGPFCCR &= ~DMA2D_FGPFCCR_START;
mbed_official 87:085cde657901 1094 }
mbed_official 87:085cde657901 1095
mbed_official 87:085cde657901 1096 return HAL_OK;
mbed_official 87:085cde657901 1097 }
mbed_official 87:085cde657901 1098
mbed_official 87:085cde657901 1099 /**
mbed_official 87:085cde657901 1100 * @brief Define the configuration of the line watermark .
mbed_official 87:085cde657901 1101 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1102 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 1103 * @param Line: Line Watermark configuration.
mbed_official 226:b062af740e40 1104 * @retval HAL status
mbed_official 87:085cde657901 1105 */
mbed_official 87:085cde657901 1106
mbed_official 87:085cde657901 1107 HAL_StatusTypeDef HAL_DMA2D_ProgramLineEvent(DMA2D_HandleTypeDef *hdma2d, uint32_t Line)
mbed_official 87:085cde657901 1108 {
mbed_official 87:085cde657901 1109 /* Process locked */
mbed_official 87:085cde657901 1110 __HAL_LOCK(hdma2d);
mbed_official 87:085cde657901 1111
mbed_official 87:085cde657901 1112 /* Change DMA2D peripheral state */
mbed_official 87:085cde657901 1113 hdma2d->State = HAL_DMA2D_STATE_BUSY;
mbed_official 87:085cde657901 1114
mbed_official 87:085cde657901 1115 /* Check the parameters */
mbed_official 87:085cde657901 1116 assert_param(IS_DMA2D_LineWatermark(Line));
mbed_official 87:085cde657901 1117
mbed_official 87:085cde657901 1118 /* Sets the Line watermark configuration */
mbed_official 87:085cde657901 1119 DMA2D->LWR = (uint32_t)Line;
mbed_official 87:085cde657901 1120
mbed_official 87:085cde657901 1121 /* Initialize the DMA2D state*/
mbed_official 87:085cde657901 1122 hdma2d->State = HAL_DMA2D_STATE_READY;
mbed_official 87:085cde657901 1123
mbed_official 87:085cde657901 1124 /* Process unlocked */
mbed_official 87:085cde657901 1125 __HAL_UNLOCK(hdma2d);
mbed_official 87:085cde657901 1126
mbed_official 87:085cde657901 1127 return HAL_OK;
mbed_official 87:085cde657901 1128 }
mbed_official 87:085cde657901 1129
mbed_official 87:085cde657901 1130 /**
mbed_official 87:085cde657901 1131 * @}
mbed_official 87:085cde657901 1132 */
mbed_official 87:085cde657901 1133
mbed_official 87:085cde657901 1134 /** @defgroup DMA2D_Group4 Peripheral State functions
mbed_official 87:085cde657901 1135 * @brief Peripheral State functions
mbed_official 87:085cde657901 1136 *
mbed_official 87:085cde657901 1137 @verbatim
mbed_official 87:085cde657901 1138 ===============================================================================
mbed_official 87:085cde657901 1139 ##### Peripheral State and Errors functions #####
mbed_official 87:085cde657901 1140 ===============================================================================
mbed_official 87:085cde657901 1141 [..]
mbed_official 226:b062af740e40 1142 This subsection provides functions allowing to :
mbed_official 87:085cde657901 1143 (+) Check the DMA2D state
mbed_official 87:085cde657901 1144 (+) Get error code
mbed_official 87:085cde657901 1145
mbed_official 87:085cde657901 1146 @endverbatim
mbed_official 87:085cde657901 1147 * @{
mbed_official 87:085cde657901 1148 */
mbed_official 87:085cde657901 1149
mbed_official 87:085cde657901 1150 /**
mbed_official 87:085cde657901 1151 * @brief Return the DMA2D state
mbed_official 87:085cde657901 1152 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1153 * the configuration information for the DMA2D.
mbed_official 87:085cde657901 1154 * @retval HAL state
mbed_official 87:085cde657901 1155 */
mbed_official 87:085cde657901 1156 HAL_DMA2D_StateTypeDef HAL_DMA2D_GetState(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 1157 {
mbed_official 87:085cde657901 1158 return hdma2d->State;
mbed_official 87:085cde657901 1159 }
mbed_official 87:085cde657901 1160
mbed_official 87:085cde657901 1161 /**
mbed_official 87:085cde657901 1162 * @brief Return the DMA2D error code
mbed_official 87:085cde657901 1163 * @param hdma2d : pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1164 * the configuration information for DMA2D.
mbed_official 87:085cde657901 1165 * @retval DMA2D Error Code
mbed_official 87:085cde657901 1166 */
mbed_official 87:085cde657901 1167 uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d)
mbed_official 87:085cde657901 1168 {
mbed_official 87:085cde657901 1169 return hdma2d->ErrorCode;
mbed_official 87:085cde657901 1170 }
mbed_official 87:085cde657901 1171
mbed_official 87:085cde657901 1172 /**
mbed_official 87:085cde657901 1173 * @}
mbed_official 87:085cde657901 1174 */
mbed_official 87:085cde657901 1175
mbed_official 87:085cde657901 1176
mbed_official 87:085cde657901 1177 /**
mbed_official 87:085cde657901 1178 * @brief Set the DMA2D Transfer parameter.
mbed_official 87:085cde657901 1179 * @param hdma2d: pointer to a DMA2D_HandleTypeDef structure that contains
mbed_official 87:085cde657901 1180 * the configuration information for the specified DMA2D.
mbed_official 87:085cde657901 1181 * @param pdata: The source memory Buffer address
mbed_official 87:085cde657901 1182 * @param DstAddress: The destination memory Buffer address
mbed_official 87:085cde657901 1183 * @param Width: The width of data to be transferred from source to destination.
mbed_official 532:fe11edbda85c 1184 * @param Height: The height of data to be transferred from source to destination.
mbed_official 87:085cde657901 1185 * @retval HAL status
mbed_official 87:085cde657901 1186 */
mbed_official 532:fe11edbda85c 1187 static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Height)
mbed_official 87:085cde657901 1188 {
mbed_official 87:085cde657901 1189 uint32_t tmp = 0;
mbed_official 87:085cde657901 1190 uint32_t tmp1 = 0;
mbed_official 87:085cde657901 1191 uint32_t tmp2 = 0;
mbed_official 87:085cde657901 1192 uint32_t tmp3 = 0;
mbed_official 87:085cde657901 1193 uint32_t tmp4 = 0;
mbed_official 87:085cde657901 1194
mbed_official 87:085cde657901 1195 tmp = Width << 16;
mbed_official 87:085cde657901 1196
mbed_official 87:085cde657901 1197 /* Configure DMA2D data size */
mbed_official 532:fe11edbda85c 1198 hdma2d->Instance->NLR = (Height | tmp);
mbed_official 87:085cde657901 1199
mbed_official 87:085cde657901 1200 /* Configure DMA2D destination address */
mbed_official 87:085cde657901 1201 hdma2d->Instance->OMAR = DstAddress;
mbed_official 87:085cde657901 1202
mbed_official 87:085cde657901 1203 /* Register to memory DMA2D mode selected */
mbed_official 87:085cde657901 1204 if (hdma2d->Init.Mode == DMA2D_R2M)
mbed_official 87:085cde657901 1205 {
mbed_official 87:085cde657901 1206 tmp1 = pdata & DMA2D_OCOLR_ALPHA_1;
mbed_official 87:085cde657901 1207 tmp2 = pdata & DMA2D_OCOLR_RED_1;
mbed_official 87:085cde657901 1208 tmp3 = pdata & DMA2D_OCOLR_GREEN_1;
mbed_official 87:085cde657901 1209 tmp4 = pdata & DMA2D_OCOLR_BLUE_1;
mbed_official 87:085cde657901 1210
mbed_official 87:085cde657901 1211 /* Prepare the value to be wrote to the OCOLR register according to the color mode */
mbed_official 87:085cde657901 1212 if (hdma2d->Init.ColorMode == DMA2D_ARGB8888)
mbed_official 87:085cde657901 1213 {
mbed_official 87:085cde657901 1214 tmp = (tmp3 | tmp2 | tmp1| tmp4);
mbed_official 87:085cde657901 1215 }
mbed_official 87:085cde657901 1216 else if (hdma2d->Init.ColorMode == DMA2D_RGB888)
mbed_official 87:085cde657901 1217 {
mbed_official 87:085cde657901 1218 tmp = (tmp3 | tmp2 | tmp4);
mbed_official 87:085cde657901 1219 }
mbed_official 87:085cde657901 1220 else if (hdma2d->Init.ColorMode == DMA2D_RGB565)
mbed_official 87:085cde657901 1221 {
mbed_official 87:085cde657901 1222 tmp2 = (tmp2 >> 19);
mbed_official 87:085cde657901 1223 tmp3 = (tmp3 >> 10);
mbed_official 87:085cde657901 1224 tmp4 = (tmp4 >> 3 );
mbed_official 87:085cde657901 1225 tmp = ((tmp3 << 5) | (tmp2 << 11) | tmp4);
mbed_official 87:085cde657901 1226 }
mbed_official 87:085cde657901 1227 else if (hdma2d->Init.ColorMode == DMA2D_ARGB1555)
mbed_official 87:085cde657901 1228 {
mbed_official 87:085cde657901 1229 tmp1 = (tmp1 >> 31);
mbed_official 87:085cde657901 1230 tmp2 = (tmp2 >> 19);
mbed_official 87:085cde657901 1231 tmp3 = (tmp3 >> 11);
mbed_official 87:085cde657901 1232 tmp4 = (tmp4 >> 3 );
mbed_official 87:085cde657901 1233 tmp = ((tmp3 << 5) | (tmp2 << 10) | (tmp1 << 15) | tmp4);
mbed_official 87:085cde657901 1234 }
mbed_official 87:085cde657901 1235 else /* DMA2D_CMode = DMA2D_ARGB4444 */
mbed_official 87:085cde657901 1236 {
mbed_official 87:085cde657901 1237 tmp1 = (tmp1 >> 28);
mbed_official 87:085cde657901 1238 tmp2 = (tmp2 >> 20);
mbed_official 87:085cde657901 1239 tmp3 = (tmp3 >> 12);
mbed_official 87:085cde657901 1240 tmp4 = (tmp4 >> 4 );
mbed_official 87:085cde657901 1241 tmp = ((tmp3 << 4) | (tmp2 << 8) | (tmp1 << 12) | tmp4);
mbed_official 87:085cde657901 1242 }
mbed_official 87:085cde657901 1243 /* Write to DMA2D OCOLR register */
mbed_official 87:085cde657901 1244 hdma2d->Instance->OCOLR = tmp;
mbed_official 369:2e96f1b71984 1245 }
mbed_official 87:085cde657901 1246 else /* M2M, M2M_PFC or M2M_Blending DMA2D Mode */
mbed_official 87:085cde657901 1247 {
mbed_official 87:085cde657901 1248 /* Configure DMA2D source address */
mbed_official 87:085cde657901 1249 hdma2d->Instance->FGMAR = pdata;
mbed_official 87:085cde657901 1250 }
mbed_official 87:085cde657901 1251 }
mbed_official 87:085cde657901 1252
mbed_official 87:085cde657901 1253 /**
mbed_official 87:085cde657901 1254 * @}
mbed_official 87:085cde657901 1255 */
mbed_official 106:ced8cbb51063 1256 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
mbed_official 87:085cde657901 1257 #endif /* HAL_DMA2D_MODULE_ENABLED */
mbed_official 87:085cde657901 1258 /**
mbed_official 87:085cde657901 1259 * @}
mbed_official 87:085cde657901 1260 */
mbed_official 87:085cde657901 1261
mbed_official 87:085cde657901 1262 /**
mbed_official 87:085cde657901 1263 * @}
mbed_official 87:085cde657901 1264 */
mbed_official 87:085cde657901 1265
mbed_official 87:085cde657901 1266 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/