使用IPA的颜色填充模式的清屏函数,根据使用说明书操作寄存器,代码如下。
不过值得注意的是,在GD的使用说明中,我并没有找到哪里有IPA传输模式的选择,
关于IPA_CTL = 0x00030000UL,是根据STM32F429的DMA2D的例程使用的。
void LTDC_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{
u32 timeout=0;
u16 offline;
u32 psx,psy,pex,pey;
if(lcdltdc.dir) //横屏
{
psx=sx;psy=sy;
pex=ex;pey=ey;
}else //竖屏
{
psx=sy;psy=lcdltdc.pheight-ex-1;
pex=ey;pey=lcdltdc.pheight-sx-1;
}
rcu_periph_clock_enable(RCU_IPA);
IPA_DMADDR = (uint32_t)_drv_mem + 2 * (V_DIR * psy + psx); //输出存储器地址
IPA_DPCTL= IPA_DPF_RGB565; // RGB565模式
IPA_DPV =color; //填充像素值
offline = V_DIR - (pex-psx + 1);
IPA_DLOFF = offline;
IPA_CTL = 0x00030000UL;// 寄存器到内存模式
IPA_IMS = (uint32_t)((pex - psx + 1) << 16) | (uint16_t)(pey -psy + 1);
IPA_CTL |= (1 << 0); //使能IPA
/* Wait until transfer is done */
while (IPA_CTL & IPA_CTL_TEN)
{
if (timeout++ >= 0XFFFFFFFF)
break;
}
IPA_INTC|=IPA_INTF_FTFIF;
}
void LTDC_Clear(u16 color)
{
LTDC_Fill(0,0,lcdltdc.pwidth-1,lcdltdc.pheight-1,color);
}