金牌会员
 
- 积分
- 1898
- 金钱
- 1898
- 注册时间
- 2012-10-28
- 在线时间
- 357 小时
|

楼主 |
发表于 2017-3-9 09:28:45
|
显示全部楼层
void BSP_LCD_Clear(uint32_t Color)
{
#if 0
// Register to memory mode with ARGB8888 as color Mode
hdma2d_eval.Init.Mode = DMA2D_R2M;
hdma2d_eval.Init.ColorMode = LTDC_USER_PIXFORMAT;
hdma2d_eval.Init.OutputOffset = 0;
hdma2d_eval.Instance = DMA2D;
// DMA2D Initialization
if(HAL_DMA2D_Init(&hdma2d_eval) == HAL_OK)
{
if(HAL_DMA2D_ConfigLayer(&hdma2d_eval, ActiveLayer) == HAL_OK)
{
if (HAL_DMA2D_Start(&hdma2d_eval, Color, (hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize() , BSP_LCD_GetYSize() ) == HAL_OK)
{
// Polling For DMA transfer
HAL_DMA2D_PollForTransfer(&hdma2d_eval, DMA2D_TIMEOUT); // 超时时间需要设置大些,否则清贫时会返回超时错误
}
}
}
#else
u32 addr;
u32 timeout = 0;
addr=((u32)(hltdc_eval.LayerCfg[ActiveLayer].FBStartAdress) + LTDC_PIX_SIZE * ((LCD_PIXEL_WIDTH ) * 0 + 0));
RCC->AHB1ENR |= 1 << 23; //使能DM2D时钟
DMA2D->CR = 3 << 16; //寄存器到存储器模式
DMA2D->OPFCCR = LTDC_USER_PIXFORMAT; //设置颜色格式
DMA2D->OOR = 0; //设置行偏移
DMA2D->CR &= ~(1 << 0); //先停止DMA2D
DMA2D->OMAR = addr; //输出存储器地址
DMA2D->NLR = (1280) | ((800) << 16); //设定行数寄存器
DMA2D->OCOLR = Color; //设定输出颜色寄存器
DMA2D->CR |= 1 << 0; //启动DMA2D
while((DMA2D->ISR & (1 << 1)) == 0) //等待传输完成
{
timeout++;
if(timeout > 0X1FFFFF) break; //超时退出
}
DMA2D->IFCR |= 1 << 1; //清除传输完成标志
#endif
}
|
|