OpenEdv-开源电子网

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

F4 板子开始dma后 lcd上面就不能写东西了

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-2-4
在线时间
7 小时
发表于 2016-3-17 11:08:20 | 显示全部楼层 |阅读模式
2金钱
最近弄了一块f4探索者的板子,实验的结果是想,把摄像头里面的一帧数据搬到sram里面去。现在遇到的问题是当sram里面的一帧的数据搬完之后,往屏幕上面显示,会出现显示不了的情况,然后要重新初始化一下LCD,但是初始化了lcd后,dma又自动打开了,不知道为什么!

DCMI_DMA_Init2((u32)jpeg_buf0,(u32)jpeg_buf1,5000,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//DCMI DMAÅäÖÃ(Ë«»o3åÄ£ê½)
OV2640_ImageWin_Set(0,0,1600,1200);       
OV2640_OutSize_Set(120,160);
DCMI_Start();       
        while(1)
        {       
                if(uu==1)//这个标志是在帧中断里面的
                {
                        DCMI_Stop();
                //        LCD_Init();
                          DCMI_Set_Window(20,20,140,180);
        LCD_SetCursor(20,20);
          LCD_WriteRAM_Prepare();
       for(x=0;x<rgb_565_data1;x++)//
        {
        LCD_WriteRAM(bmp_img[x]);

      }
   }

这里的dma初始化采用的是照相机实验的双缓冲dma   现在遇到的情况是不打开dma在循环里面能够正常的把东西写到LCD上面,要不然就要初始化LCD_Init();但是初始化LCD后就会dma不知道怎么就打开了!


这个地方就出问题的地方

这个地方就出问题的地方
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-2-4
在线时间
7 小时
 楼主| 发表于 2016-3-17 11:43:28 | 显示全部楼层
DCMI_DMA_Init2((u32)jpeg_buf0,(u32)jpeg_buf1,5000,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);    只要这句话一开就不显示  在lcd上面怎么弄都不显示
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-2-4
在线时间
7 小时
 楼主| 发表于 2016-3-17 11:49:06 | 显示全部楼层
void jpeg_dcmi_rx_callback(void)
{
        u16 i;
       
        if(DMA2_Stream1->CR&(1<<19))//buf0ò&#209;&#194;ú,&#213;y3£′|àíbuf1
        {                
                FSMC_SRAM_WriteBuffer(jpeg_buf0,rgb_565_data,5000);
                rgb_565_data+=5000;

        }else //buf1ò&#209;&#194;ú,&#213;y3£′|àíbuf0
        {               
                FSMC_SRAM_WriteBuffer(jpeg_buf1,rgb_565_data,5000);
                rgb_565_data+=5000;
        }
}
这一段是dma中断的处理程序  jpeg_buf1,和jpeg_buf0个是5000    ,rgb_565_data这个是已在sram里面的一个绝对地址数组     


void jpeg_data_process(void)
{

                        DCMI_Stop();
                        DMA_Cmd(DMA2_Stream1, DISABLE);//í£&#214;1μ±&#199;°′&#171;ê&#228;
                        while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//μè′yDMA2_Stream1&#191;é&#197;&#228;&#214;&#195;  
                        jpeg_data_len=5000-DMA_GetCurrDataCounter(DMA2_Stream1);//μ&#195;μ&#189;′&#203;′&#206;êy&#190;Y′&#171;ê&#228;μ&#196;3¤&#182;è
                        rgb_565_data+=5000;
        if(DMA2_Stream1->CR&(1<<19))//buf0ò&#209;&#194;ú,&#213;y3£′|àíbuf1
        {
                FSMC_SRAM_WriteBuffer(jpeg_buf0,rgb_565_data,jpeg_data_len);

        }else //buf1ò&#209;&#194;ú,&#213;y3£′|àíbuf0
        {
        FSMC_SRAM_WriteBuffer(jpeg_buf0,rgb_565_data,jpeg_data_len);

        }
       
  rgb_565_data1=rgb_565_data+jpeg_data_len;
       
        rgb_565_data=0;
       
        uu=1;

       
}
这一段是帧中断里面的处理函数!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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