大学生
最后登录1970-1-1
在线时间 小时
注册时间2018-3-4
|
发现连续使用LCD_Color_Fill函数填充两个色块,单步调试模式时没有问题,全速时只能显示第一个色块,第二个就是不显示,如果将两次填充之间做点延时,显示就正常了,请指教,多谢!
//LTDC填充矩形,DMA2D填充
//(sx,sy),(ex,ey):填充矩形对角坐标,区域大小为ex-sx+1)*(ey-sy+1)
//注意:sx,ex,不能大于lcddev.width-1;sy,ey,不能大于lcddev.height-1!!!
//color:要填充的颜色
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u32 color, u8 inLCD_PIXFORMAT)
{
u32 timeout=0;
u16 offline;
u32 addr;
offline=LCD_PIXEL_WIDTH-(ex-sx+1);
//指定绘制的首地址
addr = CurrentFrameBuffer+2*(800*sy+sx);
RCC->AHB1ENR|=1<<23; //使能DM2D时钟
DMA2D->CR&=~(1<<0); //先停止DMA2D
DMA2D->CR=3<<16; //寄存器到存储器模式
DMA2D->OPFCCR=inLCD_PIXFORMAT; //设置颜色格式
DMA2D->OOR=offline; //设置行偏移
DMA2D->OMAR=addr; //输出存储器地址
DMA2D->NLR=(ey-sy+1)|((ex-sx+1)<<16); //设定行数寄存器
DMA2D->OCOLR=color; //设定输出颜色寄存器
DMA2D->CR|=1<<0; //启动DMA2D
while((DMA2D->ISR&(1<<1))==0) //等待传输完成
{
timeout++;
if(timeout>0X1FFFFF)
break; //超时退出
}
DMA2D->IFCR|=1<<1; //清除传输完成标志
} |
|