注册 登录
查看: 1182|回复: 13

[摄像头组] 模拟摄像头的采集方法

[复制链接]
发表于 2015-1-12 17:02:51 | 显示全部楼层 |阅读模式
一、数字和模拟摄像头DMA采集方法
       ①数字摄像头是根据场同步信号、行同步信号和PCLK信号实现采集的,其中,PCLK时钟信号作为DMA触发源,源地址就是定义好的那8个输入引脚,目的地址则是自己定义的图像存储空间,比如uint8 ImageData[RowMax][ColumnMax];
       ②模拟摄像头是根据场同步信号、行同步信号和ADC转换实现采集的,不存在PCLK引脚,而触发源为DMA_ADC0和DMA_ADC1,源地址是ADC0_RA和ADC1_RA目的地址同数字摄像头
二、疑问


       山外哥,山外库中怎么调用函数设置我需要的触发源呢?
/*  Sample usage:   uint8 buff[10];
                    dma_portx2buff_init(DMA_CH0, PTB_B0_IN, buff, PTA7, DMA_BYTE1, 10, DADDR_RECOVER);
                    //DMA初始化,源地址:PTB_B0_IN,目的地址:buff,PTA7触发(默认上升沿),每次传输1字节,共传输 10次 ,传输结束后恢复地址

                    port_init(PTA7,ALT1 | DMA_FALLING);             //默认触发源是上升沿,此处改为 下降沿触发

                    DMA_EN(DMA_CH0);                //需要使能 DMA 后才能传输数据
*/

*  @param      SADDR           源地址( (void * )&PTx_Bn_IN 或 (void * )&PTx_Wn_IN 或 (void * )&PTA_IN  )


这个函数只能用8位,16位和32位的端口输入源地址,不能用ADC0_RA和ADC1_RA作为源地址,断言检测里有检查


我把初始化改为:dma_portx2buff_init (DMA_CH0, (void *)&ADC1_RA, BUFF, PTA7, DMA_BYTE1, DMA_COUNT, DADDR_RECOVER);
结果如下:
其实我的目的很简单,就是利用DMA区采集模拟摄像头的图像。
山外哥,大恩不言谢!






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-1-12 17:03:55 | 显示全部楼层
我们的函数没带ADC DMA的,所以不能这样用的
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-12 17:04:29 | 显示全部楼层
你要自己实现ADC DMA 功能,触发方面,可以用PWM 来模拟
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-12 17:13:15 | 显示全部楼层
用pwm模拟触发源好还是用延时采集好呢,延时采集貌似占用CPU时间有点长,或者用定时器进行定时采集,不知道哪种方法更好
回复 支持 反对

使用道具 举报

发表于 2015-1-12 17:14:46 | 显示全部楼层
bieshuono 发表于 1421053995
用pwm模拟触发源好还是用延时采集好呢,延时采集貌似占用CPU时间有点长,或者用定时器进行定时采集,不知道哪种方法更好
这个不好说,你自己测试看看。

模拟采集和定时采集,最怕的是被中断。
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-14 16:37:05 | 显示全部楼层
山外哥   我用模拟摄像头的时候,图像一直不正确   是不是KL26配置的频率没配置好?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-15 22:37:01 | 显示全部楼层
ll173514917 发表于 2015-1-14 16:37
山外哥   我用模拟摄像头的时候,图像一直不正确   是不是KL26配置的频率没配置好?

兄弟,你是怎么采集图像的,用定时器采集的还是模拟了一个PCLK,用没用DMA采集数据?一起交流下吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-15 22:53:15 | 显示全部楼层
山外メ雲ジ 发表于 2015-1-12 17:14
这个不好说,你自己测试看看。

模拟采集和定时采集,最怕的是被中断。

山外哥,我想请教一下您ADC转换完了是发出DMA请求的,我是这样做的:adc初始化(其他省略):

  1. //使能DMA请求
  2.     ADC_SC2_REG(ADCN[adcn]) = (0
  3.                                | ADC_SC2_DMAEN_MASK
  4.                                 );
dma初始化(dma函数修改过):

  1. dma_adc_init(DMA_CH0, (void *)&PTB_B0_IN, ImageData, DMA_ADC1, DMA_BYTE1, 10, DADDR_RECOVER);
//配置触发源(默认是 上升沿触发)
//port_init(ptxn, ALT1 | DMA_RISING);                         这儿用的触发源是DMA_ADC1,所以没有配置,不知道此处是否需要配置



DMAMUX_CHCFG_SOURCE(source) /* 通道触发传输源:     */                                       这儿触发源是DMA_ADC1,source就是DMA_ADC1


我是这样设置的,但是没有让DMA工作,望山外哥拨点迷雾!
回复 支持 反对

使用道具 举报

发表于 2015-1-15 23:24:42 | 显示全部楼层
bieshuono 发表于 1421333595
山外哥,我想请教一下您ADC转换完了是发出DMA请求的,我是这样做的:adc初始化(其他省略):

dma初始化(dma函数修改过):

//配置触发源(默认是 上升沿触发)
//port_init(ptxn, ALT1 | DMA_RISING);                         这儿用的触发源是DMA_ADC1,所以没有配置,不知道此处是否需要配置

...
这个我也没做过。

触发源那里,你是adc的,所以你要修改一下相应的触发源,最起码不是用port_init 初始化为 ALT1模式的
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2015-1-16 15:05:18 | 显示全部楼层
bieshuono 发表于 2015-1-15 22:37
兄弟,你是怎么采集图像的,用定时器采集的还是模拟了一个PCLK,用没用DMA采集数据?一起交流下吧

我现在没用DMA传输,我是直接外部触发采集的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-16 20:56:13 | 显示全部楼层
ll173514917 发表于 2015-1-16 15:05
我现在没用DMA传输,我是直接外部触发采集的

意思是你模拟了一个PCLK或者是外部接了一个晶振给触发的
回复 支持 反对

使用道具 举报

发表于 2015-1-16 21:56:53 | 显示全部楼层
bieshuono 发表于 2015-1-16 20:56
意思是你模拟了一个PCLK或者是外部接了一个晶振给触发的

一般都是pwm,或者555 、或者晶振来做一个 触发信号。

或者 pdb 延时触发
回复 支持 反对

使用道具 举报

发表于 2015-1-19 11:56:01 | 显示全部楼层
K60自带的ADC采集摄像头信号速度不够的。建议外挂一片。例如TLC5510
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-20 15:14:47 | 显示全部楼层
aytc100 发表于 2015-1-19 11:56
K60自带的ADC采集摄像头信号速度不够的。建议外挂一片。例如TLC5510

好的,多谢啦
回复 支持 反对

使用道具 举报

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

本版积分规则

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