微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式机器视觉系统中ARM与DSP的数据通信方法

嵌入式机器视觉系统中ARM与DSP的数据通信方法

时间:11-20 来源:21IC电子网 作者:毛晓波 刘国栋 陈铁军 黄云峰 点击:

DSP对数字信号和数值算法具有强大的运算处理能力,因而在信号采集与处理中被广泛应用,但其在任务管理、实时控制、人机交互等方面不占优势。而ARM微控制器则控制功能强大,可以加载嵌入式操作系统,且能够提供良好的人机交互、任务管理、网络通信等方面功能。因此,发挥DSP和ARM处理器各自的优势,采用ARM+DSP结构的设计方案已成为嵌入式系统的研究热点,倍受关注。通过嵌入式机器视觉系统的设计实例,阐述ARM与DSP有机结合的设计思想,重点研究ARM与DSP之间的数据通信。

1 嵌入式机器视觉系统总体方案

采用ARM+DSP结构的机器视觉系统总体结构如图l所示。以三星公司高性能ARM处理器S3C2440作为主控制器,配置并移植Linux操作系统,同时以TI公司的DSP芯片TMS320C5402为图像处理的协处理器,通过对DSP芯片自带的HPI接口的硬件连接方案和驱动程序设计,将二者有机地结合起来,各自发挥其独特优势,协调配合,完成目标采集、处理与视觉跟踪。

首先由智能摄像机采集现场运动目标的图像,由ARM控制将数据存放在ARM与DSP的公共存储区域中,并通知信号处理模块DSP调用各种算法(帧间差分、图像分割、特征提取、形心计算等)对视频图像进行处理,完成目标的识别与定位,并将结果信息传给ARM处理器,由ARM控制步进电机,调整PTZ摄像机位姿(水平转动P-Pan、垂直转动T-Tilt、景深伸缩Z-Zoom),使其对准运动目标,实现实时跟踪。此外,ARM处理器还负责多任务管理、人机交互及中断报警等。

作为双核系统,双核各自拥有很好的性能,于是主机ARM与协处理器DSP之间能否进行快速可靠的数据交换,直接决定机器视觉系统的运行效率。在硬件设计方面,采用主机并行接口HPI实现主机ARM与协处理器DSP之间的硬件直连,设计简单方便,时钟频率可达到DSP时钟频率的1/5,能够支持DSP与主机之间的高速数据传输。在软件设计方面,则移植嵌入式Linux操作系统,将HPI看作字符设备完成了驱动程序的设计。

2 双机通信硬件设计

2.1 HPI接口简介

主机接口(HPI)是TI公司C54x系列定点信号处理器(DSP)内部自带的接口部件,通过它可以方便地实现DSP与其他主机连接。C54x中的主机接口主要有3种类型:标准8位主机接口HPI-8,增强8位主机接口HPI-8,增强16位主机接口HPI-16。增强型的HPI可以允许主机访问DSP所有的片上RAM单元,而标准主机接口只允许访问固定的2 K片上RAM。本文中用到的TMS320C5402拥有增强HPI-16主机接口。它由以下5部分组成:

1)HPI存储器(DARAM) 传送主机与DSP之间的数据,在一个机器周期内能被访问2次,可以用作通用的双导址数据RAM或者程序RAM。

2)HPI地址寄存器(HPIA) 只有主机能对其进行直接访问。该寄存器中存放着当前寻址的HPI存储单元的地址。

3)HPI控制寄存器(HPIC) 地址002CH,主机和DSP都能对他直接访问,用来保存HPI操作的控制和状态位。

4)HPI数据锁存器(HPID) 只有主机能对它进行直接访问。如果当前进行的是读操作,则HPID中存放的是要从HPI存储器中读出的数据;如果当前进行写操作,则HPID中存放的是将要写到HPI存储器的数据。

5)HPI控制逻辑 处理HPI与主机之间的接口信号。

2.2 接口电路及其工作原理

3 软件设计

3.1 Linux驱动程序

Linux操作系统引入设备文件的概念,即把每一个设备都看作一个文件,像对待文件一样对设备进行操作。在Linux操作系统下,设备文件主要有3种类型:字符设备、块设备、网络设备,各自对应一种类型的设备驱动程序。本文设计的HPI接口的驱动程序属于字符设备驱动程序。

Linux下的驱动程序是为相应的设备编写多个基本函数,填充file_operations结构体。其中定义了实现各种操作函数。如下所示:

其中,open和release完成设备的打开和关闭。mmap为内存地址映射操作。驱动程序的设计是通过实现个中操作函数的基本功能,为相应的设备在应用层提供统一的接口。

下面是本文中的HPI接口的驱动程序的设备入口hpi_open函数,它负责打开、准备设备。

任何时候对字符设备(HPI)接口进行打开操作,都会调用设备的open入口点(hpi_open)。所以open函数(hpi_open)必须对将要进行的I/O操作(对DSP读写数据)做好必要的准备工作,例如设备是独占的,则open函数(hpi_open)必须将设备标记成忙状态,如上面例程中的①处两行所示。

3.2 驱动程序中映射的实现

由于在Linux系统中,用户应用程序不能直接对驱动程序的内存空间进行操作,因此必须用到内存映射机制。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top