智能车制作

标题: K60的DMA能这样用吗? [打印本页]

作者: 尕玍紿    时间: 2014-7-2 16:13
标题: K60的DMA能这样用吗?
本帖最后由 尕玍紿 于 2014-7-2 16:15 编辑

我的摄像头OV7725自带FIFO,只有VSYNC信号,没有HREF和PCLK信号
摄像头配置:60帧,320*240分辨率,YUV输出
目前用GPIO控制实现从FIFO中获得了图像,经测试发现,读得一帧的图像耗费了19ms的时间,
这个时间我的项目不能接受,想提高图像采集的速度,该怎么弄?
经查阅,知道了DMA,但是不是很懂,问下我下面的想法行不?
我的摄像头自带的FIFO使能后,给一个时钟,它的数据输出口(8bit),就会输出一个数据;
我了解到:使能DMA后,给DMA一个时钟,DMA就会从指定的源地址获取一个数据存放到目的地址中.
于是我想:
我生成一个PWM信号来充当时钟,同时供给我摄像头的FIFO和K60的DMA,这样的话,是不是就能实现把FIFO中的图像转移到目的地址中了???
疑问是:
1.一个时钟能同时给两个对象吗?
2.看DMA的初始化代码中:
DMA_TCD0_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(L);//当前主循环次数,采集点数
DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(L);//起始主循环次数,采集点数
我对这两个参数的理解是:使能DMA后,DMA需要读取的字节数
由于我的摄像头没有HREF信号,所以不能控制DMA一次只读取一行,即一次循环读取320个;
我只有一个VSYNC信号,只能实现一次读取一帧的图像;也就是说DMA的循环次数一次得循环320*240*2次;
DMA能配置成一次循环这么多次吗?
不知道我理解对没有,有人能给点建议吗?
我该怎么提高采集效率???

作者: 尕玍紿    时间: 2014-7-2 16:45
对于DMA一次会读取多少数据,貌似我理解错了:
这是我看的DMA的初始化函数:
[attach]61465[/attach]
DMA一次会读多少,应该由我圈出来的共同决定.
也就是说,我只要把主循环的次数设置成240;
把一次读取的字节数设置成:320*2个字节;
是不是就能实现DMA一次就读取320*240*2个数据了.

作者: 尕玍紿    时间: 2014-7-2 17:20
[attach]61467[/attach]
50号对应的是PORTB这一类的信息,我找不到,谁有这部分的资料可以发我???
我找了这个寄存器,但是描述不够清楚,又找不到更细的描述:
[attach]61468[/attach]
我要配置为PORTD,不知道具体设置什么值.
作者: majorfog    时间: 2014-7-2 22:32
我靠,你这代码看的眼都花了 - -  应该可以通过一个定时器来触发DMA采集FIFO  你这个DMA是自己写的库?
作者: 尕玍紿    时间: 2014-7-3 09:22
majorfog 发表于 2014-7-2 22:32
我靠,你这代码看的眼都花了 - -  应该可以通过一个定时器来触发DMA采集FIFO  你这个DMA是自己写的库?

不是自己写的,抄来的...
我摄像头的数据口接到了PORT D口上了,
现在不知道怎么把DMA配置成 采集PD口上的PD0-PD7的数据.
采集PD口的数据配置主要应该就是设置这两个寄存器:
[attach]61477[/attach]
第一个寄存器我不知道该怎么配置,
第二个寄存器应该就把PD口的输入数据寄存器的地址给这个寄存器就行了.
能告诉我第一个寄存器该怎么配置吗?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2