C

Qt Quick Ultralite imagedecoder Example

/**
  ******************************************************************************
  * @file         stm32u5xx_hal_msp.c
  * @brief        This file provides code for the MSP Initialization
  *               and de-Initialization codes.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */

#include "stm32u5xx_hal.h"
#include "stm32u5xx_it.h"

#ifdef __cplusplus
extern "C" {
#endif

extern DMA_HandleTypeDef handle_GPDMA1_Channel1;
extern DMA_HandleTypeDef handle_GPDMA1_Channel0;
extern JPEG_HandleTypeDef JPEG_Handle;
extern void Error_Handler();

void HAL_JPEG_MspInit(JPEG_HandleTypeDef *hjpeg)
{
    if (hjpeg->Instance==JPEG) {
        /* Peripheral clock enable */
        __HAL_RCC_JPEG_CLK_ENABLE();

#ifdef USE_DMA_BASED_JPEG_DECODING
        /* JPEG DMA Init */
        /* GPDMA1_REQUEST_JPEG_TX Init */
        handle_GPDMA1_Channel1.Instance = GPDMA1_Channel1;
        handle_GPDMA1_Channel1.Init.Request = GPDMA1_REQUEST_JPEG_TX;
        handle_GPDMA1_Channel1.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
        handle_GPDMA1_Channel1.Init.Direction = DMA_PERIPH_TO_MEMORY;
        handle_GPDMA1_Channel1.Init.SrcInc = DMA_SINC_FIXED;
        handle_GPDMA1_Channel1.Init.DestInc = DMA_DINC_INCREMENTED;
        handle_GPDMA1_Channel1.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_WORD;
        handle_GPDMA1_Channel1.Init.DestDataWidth = DMA_DEST_DATAWIDTH_WORD;
        handle_GPDMA1_Channel1.Init.Priority = DMA_LOW_PRIORITY_HIGH_WEIGHT;
        handle_GPDMA1_Channel1.Init.SrcBurstLength = 8;
        handle_GPDMA1_Channel1.Init.DestBurstLength = 8;
        handle_GPDMA1_Channel1.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT1;
        handle_GPDMA1_Channel1.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
        handle_GPDMA1_Channel1.Init.Mode = DMA_NORMAL;
        if (HAL_DMA_Init(&handle_GPDMA1_Channel1) != HAL_OK) {
          Error_Handler();
        }

        __HAL_LINKDMA(hjpeg, hdmaout, handle_GPDMA1_Channel1);

        if (HAL_DMA_ConfigChannelAttributes(&handle_GPDMA1_Channel1, DMA_CHANNEL_NPRIV) != HAL_OK) {
          Error_Handler();
        }

        /* GPDMA1_REQUEST_JPEG_RX Init */
        handle_GPDMA1_Channel0.Instance = GPDMA1_Channel0;
        handle_GPDMA1_Channel0.Init.Request = GPDMA1_REQUEST_JPEG_RX;
        handle_GPDMA1_Channel0.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
        handle_GPDMA1_Channel0.Init.Direction = DMA_MEMORY_TO_PERIPH;
        handle_GPDMA1_Channel0.Init.SrcInc = DMA_SINC_INCREMENTED;
        handle_GPDMA1_Channel0.Init.DestInc = DMA_DINC_FIXED;
        handle_GPDMA1_Channel0.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_WORD;
        handle_GPDMA1_Channel0.Init.DestDataWidth = DMA_DEST_DATAWIDTH_WORD;
        handle_GPDMA1_Channel0.Init.Priority = DMA_LOW_PRIORITY_HIGH_WEIGHT;
        handle_GPDMA1_Channel0.Init.SrcBurstLength = 8;
        handle_GPDMA1_Channel0.Init.DestBurstLength = 8;
        handle_GPDMA1_Channel0.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT1;
        handle_GPDMA1_Channel0.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
        handle_GPDMA1_Channel0.Init.Mode = DMA_NORMAL;
        if (HAL_DMA_Init(&handle_GPDMA1_Channel0) != HAL_OK) {
          Error_Handler();
        }

        __HAL_LINKDMA(hjpeg, hdmain, handle_GPDMA1_Channel0);

        if (HAL_DMA_ConfigChannelAttributes(&handle_GPDMA1_Channel0, DMA_CHANNEL_NPRIV) != HAL_OK) {
          Error_Handler();
        }
#endif // USE_DMA_BASED_JPEG_DECODING

        /* JPEG interrupt Init */
        HAL_NVIC_SetPriority(JPEG_IRQn, 8, 0);
        HAL_NVIC_EnableIRQ(JPEG_IRQn);
    }
}

void HAL_JPEG_MspDeInit(JPEG_HandleTypeDef *hjpeg)
{
    if(hjpeg->Instance==JPEG)
    {
        /* Peripheral clock disable */
        __HAL_RCC_JPEG_CLK_DISABLE();

#ifdef USE_DMA_BASED_JPEG_DECODING
        /* JPEG DMA DeInit */
        HAL_DMA_DeInit(hjpeg->hdmaout);
        HAL_DMA_DeInit(hjpeg->hdmain);
#endif // USE_DMA_BASED_JPEG_DECODING

        /* JPEG interrupt DeInit */
        HAL_NVIC_DisableIRQ(JPEG_IRQn);
    }

}

void JPEG_IRQHandler(void)
{
    HAL_JPEG_IRQHandler(&JPEG_Handle);
}

#ifdef USE_DMA_BASED_JPEG_DECODING
void GPDMA1_Channel0_IRQHandler(void)
{
    HAL_DMA_IRQHandler(&handle_GPDMA1_Channel0);
}

void GPDMA1_Channel1_IRQHandler(void)
{
    HAL_DMA_IRQHandler(&handle_GPDMA1_Channel1);
}
#endif // USE_DMA_BASED_JPEG_DECODING

#ifdef __cplusplus
} // extern "C"
#endif