智能车摄像头DMA采集方案

在之前做飞思卡尔智能车比赛时接触过K60的DMA ,用DMA 可以采集图像,也可以用DMA 来测速。

概念相信大家都清楚:所谓 DMA就是直接内存取( Direct Memory Access ),是计算机科学中的一种内存访问技术。

书上说,DMA 模块可以不占用CPU 自行传输数据,能够减轻CPU 的负担,然而具体原理是怎样的呢?为什么DMA 能够不需要CPU 的介入呢?我查阅了相关资料,大概地了解了些。

在STM32中,DMA 单元和Cortex CPU之间对总线使用一种交叉存取的机制。DMA 传输遵循相应的传输流程。其中,在数据从内存传输到内存的情况下,每传输一个字要消耗5个时钟周期:1个读周期,1个写周期,插入3个空闲周期供CPU 使用。所以,每个DMA 通道都只是在总线存取周期才会占用总线,即使传输大量数据,DMA 单元最大也只会消耗40%的数据总线带宽。

所以说,STM32中的DMA 与CPU 对总线的使用方式是交叉式的。

在K60中,DMA 是通过DMA 控制器接管接管数据和地址总线。如果CPU 正在执行指令,DMA 控制利用空闲的地址和数据总线完成数据传送,某种程度上说,CPU 运算和数据传送是在并行进行的。K60的DMA 数据的传送分为主循环(major loop )和副循环(minor loop)。major loop循环一次,可能需要minor loop循环多次。每个minor loop 循环都需要DMA 源发来请求或者通过软件请求。每个minor loop 传送完毕,对应的DMA 通道就进入空闲模式,等待下一次DMA 请求。当所有DMA 传送完毕,即置DONE 标志,并且可以通过设置选择传送完毕是否触发中断。此外,可以通过相关寄存器设置,使用Kinetis 的DMA 模块的主/副循环链接功能、散/聚模式、副循环映射。

对DMA 模块的相应的寄存器进行初始化后,便可开启DMA 功能。例如(K60例程): 以智能车摄像头组图采集应用为例。使GPIO 口 D0~D7采集数字摄像头OV7620的 8位灰度输出,使用引脚位灰度输出,使用引脚 A19输入像素同步脉冲pclk4分频后的信号,上升沿触发分频后的信号,上升沿触发DMA 请求。每行采集点数为 V,通过 DMA传送到到 video 数组。一行采集完成后关闭 DMA 硬件请求,进入 DMA中断,使用 DMA 通道 0:

[plain]view plaincopyprint?

1. void DMA0_Init(void)

2. {

3. SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA 多路复用时钟

4. SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA 模块时钟

5. DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(49);//DMA通道0对应49号DMA 请求,即PORTA

6. DMA_TCD0_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 口,PORTD

9. DMA_TCD0_SOFF=0;//每次传送源地址不变 DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节

11. DMA_TCD0_SLAST=0;//主循环结束后源地址不变

12. DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址不调整,自动指向下一行数组第一个元素

13. DMA_TCD0_DADDR=(uint32)video;//设置目的地址,video 数组第一个元素

14. DMA_TCD0_DOFF=1;//每次写目的地址加1

15. DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据8bit, 目的数据

8bit

16. DMA_TCD0_CSR=DMA_CSR_DREQ_MASK;//通道0主循环结束后停止硬件请求

17. DMA_TCD0_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA0中断

18. DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能

19. }

DMA 的中断服务函数中可登记采集的行数:

[plain]view plaincopyprint?

1. void DMA_CH0_ISR(void)

2. {

3. DMA_INT|=DMA_INT_INT0_MASK;//清除通道0中断 10.

4. row_F[imagerow]=1;//采集完成标志

5. imagerow++;

6. }

顺便提一句,用DMA 测速,就是把编码器或者光电马盘的脉冲当做DMA 请求信号,在周期中断中读相应寄存器的值,再考虑上是否溢出,经过简单计算((DMA_MAX_NUM - DMA_BASE_PTR->TCD[DMA_CH0].CITER_ELINKNO)+

DMA_MAX_NUM*ch0_over_cnt),便可得出一定时间内的脉冲数,便可用于测速。

在之前做飞思卡尔智能车比赛时接触过K60的DMA ,用DMA 可以采集图像,也可以用DMA 来测速。

概念相信大家都清楚:所谓 DMA就是直接内存取( Direct Memory Access ),是计算机科学中的一种内存访问技术。

书上说,DMA 模块可以不占用CPU 自行传输数据,能够减轻CPU 的负担,然而具体原理是怎样的呢?为什么DMA 能够不需要CPU 的介入呢?我查阅了相关资料,大概地了解了些。

在STM32中,DMA 单元和Cortex CPU之间对总线使用一种交叉存取的机制。DMA 传输遵循相应的传输流程。其中,在数据从内存传输到内存的情况下,每传输一个字要消耗5个时钟周期:1个读周期,1个写周期,插入3个空闲周期供CPU 使用。所以,每个DMA 通道都只是在总线存取周期才会占用总线,即使传输大量数据,DMA 单元最大也只会消耗40%的数据总线带宽。

所以说,STM32中的DMA 与CPU 对总线的使用方式是交叉式的。

在K60中,DMA 是通过DMA 控制器接管接管数据和地址总线。如果CPU 正在执行指令,DMA 控制利用空闲的地址和数据总线完成数据传送,某种程度上说,CPU 运算和数据传送是在并行进行的。K60的DMA 数据的传送分为主循环(major loop )和副循环(minor loop)。major loop循环一次,可能需要minor loop循环多次。每个minor loop 循环都需要DMA 源发来请求或者通过软件请求。每个minor loop 传送完毕,对应的DMA 通道就进入空闲模式,等待下一次DMA 请求。当所有DMA 传送完毕,即置DONE 标志,并且可以通过设置选择传送完毕是否触发中断。此外,可以通过相关寄存器设置,使用Kinetis 的DMA 模块的主/副循环链接功能、散/聚模式、副循环映射。

对DMA 模块的相应的寄存器进行初始化后,便可开启DMA 功能。例如(K60例程): 以智能车摄像头组图采集应用为例。使GPIO 口 D0~D7采集数字摄像头OV7620的 8位灰度输出,使用引脚位灰度输出,使用引脚 A19输入像素同步脉冲pclk4分频后的信号,上升沿触发分频后的信号,上升沿触发DMA 请求。每行采集点数为 V,通过 DMA传送到到 video 数组。一行采集完成后关闭 DMA 硬件请求,进入 DMA中断,使用 DMA 通道 0:

[plain]view plaincopyprint?

1. void DMA0_Init(void)

2. {

3. SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA 多路复用时钟

4. SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA 模块时钟

5. DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(49);//DMA通道0对应49号DMA 请求,即PORTA

6. DMA_TCD0_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 口,PORTD

9. DMA_TCD0_SOFF=0;//每次传送源地址不变 DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节

11. DMA_TCD0_SLAST=0;//主循环结束后源地址不变

12. DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址不调整,自动指向下一行数组第一个元素

13. DMA_TCD0_DADDR=(uint32)video;//设置目的地址,video 数组第一个元素

14. DMA_TCD0_DOFF=1;//每次写目的地址加1

15. DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据8bit, 目的数据

8bit

16. DMA_TCD0_CSR=DMA_CSR_DREQ_MASK;//通道0主循环结束后停止硬件请求

17. DMA_TCD0_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA0中断

18. DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能

19. }

DMA 的中断服务函数中可登记采集的行数:

[plain]view plaincopyprint?

1. void DMA_CH0_ISR(void)

2. {

3. DMA_INT|=DMA_INT_INT0_MASK;//清除通道0中断 10.

4. row_F[imagerow]=1;//采集完成标志

5. imagerow++;

6. }

顺便提一句,用DMA 测速,就是把编码器或者光电马盘的脉冲当做DMA 请求信号,在周期中断中读相应寄存器的值,再考虑上是否溢出,经过简单计算((DMA_MAX_NUM - DMA_BASE_PTR->TCD[DMA_CH0].CITER_ELINKNO)+

DMA_MAX_NUM*ch0_over_cnt),便可得出一定时间内的脉冲数,便可用于测速。


相关文章

  • 摄像头式避障小车设计
  • 成绩评定表 课程设计任务书 目录 第一章引言 ................................................................................................. ...查看


  • 千兆以太网
  • 基于SOPC 的视频监视器千兆网显示接口设计 梁艺 周卫星 (华南师范大学 物理与电信工程学院,广东 广州 510006) 摘 要:本文应用SOPC 和千兆以太网技术设计实现了视频监视器的千兆网显示接口.通过该接口视频监视器可以完成数字视频 ...查看


  • 网络监控解决方案
  • 目 1.1 1.2 1.3 1.4 录 第1章 概述 . ........................................................................................... ...查看


  • 基于STM32的智能小车摄像头循迹系统
  • 分类号 编号 烟 台 大 学 毕 业 论 文(设 计) 基于STM32的智能小车 摄像头循迹系统 Intelligent Car Tracking System Based on STM 32 Camera 申请学位: 工学学士 院 系:光 ...查看


  • 智能仪器原理及其应用复习题
  • 智 能 仪 器 原 理 复 习 提 纲 1.智能仪器的定义 内部带有微型计算机并带有GP-IP 等通信接口,具有对数据的存储.运算.逻辑判断,自动化操作与外界通信等智能作用的仪器,称为智能仪器. 2.智能仪器的优点 ①使用键盘代替传统仪器中 ...查看


  • 智能门店管理系统解决方案
  • XX 企业 智能门店管理系统 解 决 方 案 苏州科达科技股份有限公司 2016-03-01 目 录 1. 项目背景 ............................................................. ...查看


  • PCI总线的信号采集
  • 第30卷第1期 2010年1月 西 JOURNALOFⅪ'AN 安 科技 大 学学 UNIⅦRSrrY OFSCIENCE AND晒CHNO啪Y 报 V01.30No.1 Jan.2010 文章编号:1672-9315(2010)01-01 ...查看


  • 小型机房综合监控系统解决方案
  • IDC机房综合监控系统建议配置 1 监控需求分析 客户需求分析如下: 监控场所为IDC 机房,面积在300平方米左右,要求监控的对象包括: 1) APC UPS 1组,智能设备,提供通讯协议 2) HIROSS空调1组,智能设备,提供通讯协 ...查看


  • 软件项目策划书
  • "粉笔杀手"项目策划书 用智能手机实现视频展示台 西安邮电大学计算机学院 "软件之翼"创新团队 2014年12月2日 星期二 1. 项目概述 在多媒体教室进行教学时,尽管可以通过PC机和投影仪来演示大 ...查看


热门内容