|
楼主 |
发表于 2020-8-3 10:48:35
|
显示全部楼层
配置代码就是用的硬汉的
初始化里面就只做了启动时钟的操作
__HAL_RCC_DMA2D_CLK_ENABLE();
/*
*********************************************************************************************************
* 函 数 名: _DMA2D_DrawAlphaBitmap
* 功能说明: ARGB8888格式位图显示
* 形 参: pDst 目标区地址
* pSrc 源数据地址,即位图首地址
* xSize 目标区域的X轴大小,即每行像素数
* ySize 目标区域的Y轴大小,即行数
* OffLineSrc 源数据行偏移
* OffLineDst 目标区行偏移
* PixelFormat 目标区颜色格式
* 返 回 值: 无
*********************************************************************************************************
*/
void DMA2D_DrawAlphaBitmap(void * pDst,
void * pSrc,
uint32_t xSize,
uint32_t ySize,
uint32_t OffLineSrc,
uint32_t OffLineDst,
uint32_t PixelFormat)
{
/* DMA2D采用存储器到存储器模式, 这种模式前景层和背景层作为DMA2D输入,且支持颜色格式转换和颜色混合 */
DMA2D->CR = 0x00020000UL | (1 << 9);
DMA2D->FGMAR = (uint32_t)pSrc;
DMA2D->BGMAR = (uint32_t)pDst;
DMA2D->OMAR = (uint32_t)pDst;
DMA2D->FGOR = OffLineSrc;
DMA2D->BGOR = OffLineDst;
DMA2D->OOR = OffLineDst;
/* 前景层颜色格式是LTDC_PIXEL_FORMAT_ARGB8888,即位图的颜色格式,背景层和输出区颜色格式可配置 */
DMA2D->FGPFCCR = DMA2D_INPUT_ARGB8888 ;//前景层像素格式转换器
DMA2D->BGPFCCR = PixelFormat; //背景层像素格式转换器
DMA2D->OPFCCR = PixelFormat; //目标层像素格式转换器
DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;
/* 启动传输 */
DMA2D->CR |= DMA2D_CR_START;
/* 等待DMA2D传输完成 */
while (DMA2D->CR & DMA2D_CR_START) {}
}
下面是缓存
u8 GUI_RAM[390*390*2] __attribute__ ((at(0x24000000))); //定位到SRAM1,使用0x24000000~~0x2404A487
u8 JPEG_BUFF[64*3*1024] __attribute__ ((at(0x24050000))); //定位到SRAM1,使用0x24050000~~0x24079999
下面是调用的转换
DMA2D_DrawAlphaBitmap((void *)(GUI_RAM),(void *)JPEG_BUFF,39,39,0,0,DMA2D_OUTPUT_RGB565); |
|