智能车摄像头dma采集方案

智能车摄像头dma采集方案

ID:35282601

大小:17.00 KB

页数:3页

时间:2019-03-23

智能车摄像头dma采集方案_第1页
智能车摄像头dma采集方案_第2页
智能车摄像头dma采集方案_第3页
资源描述:

《智能车摄像头dma采集方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在之前做飞思卡尔智能车比赛时接触过K60的DMA,用DMA可以采集图像,也可以用DMA来测速。概念相信大家都清楚:所谓DMA就是直接内存取(DirectMemoryAccess),是计算机科学中的一种内存访问技术。书上说,DMA模块可以不占用CPU自行传输数据,能够减轻CPU的负担,然而具体原理是怎样的呢?为什么DMA能够不需要CPU的介入呢?我查阅了相关资料,大概地了解了些。在STM32中,DMA单元和CortexCPU之间对总线使用一种交叉存取的机制。DMA传输遵循相应的传输流程。其中,在数据从内存传输到内存的情况下,每传输一个字要消耗5个时钟周期:1个读周期,1个写周

2、期,插入3个空闲周期供CPU使用。所以,每个DMA通道都只是在总线存取周期才会占用总线,即使传输大量数据,DMA单元最大也只会消耗40%的数据总线带宽。所以说,STM32中的DMA与CPU对总线的使用方式是交叉式的。在K60中,DMA是通过DMA控制器接管接管数据和地址总线。如果CPU正在执行指令,DMA控制利用空闲的地址和数据总线完成数据传送,某种程度上说,CPU运算和数据传送是在并行进行的。K60的DMA数据的传送分为主循环(majorloop)和副循环(minorloop)。majorloop循环一次,可能需要minorloop循环多次。每个minorloop循环都需

3、要DMA源发来请求或者通过软件请求。每个minorloop传送完毕,对应的DMA通道就进入空闲模式,等待下一次DMA请求。当所有DMA传送完毕,即置DONE标志,并且可以通过设置选择传送完毕是否触发中断。此外,可以通过相关寄存器设置,使用Kinetis的DMA模块的主/副循环链接功能、散/聚模式、副循环映射。对DMA模块的相应的寄存器进行初始化后,便可开启DMA功能。例如(K60例程):以智能车摄像头组图采集应用为例。使GPIO口D0~D7采集数字摄像头OV7620的8位灰度输出,使用引脚位灰度输出,使用引脚A19输入像素同步脉冲pclk4分频后的信号,上升沿触发分频后的信

4、号,上升沿触发DMA请求。每行采集点数为V,通过DMA传送到到video数组。一行采集完成后关闭DMA硬件请求,进入DMA中断,使用DMA通道0:[plain]viewplaincopyprint?1.voidDMA0_Init(void)2.{3.SIM_SCGC6

5、=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用时钟4.SIM_SCGC7

6、=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟5.DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(49);//DMA通道0对应49号DMA请求,即PORTA6.DMA_TCD0_

7、CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(V);//当前主循环次数,采集点数7.DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(V);//起始主循环次数,采集点数8.DMA_TCD0_SADDR=(uint32)&GPIOD_PDIR;//设置源地址GPIO口,PORTD9.DMA_TCD0_SOFF=0;//每次传送源地址不变10.DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节11.DMA_TCD0_SLAST=0;//主循环结

8、束后源地址不变12.DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址不调整,自动指向下一行数组第一个元素13.DMA_TCD0_DADDR=(uint32)video;//设置目的地址,video数组第一个元素14.DMA_TCD0_DOFF=1;//每次写目的地址加115.DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据8bit,目的数据8bit16.DMA_TCD0_CSR=DMA_CSR_DREQ_MASK;//通道0主循环结束后停止硬件请求17.DMA_TCD0_CSR

9、=DMA_CSR_

10、INTMAJOR_MASK;//使能DMA0中断18.DMAMUX_CHCFG0

11、=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能19.}DMA的中断服务函数中可登记采集的行数:[plain]viewplaincopyprint?1.voidDMA_CH0_ISR(void)2.{3.DMA_INT

12、=DMA_INT_INT0_MASK;//清除通道0中断4.row_F[imagerow]=1;//采集完成标志5.imagerow++;6.}顺便提一句,用DMA测速,就是把编码器或者光电马盘的脉

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。