使用的是MCU8080接口,ili9342。 原来是使用FSMC接口通过cpu搬运数据, 现在想提示下性能,想改用DMA搬运,但是使用DMA后显示屏上的颜色不对。 请问这种问题要如何解决?
DMA的配置代码
[C] 纯文本查看 复制代码
void bsp_dam_lcd_start(uint32_t BufferAddr, uint32_t BufferSize)
{
DMA_InitTypeDef DMA_InitStructure;
// 开启DMA时钟
RCC_AHBPeriphClockCmd(DMA_CLOCK, ENABLE);
#if 1
// 源数据地址
DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)BufferAddr; //颜色数组
// 目标地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(LCD_BASE + (1 << 17));
// 方向:外设到存储器
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
// 传输大小
DMA_InitStructure.DMA_BufferSize = BufferSize;
// 外设(内部的FLASH)地址递增
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
// 内存地址递增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
// 外设数据单位
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;
// 内存数据单位
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;
// DMA模式,一次或者循环模式
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
//DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
// 优先级:高
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
// 使能内存到内存的传输
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;
// 配置DMA通道
DMA_Init(DMA_CHANNEL, &DMA_InitStructure);
// 使能DMA
DMA_Cmd(DMA_CHANNEL,ENABLE);
}
|