中级会员
 
- 积分
- 360
- 金钱
- 360
- 注册时间
- 2015-4-24
- 在线时间
- 37 小时
|
1金钱
目前只有三个代码,目的实现通过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);
}
|
最佳答案
查看完整内容[请看2#楼]
问题已经解决,原来是使用DMA在向LCD_GRAM刷屏的时候,LCD_GRAM不应该设置为地址自增模式
|