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:
Wed Jun 11 09:45:09 2014 +0100
Revision:
226:b062af740e40
Parent:
106:ced8cbb51063
Child:
369:2e96f1b71984
Synchronized with git revision 42deb9ac55f9bdf9835e9c41dc757117d344ffda

Full URL: https://github.com/mbedmicro/mbed/commit/42deb9ac55f9bdf9835e9c41dc757117d344ffda/

[NUCLEO_F401RE] Remove call to Systick + bug fixes

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