OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3771|回复: 1

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

[复制链接]

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
发表于 2017-5-19 14:23:24 | 显示全部楼层 |阅读模式
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ê±&#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);
}

最佳答案

查看完整内容[请看2#楼]

问题已经解决,原来是使用DMA在向LCD_GRAM刷屏的时候,LCD_GRAM不应该设置为地址自增模式
一起学,一起进步,未来总有你我的一片天空……
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

91

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2015-4-24
在线时间
37 小时
 楼主| 发表于 2017-5-19 14:23:25 | 显示全部楼层
问题已经解决,原来是使用DMA在向LCD_GRAM刷屏的时候,LCD_GRAM不应该设置为地址自增模式
一起学,一起进步,未来总有你我的一片天空……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 02:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表