视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
dsp技术相关论文
2025-10-02 04:33:49 责编:小OO
文档
基于DSP的自动对焦系统

摘要:介绍了一种基于DSP芯片TMS320F206进行数值计算和实施控制的自动对焦系统。给出了系统的硬件构成和软件设计。该系统不仅充分发挥了DSP芯片的数值计算优势,而且拓展了其在人机对话和电机控制等输入输出方面的应用。 

关键词:自动对焦DSP爬山搜索算法

现代社会是一个高度信息化的社会,多媒体技术的发展使图像信息的获取及其传输手段倍受瞩目。自动对焦技术是计算机视觉和各类成像系统的关键技术之一,在照相机、摄像机、显微镜、内窥镜等成像系统中有着广泛的用途。传统的自动对焦技术较多采用测距法,即通过测出物距,由镜头方程求出系统的像距或焦距,来调整系统使之处于准确对焦的状态。随着现代计算技术的发展和数字图像处理理论的日益成熟,自动对焦技术进入一个新的数字时代,越来越多的自动对焦方法基于图像处理理论对图像有关信息进行分析计算,然后根据控制策略驱动电机,调节系统使之准确对焦。

本文利用数字式CMOS图像传感器作为感像器件,运用DSP芯片采集图像信息并计算系统的对焦评价函数,根据优化的爬山搜索算法控制驱动步进电机,调节系统光学镜头组的位置,使系统成像清晰,从而实现自动对焦。这是一种数字式的自动对焦方法,其准确性和实时性使其在视频展示台和显微镜等设备中的应用具有广泛的前景。

1 系统的硬件构成

一个典型的自动对焦系统应具备以下几个单元:成像光学镜头组、成像器件、自动对焦单元、镜头驱动单元。在本系统中,成像光学镜头组包括光学滤波器、变焦透镜组和对焦透镜组;成像器件是CMOS数字式图像传感器,输出图像信息的数字量;自动对焦单元由DSP芯片作为核心器件,图像信息的采集、计算、控制策略的选择和控制信号的产生都在这个单元中进行;镜头驱动单元包括步进电机及其驱动电路,该单元接受自动对焦单元的控制,驱动成像光学镜头组中的变焦透镜组和对焦透镜组进行位置调节,最终使图像传感器输出准确对焦的图像。系统的硬件结构如图1所示。

1.1 数字式CMOS图像传感器

图像传感器是把光信号转换成电信号的装置。本系统采用1/3英寸数字式CMOS图像传感器OV7620,总有效像素单元为6(水平方向)x492(垂直方向)像素;内置10位双通道A/D转换器,输出8位图像数据;具有自动增益和自动白平衡控制,能进行亮度、对比度、饱和度、γ校正等多种调节功能;其视频时序产生电路可产生行同步、场同步、混合视频同步等多种同步信号和像素时钟等多种时序信号;5V电源供电,工作时功耗<120mW,待机时功耗<10μW。

OV7620工作时序图如图2所示。其中,PCLK是图像传感器的像素时钟,HREF是行同步信号,Y和UV是图像数据信号,VSYNC是帧同步信号,FODD是奇偶场信号。

1.2 DSP控制系统

DSP芯片也称数字信号处理器,是一种特别适合于进行数字信号处理的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。本系统采用TI公司的DSP芯片TMS320F206进行数值计算和实施控制,采用40MHz有源晶振,经过分频后获得50ns的系统时钟周期。该芯片支持硬件等待状态,当BEADY引脚电平为低时,TMS320F206等待一个CLOCK1周期并再次检查READY,在READY被驱动至高电子以前,TMS320F206将不再继续执行。TMS320F206的工作时序图如图3所示。

1.3 系统的硬件电路

系统的硬件电路如图4所示。图像数据Y0~Y7通过74LS245输入到DSP的数据端口D0~D7;行同步信号HREF、帧同步信号VSYNC、时钟信号CLOCK、像素时钟PCLK分别接至相应引脚配合数据采集;键盘输入用来手动控制变焦倍率;DSP通过数据端口送出步进电机运转所需的三相六拍脉冲时序,经过74S245缓冲和MC1413功率放大后,驱动步进电机工作。

图3和图4

2 系统的软件设计

系统软件包括数据采集及处理、优化搜索算法、步进电机驱动和变焦跟踪等功能模块。系统软件流程图见图5。

2.1 数据采集和计算

系统上电复位后,先对系统初始化,包括对DSP芯片TMS320F206内的RAM区进行功能划分、定义程序中的变量、驱动聚焦镜头的电机复位、设置DSP芯片TMS320F206的输入输出端口、设置TMS320F206的等待状态等。

初始化工作完成后,系统进入数据采集和计算阶段,根据数字图像传感器提供的场同步、行同步和像素时钟等时序信号,可以方便地选取不同的对焦窗口采集数据。采集完成后,马上计算相邻像素的亮度差值的平方和,并保存到TMS320F206的RAM中。由于TMS320F206提供的重复执行指令极大地节约了运算时间,因此一行数据的差值运算根据采集窗口的不同可在一至两行的时间内完成。一帧图像的数据采集都完成后,将每一行像素的亮度差值平方和累加,就得到这一桢图像的调焦评价函数。将调焦评价函数的最大值及此时的步进电机行程记录下来。一帧图像的数据采集和计算处理结束后,步进电机以一个较大的步长定向前进,重复数据采集和计算的过程,直到步进电机走完规定的行程。

2.2 优化的搜索算法

本系统采用了一种优化的爬山搜索算法。控制策略为:先根据整个行程的调焦评价函数值,获得调焦评价函数与步进电机行程的关系曲线,从曲线上可以判断选择最大的步进电机步长。在判断选择时,既要保证不会错过调焦评价函数的最大值区域,同时又要满足以最少的步数走完全程。在获得全程最大调焦评价函数区域后,将步进电机步长减小,在最大值区域内进一步搜索更精确的对焦位置。采用这一策略,既不会发生误判或找不到对焦点的情况,又能以较快的速度进行对焦。软件设计为:电机驱动镜头从起始位置出发,先以等步长走一遍全程,记录下调焦评价函数最大值时的镜头位置,然后镜头回到调焦评价函数最大值位置的前一站,换用小步长,从调焦评价函数最大值位置的前一站走到最大值位置的后一站,记录下这一全程的调焦评价函数最大值时的镜头位置,如此反复搜索,最后镜头停止在调焦评价函数最大值处,使系统实现正确对焦。采用这一方法,既可以避免电机盲目反转,又能确保系统找到正确的对焦点,而且搜索历程短,有利于快速对焦。

3 自动对焦实验结果

在优化的爬山搜索算法中,选取最大步长要以调焦评价函数的变化趋势为依据。在本系统中选择最大步长为30H,这样总能测到一个最大值或两个次大值中的一个数据,在第二次搜索时就一定能找到调焦评价函数的最大值。 

基于DSP的网络通信程序设计

摘要:通过分析网卡基本通信过程控制和数字信号处理器(DSP)对网卡直接编程方法,成功设计基于DSP的网络通信程序,从而最终实现DSP系统数字化和网络化的融合。

关键词:DSP 网络通信程序 通信协议 网卡

DSP芯片是专门为实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,其卓越的性能、不断上升的性价比、日渐完善的开发方式使它的应用越来越广泛。将计算机网络技术引入以DSP为核心的嵌入式系统,使其成为数字化、网络化相结合,集通信、计算机和视听功能于一体的电子产品,必须大大提升DSP系统的应用价值和市场前景。将DSP技术与网络技术相结合,必须解决两个关键问题:一是实现DSP与网卡的硬件接口技术,二是基于DSP的网络通信程序设计。DSP与网卡的硬件接口技术参考文献[1]有比较详尽的论述,以下主要讨论基于DSP的网络通信程序设计。

1 通信协议的制定

协议是用来管理通信的法规,是网络系统功能实现的基础。由于DSP可以实现对网卡的直接操作,对应于OSI网络模型,网卡包含了物理层和数据链路层的全部内容,因此,规定了数据链路层上数据帧封装格式,就可以为基于DSP的局域网络中任意站点之间的通信提供具体规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于实现802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研究工作中的具体试验平台是以DSP为核心构成的以太局域网,主要用于语音的实时通信,所使用的网卡为Novell公司的NE2000网卡。NE2000网卡的基本组成请见参考文献[2],其核心器件是网络接口控制器(NIC)DP8390。该器件有三部分功能:第一是IEEE802.3MAC(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,CSMA/CA(带碰撞检测功能的载波侦听多址接入)协议以及CRC校验等功能;第二是寄存器堆,用户对NE2000网卡通信过程的控制主要通过对这些寄存器堆中各种命令寄存器编程实现;第三是对网卡上缓冲RAM的读写控制逻辑。DP8390发送和接收采用标准的IEEE802.3帧格式。IEEE802.3参考了以太网的协议和技术规范,但对数据包的基本结构进行了修改,主要是类型字段变成了长度字段。所以,以DSP为核心的局域网内通信数据包基本格式如图1所示。

DSP读出数据包和打包从目的地址开始。目的地址用来指明一个数据帧在网络中被传送的目的节点地址。NE2000支持3种目的地址:单地址、组地址及广播地址。单地址表示只有1个节点可以接收该帧信息;组地址表示最多可以有个字节接收同一帧信息;而广播地址则表示它可以被同一网络中的所有节接收。源地址是发送帧节点的物理地址,它只能是单地址。目的地址和源地址指网卡的硬件地址,又称物理地址。

在源地址之后的2个字节表示该帧的数据长度,只表示数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,必须填充至46字节。原因有两个:一是保证从目的地址字段到帧校验字段长度为字节的最短帧长,以便区分信道中的有效帧和无用信息;二是为了防止一个站发送短帧时,在第一个比特尚未到达总线的最远端时就完成帧发送,因而在可能发生碰撞时检测不到冲突信号。NE2000对接收到的从目的地址字段后小于字节的帧均认为是“碎片”,并予以删除。在数据字段,根据系统的具体功能要求,用户可以预留出若干个字节以规定相应的协议,以便通信双方依据这些字节中包含的信息实现不同的功能。

2 基于DSP的网络通信程序设计

如果基于网络操作系统,用户可以利用一些软件对网络操作系统的支持,很容易地编写出优秀的网络通信程序,但这些程序必须依附于网络操作系统。而在DSP环境下,必须深入了解网络接口控制器(NIC)的工作原理[2],通过对网络直接编程,实现局域网内任意站点之间的通信而完全抛开网络操作系统。

DSP对网卡的通信过程控制就是DSP对DP8390中各种寄存器进行编程控制,完成数据分组的正确发送和接收。DP8390的所有内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的选择由命令寄存器CA控制。第0页寄存器用于收发过程,第1页寄存器主要用于DP8390的初始化,第2页寄存器则用于环路诊断。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实际物理端口地址(PPA)为网卡基本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应注意的是,PPA与寄存器间并不存在一一对应关系,对PPA的读操作与写操作并不一定是对同一寄存器进行的,这种情况在第0页尤其明显。用户数据分组在DSP和网卡交互是通过网卡的数据端口实现的,既可以用DMA方式也可以用PIO方式读入数据分组或将数据分组送至网卡RAM缓冲区。在本系统中,DSP采用DMA方式对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。

网卡通信过程控制可分为网卡初始化、接收控制和发送控制。下面分别予以讨论。

2.1 网卡初始化

网卡初始化的主要任务是设置所需的寄存器状态,确定发送和接收条件,并对网卡缓冲区RAM进行划分,建立接收和发送缓冲环。具体过程请参阅参考文献[2]。需要说明的是,每一块网卡被赋予一个物理地址,以便通信站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,通过远程DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,如果能正确读出网卡的物理地址,则说明网卡硬件基本没有问题,网卡的上电复位和DSP对网卡的初始化顺利通过;另一方面,这个物理地址可以用于DSP网络系统中的点名、包的过滤丢弃等服务,也就是说,在链路层根据数据帧携带的源地址和目的地址确定数据报从哪里来,是否接收或丢弃。网卡初始化时另一个重要的工作就是接收缓冲环的设置,为了有效利用缓冲区,NIC将接收缓冲区RAM构成环形缓冲结构,如图2所示。

接收缓冲区RAM分成多个256字节的缓冲区,N个(N最大为256)这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。缓冲环的开始页面地址存入PSTART寄存器,环页面结束地址存入PSTOP寄存器。PSTART和PSTOP确定了接收缓冲环的大小和边界。为便于缓冲环读写操作,还需要2个指针:当前页面指针CURR和边界指针BNRY。CURR确定下一包放在何处,起着缓冲环写页面指针作用;BNRY指向未经DSP取走处理最早到达的数据包起始页面,新接收的数据包不可将其覆盖,起着缓冲环读页面指针的作用。也就是说,CURR可以告诉用户网卡接收的数据分组当前放到了什么位置,而BNRY则用于确定DSP读缓冲环到了什么地方。由于接收缓冲区为环形结构,BNRY和CURR相等时,环缓冲区可能满也可能空。为了使NIC能辨别这两种状态,规定当BNRY等于CURR时,才认为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1。因此,初始化时设置:BNRY=PSTART,CURR=PSTART+1。这时读写指针不一致,为了保证正确的读写操作,引入一软件指针NEXTPK指示下一包起始页面。显然,初始化时NEXTPK=CURR。这时,缓冲环的读指针对NEXTPK,而BNRY只是存储分组缓冲区的起始页面边界指示,其值为NEXTPK-1。

2.2 接收控制过程

DSP完成对DP8390的初始化后,网卡就处于接收状态,一旦收到分组,就自动执行本地DMA,将NIC中FIFO数据送入接收缓冲环,然后向主机申请“数据分组接收到”中断请求。DSP如果响应中断,则启动网卡远程DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接收缓冲环CURR、NEXTPK、BNRY指针内容进行修改,以便网卡能从网上正确接收后续分组。DSP响应网卡接收中断后,接收控制过程如下:

①设置远程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。

②设置远程DMA操作的字节数,这个长度在46~1500字节范围内根据具体要求自己确定。

③0AH送命令寄存器CR,启动远程DMA读。

④从网卡数据端口依序读入数据分组,注意,最先读入的4字节非数据分组内容,第1字节为接收状态,第2字节为下一包页地址指针,3与4字节为接收字节数。第2字节内容应该送入Nextpk,其它字节根据用户要求处理。

⑤修改边界指针BNRY=Nextpk-1。

⑥清除远程DMA字节数寄存器RBCR0和RBCR1。

2.3 发送控制过程

DSP先执行远程DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后启动发送命令进行数据分组发送。发送控制过程如下:

①设置远程DMA的起始地址为网卡发送缓冲区起始地址;

②设置远程DMA操作的字节数;

③12H送命令寄存器CR,启动远程DMA写;

④依序送出数据分组至网卡发送缓冲区;

⑤清除远程DMA字节数寄存器;

⑥设置发送字节数寄存器TBCR0和TBCR1;

⑦12H送命令寄存器CR,启动数据分组发送。

3 发送方发送频率的控制

发送方发送频率的正确控制主要保护两点:一是有一个最小发送时间间隔,否则会因为接收方不能及时接收而导致系统瘫痪;二是发送频率能够足具体的功能实现要求。譬如在语音的实时通信中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,采用1024字节需用时128ms,如果通信协议规定发送1次传送1024字节有效数据,则必须每128ms发送一次才能保证缓冲区有新数据待发送,也才能保证接收方有新数据播放。128ms是一个理论计算数值,在实际的操作中采样速度和发送频率之间总是不能完全匹配,而存放数据的缓冲区大小是有限的,如果没有良好的控制技巧来实现正确发送,就会造成声音抖动和延时。解决的办法是双缓冲技术和双指针控制,并且根据采样速度和发送频率之间的匹配情况送入不同的发送通信进行处理后发送。正确发送的含义有两方面,一是每次发送的都是新数据,二是能满足接收方总在播放新数据的需求。

4 接收方防止数据包的丢失

由于DSP通过中断请求判断是否有数据分组到来,如果中断繁忙而两个数据包到来时间相差非常短,DSP有可能只响应一次中断,从而导致丢包的发生。分析网卡接收数据过程,当网卡收到数据分组时,首先执行本地DMA,将NIC中FIFO数据送入接收缓冲环,并将本地DMA操作的起始地址存放在当前页寄存器(CURR)和当前本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接收缓冲环读出数据到存储器则称远程DMA操作,用软件指针Nextpk来指示远程DMA的起始页面。因此通过比较网卡本地DMA和远程DMA的当前地址,即在中断服务子程序中比较CURR和Nextpk指针,或比较CLDA0、CLDA1和Nextpk指针,就可以保证当前数据分组放到了哪里就读出到哪里,从而防止丢包的发生。

5 结论

DSP对网卡通信过程控制的实现解决了DSP网络中任意站点之间,DSP网络与PC机之间准确、高速的实时通信问题,是将网络技术应用到DSP数字化系统中的关键,从而最终实现了以DSP为核心的处理系统数字化和网络化的融合。

DMA在实时图像处理中的应用

摘要:以TMS320C6701为例,说明在实时图像处理系统中使用DMA的必要性,同时给出DMA在实时图像处理中几种典型的应用例子。 

关键词:DMA 实时图像处理 DSP

引言

实时图像处理系统要求系统必须在有限的时间内完成大量数据的运算。DSP以其独特的哈佛总线结构和并行的存储块结构,将乘法操作与加法操作统一考虑,可以在一个指令周期完成般处理器的多次运算;并且指令系统采用多级流水线操作方式,保证了系统对实时性的要求,因此得以在实时图像处理系统广泛应用。图像处理系统的最大特点就是运算数据量大。大多数情况下,数据量远远大于片内存储器容量,计算过程中必须进行数据的交换。合理使用DMA可以提高数据传输效率,取得事半功倍的效果。本文以TMS320C6701(简称C6701)为例,介绍DMA在图像处理中的几种典型应用。

1 图像处理系统特点与使用DMA的必要性

前面已经提到,图像处理系统的最大特点是就是运算数据量大,数据量往往大于片内存储器容量。不仅如此,图像处理系统之中,运算过程产生的中间数据往往与源数据大小相当,这也了片内高速存储区的使用。然而为了提高处理的速度,计算源数据、中间数据必须尽可能多地在片内高速存储区进行,因此,必须使用DMA在片内高速存储区与片外低速存储区之间进行数据交换,以提高数据处理速度。

另外,数据的排列往往不符合程序的要求;必须对数据进行重排达到程序要求;使用DMA对数据重排,可以满足程序要求。与数据重排如出一辙,图像处理中许多操作的基础都是对多重数组的操作,也就是矩阵运算。诸如求逆、取子图等图像处理中经常用到的运算,也可以通过DMA完成。这些运算当然可用C语言编程实现,但是,如果程序实现是一个多重循环,不利于软件流水,而且随着数据量的增加,消耗的时钟周期也会成比例增加;即使使用并行汇编在时钟消耗上可以有所减少,这都是不符合系统实时性要求的。如果通过DMA数据重排,可以轻而易举地实现,而且这个过程CPU只占有一个时钟周期,通过巧妙程序安排,安全可以使数据的传输过程在CPU的后台进行,根本感觉不到DMA的存在。

2 C6x系列DMA简介

TMS320C6701S是TMS320C6000系列的高速浮点数字信号处理信号,是TI公司20世纪90年代后期的最新一代DSP产品。C6701有4个通道自加载的DMA通道,用于数据的DMA传输;另外,1个辅助DMA通道,负责与主机通信。DMA通道可以在没有CPU参与下完成映射空间的数据传输。数据的传输可以是片内存存储器、片内外围部件或外部器件之间的传输。

2.1 DMA控制寄存器

对于C6x系列的DMA,在使用任何一个DMA通道进行数据传输前,都必须设置以下几组寄存器。各寄存器及其功能如下:

*主控寄存器(primary control register)——用于控制DMA状态及传输类型;

*副控寄存器(secondary control register)——用于使能CPU中断,监视DMA通道状态;

*传输计数寄存器(transfer control register)——用于记录传输的单位数目;

*源地址寄存器(source control register)——传输的起始地址

*目标地址寄存器(destination control register)——传输的目的地址;

此外,DMA通道可以使用以下全局DMA寄存器,以完成比较复杂的传输过程:

*全局地址寄存器组(global address register A、B、C和D);

*全局索引寄存器组(global index register A和register A和B)。

全局地址寄存器组共有4个32位寄存器,其作为地址或地址重载值。全局索引寄存器2个32位寄存器。每个寄存器含2个控制域,其中高16位为帧索引域(FRAME INDEX),其值为帧间的地址偏移量,也就是传输完1帧后,地址的调整量;低16位为数据单元索引域(ELEMENT INDEX),其值为帧内地址偏移量,也就是每传输完1个数据单元的地址调整量。全局计数重载计数器与全局索引寄存器结构一样,用于重载DMA通道的传输计数寄存器。全局DMA寄存器可以为任意DMA通道使用,而且同一寄存器可以同时被一个以上的DMA通道使用。

2.2 DMA工作过程简介

DMA是十分复杂的系统,限于篇幅,这里只简要介绍DMA的工作过程。

在C6000系列DMA中,把所传输的一定数量的数据单元(ELEMENT)称为帧(FRAME),帧的大小由传输计数寄存器的低16位数据即单元计数域(ELEMENT COUNT)指定,该寄存器的值通过传输计数寄存器的高16位即帧计数域(FRAME COUNT)指定。当完成1次DMA读操作,ELEMENT COUNT值自动域1;当最后1个数据单元读操作完成时,FRAME COUNT自动减1,此时ELEMENT COUNT的值将被全局计数重载寄存器的ELEMENT COUNT更新;当最后1帧的读操作完成后,传输计数寄存器将被全局计数重载寄存器的值更新。

DMA控制器负责对每个通道的读写传输进行地址计算。在计算机传输地址时,有基本调整和使用全局索引寄存器进行调整2种方式:基本调整是指通过控制域SRC DIR和DST DIR来设置传输地址,按数据字长大小(由ESIZE控制)递增、递减或保持不变;而使用全局索引寄存器调整与基本调整不同,这种模式下,根据传输的数据元素是否当前帧的最后一个来进行地址调整。

在全局索引寄存器调整模式下,地址调整值由全局索引寄存器控制。全局索引寄存器含2个控制域,其中高16位为帧索引域(FRAME INDEX),其值为帧间的地址偏移量,也就是传输完1帧后的地址调整量;低16位为数据单元索引域(ELEMENT INDEX),其值的帧内地址偏移量,也就是每传输完1个数据单元的地址调整量。

3 几种典型的DMA操作及其应用

3.1 块移动

块移动能够将1块连续数据块从一个地址传输到另一个地址,通常用于将数据或程序从外部存储器移到内部存储器。这种块移动是最简单、最常见的DMA工作方式。例如,将1块1K连续的32位数据块从外存(0x02000000)移动至内存(0x80000000),如图1所示。

相关寄存器的值设置:

Primary control register =0x00000050

Transfer control register =0x00000400

Source control register =0x02000000

Destination control register =0x80000000

其中主控寄存器各控制域设置与意义如下:

DST RELOAD =00 无目标地址重载

SRC RELOAD =00 无源地址重载

EMOD =0

FS =0 无帧同步

TCINT =1 允许中断

PRI =1 DMA优先

WSYNC =00000 无读同步

RSYNC =000 无写同步

RSYNC =00 无写同步

FRAME COUNT =0X000

ELEMENT COUNT =0X0400

INDEX =0 全局计数重载寄存器A

CNT RELOAD =0 全局计数重载寄存器A

SPLIT =00 无地址

ESIZE =00 数据单元4BYTES

DSTDIR =11 索引寄存器方式

SRCDIR =01 地址递增

STATUS =00此位只读

START =00 DMA停止

在主控寄存器的START读中写入01b就可以开始DMA的传输。

3.2 数据重排

往往数据的格式并不符合运算的要求。在这种情况下,可以通过DMA进行数据重新排列,以满足运算的要求。数据重排主要是利用DMA的帧传输方式。数据重排所必需的、最关键的一步是设置全局寄存器,所以,以下讨论的重点就是全局寄存器的设置。

3.2.1 求矩阵转置

图2显示了将一个位于外存16bit的连续数据区,开始地址(0x02000000),数据重排并移至片内存储区,首地址为(0x80000000)前后的排列情况。

在数据重排中,主要是正确设置全局索引寄存器。在这里,可以将1帧看作1个数组,那么数据单元就是数组的元素。因此,如果假设共有F×E的矩阵,即有F帧数据,每帧E个数据单元,每个元素为S(Byte),重排为E×F的矩阵。在这种情况下,源地址递增,目标地址根据全局索引寄存器的值进行调整。在帧内相邻的数据单元传输时,目标地址偏移应为F×S,所以传输完1帧后的地址总偏称为(E-1)×F,因此,下一帧的第1个数据单元地址为在当前的地址减去((E-1)×F-1)×S。也就是说,

*FRAME INDEX应设为-((E-1)×F-1)×S

*ELEMENT INDEX应设为F×S

在上例中寄存器的设置为:

*FRAME INDEX =-((2-1) ×4-1) ×2=0xFFEE

*ELEMENT INDEX=4×2=8

因此,寄存器设置如下:

Primary control register =0x030001D0

Transfer control register =0x00040002

Source control register =0x02000000

Destination control register =0x80000000

Global index register A =0xFFFA0008

Global count reload A =0x00000002

3.2.2 取图像子图

图像处理中,往往要从图像中抠取一定大小的子图,然后对子图进行处理。对于大型图像,尺寸往往超过了DSP系统的片内存储器的大小,这种抠取的操作成了必不可少的步骤。这可以通过使用全局索引寄存器来完成。例如,从一个8×4的图像中抠取一个2×4的子图,如图3所示,其中每个数据单元为1Byte。

可以这样描述:有F1帧数据,每帧数据有E1个数据单元,每个数据单元为S(Byte);从中抠取部分为F2帧数据,每帧数据E2个数据单元,数据单元为S(Byte)。这种情况下,因为完成数据传输后,目标存储区为连续数据,因此目标地址递增;源地址根据全局索引寄存器的值进行调整。帧内相邻的数据单元传输时,源地址偏移应为S;当读完帧的最后一个数据单元,源地址指针跳过(E1-E2)个数据单元,即帧间的地址调整量为((E1-E1)+1)×S。这样全局寄存器的设置:

**FRAME INDEX =((8-4)+1×1=4

*ELEMENT INDEX=1

*FRAME COUNT =2

*ELEMENT INDEX=4

因此,寄存器设置如下:

Primary control register =0x03000270

Transfer control register =0x00020004

Source control register =0x02000000

Destination control register =0x80000000

Global index register A =0x00050001   Global reload register A =0x00000001

结束语

作为实时系统,选取合理有效的核心算法是至关重要的,同时,选择有效的数据传输方法也是不容忽视的。我们在实际工作中发现,在大多数情形下,数据传输所花费时间往往超过数据处理的时间,成为实时图像处理系统中的瓶颈。因此,合理使用DMA提高数据传输效率,是很有实际价值和意义的。下载本文

显示全文
专题