C
Qt Quick Ultralite 图像解码示例
/** ****************************************************************************** * @file JPEG/JPEG_DecodingFromFLASH_DMA/Src/stm32h7xx_hal_msp.c * @author MCD Application Team * @brief HAL MSP module for Cortex-M7. ****************************************************************************** * @attention * * Copyright (c) 2019 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. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /** @addtogroup STM32H7xx_HAL_Examples * @{ */ /** @addtogroup JPEG_DecodingFromFLASH_DMA * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ extern JPEG_HandleTypeDef JPEG_Handle; /** @defgroup HAL_MSP_Private_Functions * @{ */ /** * @brief JPEG MSP Initialization * This function configures the hardware resources used in this example: * - Peripheral's clock enable * - NVIC configuration for JPEG interrupt request enable * - DMA configuration for transmission request by peripheral * - NVIC configuration for DMA interrupt request enable * @param hjpeg: JPEG handle pointer * @retval None */ void HAL_JPEG_MspInit(JPEG_HandleTypeDef *hjpeg) { #ifdef USE_DMA_BASED_JPEG_DECODING static MDMA_HandleTypeDef hmdmaIn; static MDMA_HandleTypeDef hmdmaOut; /* Enable JPEG clock */ __HAL_RCC_JPGDECEN_CLK_ENABLE(); /* Enable MDMA clock */ __HAL_RCC_MDMA_CLK_ENABLE(); HAL_NVIC_SetPriority(JPEG_IRQn, 0x07, 0x0F); HAL_NVIC_EnableIRQ(JPEG_IRQn); /* Input MDMA */ /* Set the parameters to be configured */ hmdmaIn.Init.Priority = MDMA_PRIORITY_HIGH; hmdmaIn.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE; hmdmaIn.Init.SourceInc = MDMA_SRC_INC_BYTE; hmdmaIn.Init.DestinationInc = MDMA_DEST_INC_DISABLE; hmdmaIn.Init.SourceDataSize = MDMA_SRC_DATASIZE_BYTE; hmdmaIn.Init.DestDataSize = MDMA_DEST_DATASIZE_WORD; hmdmaIn.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; hmdmaIn.Init.SourceBurst = MDMA_SOURCE_BURST_32BEATS; hmdmaIn.Init.DestBurst = MDMA_DEST_BURST_16BEATS; hmdmaIn.Init.SourceBlockAddressOffset = 0; hmdmaIn.Init.DestBlockAddressOffset = 0; /*Using JPEG Input FIFO Threshold as a trigger for the MDMA*/ hmdmaIn.Init.Request = MDMA_REQUEST_JPEG_INFIFO_TH; /* Set the MDMA HW trigger to JPEG Input FIFO Threshold flag*/ hmdmaIn.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER; hmdmaIn.Init.BufferTransferLength = 32; /*Set the MDMA buffer size to the JPEG FIFO threshold size i.e 32 bytes (8 words)*/ hmdmaIn.Instance = MDMA_Channel7; /* Associate the DMA handle */ __HAL_LINKDMA(hjpeg, hdmain, hmdmaIn); /* DeInitialize the DMA Stream */ HAL_MDMA_DeInit(&hmdmaIn); /* Initialize the DMA stream */ HAL_MDMA_Init(&hmdmaIn); /* Output MDMA */ /* Set the parameters to be configured */ hmdmaOut.Init.Priority = MDMA_PRIORITY_VERY_HIGH; hmdmaOut.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE; hmdmaOut.Init.SourceInc = MDMA_SRC_INC_DISABLE; hmdmaOut.Init.DestinationInc = MDMA_DEST_INC_BYTE; hmdmaOut.Init.SourceDataSize = MDMA_SRC_DATASIZE_WORD; hmdmaOut.Init.DestDataSize = MDMA_DEST_DATASIZE_BYTE; hmdmaOut.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; hmdmaOut.Init.SourceBurst = MDMA_SOURCE_BURST_32BEATS; hmdmaOut.Init.DestBurst = MDMA_DEST_BURST_32BEATS; hmdmaOut.Init.SourceBlockAddressOffset = 0; hmdmaOut.Init.DestBlockAddressOffset = 0; /*Using JPEG Output FIFO Threshold as a trigger for the MDMA*/ hmdmaOut.Init.Request = MDMA_REQUEST_JPEG_OUTFIFO_TH; /* Set the MDMA HW trigger to JPEG Output FIFO Threshold flag*/ hmdmaOut.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER; hmdmaOut.Init.BufferTransferLength = 32; /*Set the MDMA buffer size to the JPEG FIFO threshold size i.e 32 bytes (8 words)*/ hmdmaOut.Instance = MDMA_Channel6; /* DeInitialize the DMA Stream */ HAL_MDMA_DeInit(&hmdmaOut); /* Initialize the DMA stream */ HAL_MDMA_Init(&hmdmaOut); /* Associate the DMA handle */ __HAL_LINKDMA(hjpeg, hdmaout, hmdmaOut); HAL_NVIC_SetPriority(MDMA_IRQn, 0x08, 0x0F); HAL_NVIC_EnableIRQ(MDMA_IRQn); #else /* Enable JPEG clock */ __HAL_RCC_JPGDECEN_CLK_ENABLE(); HAL_NVIC_SetPriority(JPEG_IRQn, 0x07, 0x0F); HAL_NVIC_EnableIRQ(JPEG_IRQn); #endif } void HAL_JPEG_MspDeInit(JPEG_HandleTypeDef *hjpeg) { #ifdef USE_DMA_BASED_JPEG_DECODING HAL_NVIC_DisableIRQ(MDMA_IRQn); /* DeInitialize the MDMA Stream */ HAL_MDMA_DeInit(hjpeg->hdmain); /* DeInitialize the MDMA Stream */ HAL_MDMA_DeInit(hjpeg->hdmaout); #endif } #ifdef USE_DMA_BASED_JPEG_DECODING void MDMA_IRQHandler() { /* Check the interrupt and clear flag */ HAL_MDMA_IRQHandler(JPEG_Handle.hdmain); HAL_MDMA_IRQHandler(JPEG_Handle.hdmaout); } #endif /** * @} */ void JPEG_IRQHandler(void) { HAL_JPEG_IRQHandler(&JPEG_Handle); }