coolpeche 发表于 2017-3-25 14:41:38

获取摄像头数据用DMA好还是复制LCD显存好?

我想得到摄像头的图像数据。之前得到一段示例代码为
for(xxxxxxx)
{

temp【i】 =* (uint16_t *)(FSMC_LCD_ADDRESS+i );
}


我从摄像头例程开始改,我把你的这段赋值代码放在DCMI_Cmd(ENABLE); DCMI_CaptureCmd(ENABLE); (DCMI采集数据)之后,在while(1)循环之前插入。但是得到的数值打印到LCD上是0。想要debug session单步调试很快就会程序崩溃。
1.如果从LCD上得到图像数据,这段代码的位置之类的有什么讲究?

2.这种方法是否不太可行,用DMA直接内存访问给到数组怎么写?(既要显示屏显示,又希望自己的数组里有图像信息)

快要中期检查了,今天问题有点多,感谢你的问答!:D

随风 发表于 2017-3-25 15:00:52

429摄像头的数据直接就已经存储在显存了,显存的位置是SDRAM的一部分,读取这些地址直接就是数组啦,

coolpeche 发表于 2017-3-25 15:18:22

谢谢解疑。但是能进一步帮我解释一下吗?
DMA传输的代码为OV5640_DMA_Config(FSMC_LCD_ADDRESS+(lcd_height-1)*(lcd_width)*2,img_width*2/4);
也就是说显存的地址就是FSMC_LCD_ADDRESS;
然而我通过类似以下代码
for(i=0;i<=40-1;i++)
        {
                temp=*(uint16_t *)(FSMC_LCD_ADDRESS+i);
        }
这样的方式去读,一直都没有像是RGB565的颜色数据。
都是0,可以再告诉我下是什么情况吗?


我想通过单步调试的方法,去监视FSMC_LCD_ADDRESS或者*(uint16_t *)(FSMC_LCD_ADDRESS+i);但是也看不到什么值

再次感谢你的答疑

coolpeche 发表于 2017-3-25 15:18:46

随风 发表于 2017-3-25 15:00
429摄像头的数据直接就已经存储在显存了,显存的位置是SDRAM的一部分,读取这些地址直接就是数组啦,

谢谢解疑。但是能进一步帮我解释一下吗?
DMA传输的代码为OV5640_DMA_Config(FSMC_LCD_ADDRESS+(lcd_height-1)*(lcd_width)*2,img_width*2/4);
也就是说显存的地址就是FSMC_LCD_ADDRESS;
然而我通过类似以下代码
for(i=0;i<=40-1;i++)
         {
               temp=*(uint16_t *)(FSMC_LCD_ADDRESS+i);
         }
这样的方式去读,一直都没有像是RGB565的颜色数据。
都是0,可以再告诉我下是什么情况吗?


我想通过单步调试的方法,去监视FSMC_LCD_ADDRESS或者*(uint16_t *)(FSMC_LCD_ADDRESS+i);但是也看不到什么值

再次感谢你的答疑

随风 发表于 2017-3-25 18:08:34

coolpeche 发表于 2017-3-25 15:18
谢谢解疑。但是能进一步帮我解释一下吗?
DMA传输的代码为OV5640_DMA_Config(FSMC_LCD_ADDRESS+(lcd_hei ...

确实是这样读,或者你尝试下读取另一层显存的地址?

另外读完一次数据应该是 i+2

WTY 发表于 2017-10-26 11:33:22

楼主,我也刚开始做429+5640图像识别,可以分享一下吗。小弟邮箱QQ1301703993@qq.com

15571058633 发表于 2022-6-3 15:39:48

楼主,最近在做图像相关的内容,可以分享一下代码吗,邮箱:404716881@qq.com

2415949676 发表于 2024-4-28 15:41:48

楼主,我也刚开始做429+5640图像识别,可以分享一下吗。小弟邮箱qq:2415949676@qq.com
页: [1]
查看完整版本: 获取摄像头数据用DMA好还是复制LCD显存好?