|
void HAL_JPEG_MspInit(JPEG_HandleTypeDef *hjpeg)
{
/* 这两个变量务必设置为静态局部变量或者全局变量,因为退出后,JPEG句柄还要使用 */
/* 使能JPEG时钟 */
__HAL_RCC_JPGDECEN_CLK_ENABLE();
/* 使能MDMA时钟 */
__HAL_RCC_MDMA_CLK_ENABLE();
/* JPEG输入的MDMA配置 ###########################################*/
BSP_JPEG_MDMA_IN.Instance = MDMA_Channel7; /* 使用MDMA通道7 */
BSP_JPEG_MDMA_IN.Init.Priority = MDMA_PRIORITY_HIGH; /* 优先级高 */
BSP_JPEG_MDMA_IN.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE; /* 小端格式 */
BSP_JPEG_MDMA_IN.Init.SourceInc = MDMA_SRC_INC_BYTE; /* 源地址字节递增 */
BSP_JPEG_MDMA_IN.Init.DestinationInc = MDMA_DEST_INC_DISABLE; /* 目的地址无自增 */
BSP_JPEG_MDMA_IN.Init.SourceDataSize = MDMA_SRC_DATASIZE_BYTE; /* 源地址数据宽度字节 */
BSP_JPEG_MDMA_IN.Init.DestDataSize = MDMA_DEST_DATASIZE_WORD; /* 目的地址数据宽度字节 */
BSP_JPEG_MDMA_IN.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; /* 小端,右对齐 */
BSP_JPEG_MDMA_IN.Init.SourceBurst = MDMA_SOURCE_BURST_32BEATS; /* 源数据突发传输,32次 */
BSP_JPEG_MDMA_IN.Init.DestBurst = MDMA_DEST_BURST_16BEATS; /* 目的数据突发传输,16次 */
BSP_JPEG_MDMA_IN.Init.SourceBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
BSP_JPEG_MDMA_IN.Init.DestBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
BSP_JPEG_MDMA_IN.Init.Request = MDMA_REQUEST_JPEG_INFIFO_TH; /* JPEG的FIFO阀值触发中断 */
BSP_JPEG_MDMA_IN.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER; /* 使用MDMA的buffer传输 */
BSP_JPEG_MDMA_IN.Init.BufferTransferLength = 32; /* 每次传输32个字节,JPEG的FIFO阀值是32字节 */
/* 关联MDMA的句柄到JPEG */
__HAL_LINKDMA(hjpeg, hdmain, BSP_JPEG_MDMA_IN);
/* 先复位,然后配置MDMA */
HAL_MDMA_DeInit(&BSP_JPEG_MDMA_IN);
HAL_MDMA_Init(&BSP_JPEG_MDMA_IN);
/* JPEG输出的MDMA配置 ###########################################*/
BSP_JPEG_MDMA_OUT.Instance = MDMA_Channel6; /* 使用MDMA通道6 */
BSP_JPEG_MDMA_OUT.Init.Priority = MDMA_PRIORITY_VERY_HIGH; /* 优先级最高 */
BSP_JPEG_MDMA_OUT.Init.Endianness = MDMA_LITTLE_ENDIANNESS_PRESERVE; /* 小端格式 */
BSP_JPEG_MDMA_OUT.Init.SourceInc = MDMA_SRC_INC_DISABLE; /* 源数据地址禁止自增 */
BSP_JPEG_MDMA_OUT.Init.DestinationInc = MDMA_DEST_INC_BYTE; /* 目的数据地址字节自增 */
BSP_JPEG_MDMA_OUT.Init.SourceDataSize = MDMA_SRC_DATASIZE_WORD; /* 源地址数据宽度字 */
BSP_JPEG_MDMA_OUT.Init.DestDataSize = MDMA_DEST_DATASIZE_BYTE; /* 目的地址数据宽度字节 */
BSP_JPEG_MDMA_OUT.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; /* 小端,右对齐 */
BSP_JPEG_MDMA_OUT.Init.SourceBurst = MDMA_SOURCE_BURST_32BEATS; /* 源数据突发传输,32次 */
BSP_JPEG_MDMA_OUT.Init.DestBurst = MDMA_DEST_BURST_32BEATS; /* 目的数据突发传输,16次 */
BSP_JPEG_MDMA_OUT.Init.SourceBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
BSP_JPEG_MDMA_OUT.Init.DestBlockAddressOffset = 0; /* 用于block传输,buffer传输用不到 */
BSP_JPEG_MDMA_OUT.Init.Request = MDMA_REQUEST_JPEG_OUTFIFO_TH; /* JPEG的FIFO阀值触发中断 */
BSP_JPEG_MDMA_OUT.Init.TransferTriggerMode = MDMA_BUFFER_TRANSFER; /* 使用MDMA的buffer传输 */
BSP_JPEG_MDMA_OUT.Init.BufferTransferLength = 32; /* 每次传输32个字节,JPEG的FIFO阀值是32字节 */
/* 先复位,然后配置MDMA */
HAL_MDMA_DeInit(&BSP_JPEG_MDMA_OUT);
HAL_MDMA_Init(&BSP_JPEG_MDMA_OUT);
/* 关联MDMA的句柄到JPEG */
__HAL_LINKDMA(hjpeg, hdmaout, BSP_JPEG_MDMA_OUT);
}
BSP_JPEG_YCbCr_SRC_Size =128*1024;
BSP_JPEG_YCbCr_Size_OUT=128*1024;
HAL_JPEG_Decode_DMA(&BSP_JPEG_Handle ,(uint8_t *)BSP_JPEG_YCbCr_SRC_Addr ,BSP_JPEG_YCbCr_SRC_Size ,(uint8_t *)BSP_JPEG_YCbCr_OUT_Addr ,BSP_JPEG_YCbCr_Size_OUT);
当长度大小小于128*1024-1 时,解码成功。 这个两个参数的长度大小是JPEG文件长度大小还是,解码出来的大小?
|
|