目前只有三个代码,目的实现通过DMA向LCD上刷数据,目前,开通一次DMA传输,只能向屏幕上刷新128字节的数据,再多就刷不上了,不知何故,请教个大神来看看。参考了原子的代码,不过由于思路和用途不太一致,因此没有解决。
void main() -------------主函数目前测试阶段只有下面两个代码
{
MemToLcd_DMA_Config((u32)COLOR,(u32)&LCD->LCD_RAM);
PIC_DMA_SHOW(10,20); //开通一次传输,并将图片显示在屏幕上
}
///////////////////////////////////////////////////////////////////////
void MemToLcd_DMA_Config(u32 srcadd,u32 dstadd)
{
RCC->AHB1ENR|=1<<22; //DMA2ê±Öóê1Äü
while(DMA2_Stream0->CR&0X01); //μè′yDMA¿éÅäÖÃ
DMA2_Stream0->PAR=srcadd; //soucre add
DMA2_Stream0->M0AR=dstadd; //dest add
DMA2_Stream0->CR=0; //reset DMA2 CR
DMA2_Stream0->CR |= 0X0<<25; //ch0
DMA2_Stream0->CR |= 0x2<<6; //memory to memory
DMA2_Stream0->CR |= 0<<8; //not cycle mode
DMA2_Stream0->CR |= 1<<9; //íaéèμØÖ·Ôöá¿
DMA2_Stream0->CR |= 1<<10; //′æ′¢Æ÷Ôöá¿Ä£ê½
DMA2_Stream0->CR |= 1<<11; //Ô′′æ′¢Æ÷êy¾Y3¤¶è£o16Bit
DMA2_Stream0->CR |= 1<<13; //Ä¿μÄ′æ′¢êy¾Y3¤¶è£o16bit
DMA2_Stream0->CR |= 1<<16; //ÖDμèóÅÏ輶
DMA2_Stream0->CR |= 0<<21; //íaéèí»·¢μ¥′Î′«êä
DMA2_Stream0->CR |= 0<<23; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
}
void MemToLcd_DMA_ENABLE(u32 ndtr)
{
DMA2_Stream0->CR&=~(1<<0); //1رÕDMA′«êä
while(DMA2_Stream0->CR&0X01); //μè′yDMA2_Stream0¿éÅäÖÃ
DMA2_Stream0->NDTR=ndtr; //éèÖÃ′«êä3¤¶è
DMA2_Stream0->CR |= 0X1<<0; //ENABLE DMA
while((DMA2->LISR & 0x1<<5) == 0);
DMA2->LIFCR |= 0x1<<5;
DMA2_Stream0->CR&=~(1<<0); //1رÕDMA′«êä
}
void PIC_DMA_SHOW(u16 x,u16 y)
{
LCD_Scan_Dir(L2R_U2D);
LCD_Set_Window(x,y,100,100);
LCD_WriteRAM_Prepare(); //¿aê¼D′èëGRAM
MemToLcd_DMA_ENABLE(200);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>