求助使用DMA向屏幕的GRAM的问题、

2019-07-20 14:28发布

目前只有三个代码,目的实现通过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ê±&#214;óê1&#196;ü
       
        while(DMA2_Stream0->CR&0X01);   //μè′yDMA&#191;é&#197;&#228;&#214;&#195;

        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éèμ&#216;&#214;·&#212;&#246;á&#191;
        DMA2_Stream0->CR |= 1<<10;                //′&#230;′¢&#198;÷&#212;&#246;á&#191;&#196;£ê&#189;
        DMA2_Stream0->CR |= 1<<11;                //&#212;′′&#230;′¢&#198;÷êy&#190;Y3¤&#182;è£o16Bit
        DMA2_Stream0->CR |= 1<<13;                //&#196;&#191;μ&#196;′&#230;′¢êy&#190;Y3¤&#182;è£o16bit
        DMA2_Stream0->CR |= 1<<16;                //&#214;Dμèó&#197;&#207;è&#188;&#182;
        DMA2_Stream0->CR |= 0<<21;                //íaéèí&#187;·¢μ¥′&#206;′&#171;ê&#228;
        DMA2_Stream0->CR |= 0<<23;                //′&#230;′¢&#198;÷í&#187;·¢μ¥′&#206;′&#171;ê&#228;
}

void MemToLcd_DMA_ENABLE(u32 ndtr)
{
        DMA2_Stream0->CR&=~(1<<0);                        //1&#216;±&#213;DMA′&#171;ê&#228;
        while(DMA2_Stream0->CR&0X01);                //μè′yDMA2_Stream0&#191;é&#197;&#228;&#214;&#195;
        DMA2_Stream0->NDTR=ndtr;        //éè&#214;&#195;′&#171;ê&#228;3¤&#182;è
        DMA2_Stream0->CR |= 0X1<<0;  //ENABLE DMA
        while((DMA2->LISR & 0x1<<5) == 0);
        DMA2->LIFCR |= 0x1<<5;
        DMA2_Stream0->CR&=~(1<<0);                        //1&#216;±&#213;DMA′&#171;ê&#228;
}

void PIC_DMA_SHOW(u16 x,u16 y)
{  
        LCD_Scan_Dir(L2R_U2D);
        LCD_Set_Window(x,y,100,100);
        LCD_WriteRAM_Prepare();     //&#191;aê&#188;D′è&#235;GRAM       
        MemToLcd_DMA_ENABLE(200);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。