人人范文网 范文大全

648软件开发总结

发布时间:2020-03-03 03:23:32 来源:范文大全 收藏本文 下载本文 手机版

内部

648软件开发介绍

一 DM648介绍

DM648属于TI达芬奇系列,采用单核C64X+定点CPU,支持最高频率1.1GHz,有两个乘法器支持四个16bits*16bits(结果32bits)单个clock cycle或者八个8bits*8bits(结果16bits)单个clock cycle。还有6个ALU。

648的片上存储器有L1P(32KB),L1D(32KB),L2(512KB) 648集成了五个视频口VPORT,省去FPGA做FIFO,可以节省产品成本。

648集成了丰富的外设,包括edma(64个通道),SPI,I2C,UART,EMIF,DDR2,Ethernet,gpio(32个),McASP,PCI。

二 搭建软件开发环境 2.1操作系统环境

Win7 32位或win-XP环境 2.2软件安装和配置

需准备的安装软件 Ccs3.3

bios3.08 648dvsdk perl Bios是TI针对DSP开发的实时嵌入式操作系统。

Dvsdk是基于BIOS系统的视频开发包。 Perl是脚本工具,烧写程序时将out文件转换为ais文件。

建议所有软件安装到默认目录下,安装完后

配置操作系统环境变量

修改BIOS_INSTALL_DIR变量为 C:/CCStudio_v3.3/bios_5_31_08 配置CCS的组件管理器,如图2-1

点“开始->所有程序->TI->component manager,修改Target Content(DSP/BIOS)->TMS320C64XX为当前版本的DSP/BIOS

图 2-1 2.3 DVSDK目录文件介绍

默认安装到C:\\dvsdk_1_11_00_00_DM648目录下,其中

edma3_lld_1_05_00是edma3驱动包

examples 包含很多基于BIOS的示例应用工程,我们参考video_preview示例程序作为框架,添加图像处理算法和通讯驱动。 flashutil 包含flash烧写工程norwriter,bootloader程序ubl,ais文件生成脚本

ndk_1_92_00_22_eval 网络开发软件包 pspdrivers_1_10_00 包含了TI提供的很多基于BIOS系统的驱动,我们参考其中VPORT的驱动,将按帧采集修改为按场采集的功能 xdc_2_95_02 xdc工具安装路径,xdc是ccs的子工具,是一个javascript编译工具,用于编译cfg文件,cfg文件在后面讲。如图2-2安装XDC后,会在工程的编译选项界面增加XDC选项。

图2-2 2.4仿真器

TDS560USB PLUS

在CCS setup界面选择TDS560USB PLUS platform和C64x+ family的DM648。如图2-3.

图2-3 三 VPORT+EDMA工作原理 3.1 VPORT介绍

DM648集成了五个VPORT口,用于视频输入输出,每个VPORT可以配置为capture或display模式。Capture模式又分为双通道8bit BT656,单通道16 bit Y/C模式。 Display模式又分为单通道8bit BT656, 单通道16 bit Y/C模式。

目前,capture和display模式都采用8bit BT656子模式,PAL视频编码芯片和解码芯片也设置为BT656模式。 3.2 BT656标准简介

BT656标准将4:2:2格式YCbCr数据统一封装在一个数据流中,按照CbYCrY顺序排列,Y的数据数量是Cb,Cr的2倍,。

BT656数据流中,ffh和00h保留用于时序标示。在视频数据每行的开头和结尾有标示SAV(start of video),EAV(end of video)。SAV和EAV的格式是ffh,00h,00h,XYh,前三个字节固定,第四个字节包含场标示,场消隐状态和行消隐状态,如图3-1。

图3-1 3.3 VPORT FIFO 每个VPORT有一个FIFO存储进入的数据或者从FIFO输出。

BT656 capture模式中,FIFO分成A、B两个通道,如图3-2,A通道接收VDIN[9-2]管脚的数据,B通道接收VDIN[19-12]管脚的数据。每个通道又分Y,Cb,Cr三个缓存,每个缓存区有独立的读寄存器。

图3-2 BT656 display模式中,如图3-3,只有一路输出,FIFO分为Y,Cb,Cr三个缓存区,每个缓存区有独立的写寄存器。

图3-3 VPORT和EDMA配合在FIFO和外部或片上存储器之间移数。我们可以编程FIFO的阈值寄存器,当FIFO达到设置满度(fullne)(对于捕获模式)或者低于设置满度(对于显示模式)时,生成EDMA事件,触发相应EDMA通道移数。

每个VPORT对应6个EDMA事件,分别是

VPxYEVTA, VPxCbEVTA, VPxCrEVTA, VPxYEVTB, VPxCbEVTB, VPxCrEVTB 例如,我们用VP0口的A通道做为BT656视频输入,VP1口做为BT656视频输出。

设置VP0口A通道Y,Cb,Cr三个缓存区的阈值为720,360,360。当PAL图像数据传输完一行后,三个缓存区都达到阈值,生成VP0YEVTA,VP0CbEVTA,VP0CrEVTA三个事件,触发对应的三个EDMA通道将三个FIFO缓存区的一行图像数据移入DDR2缓存区。

设置VP1口Y,Cb,Cr三个缓存区的阈值为720,360,360。当三个缓存区数据数量低于阈值时,生成VP1YEVTA,VP1CbEVTA,VP1CrEVTA三个事件,触发对应的三个EDMA通道将DDR2缓存区的一行图像数据移入三个FIFO缓存区。

四 应用程序及驱动解析

4.1两个重要文件

基于BIOS/DSP系统开发软件,有两个重要工程文件tcf和cfg文件,如图4-1中红圈1和2。

图4-1

tcf文件包含了DSP/BIOS的配置信息。红圈3的global settings设置DSP工作频率,L1,L2 cache size,大小端,L2 cache 128kB。Memory section设置程序和数据各部分在存储器中的段地址。

红圈4 HWI(hardware interrupt)处,添加硬件中断处理函数

红圈5 添加BIOS/DSP的线程

cfg文件包含了库链接路径信息,使用javascript语言,如图红圈6。使用XDC工具编译cfg文件,生成库链接信息,供C编译器链接库时使用。cfg文件常链接的库有vport驱动,edma驱动程序。

4.2图像缓存分配和管理

Edma在VPORT和SDRAM之间搬数,CPU要访问SDRAM最新的图像数据,程序采用多个图像缓存区循环的方式将这两个过程并行化。

应用层创建捕获或显示通道时,调用驱动层程序在DDR2分配存放图像数据的缓存区。分配之前,驱动根据通道的配置参数计算每个缓存区的大小。

例如,vp0按场采集,vp1按帧显示。Vp0的每个缓存区的大小是720*288*2,vp1的每个缓存区的大小是720*576*2。

应用程序使用FVID_dequeue()出队函数和FVID_queue()入队函数或FVID_exchange()交换函数,在应用程序和驱动程序之间交换图像缓存区。

捕获和显示驱动的缓存管理方法不同,如下面两图4-2和4-3:

图中蓝块表示应用程序的图像缓存区,白块表示驱动程序的图像缓存区。

图像捕获缓存区,初始时所有的缓存区都在捕获队列里,捕获驱动程序以循环的方式填充每个缓存区。

当应用程序调用FVID_dequeue()函数时,将放有最新图像数据的缓存区出队并返回给应用程序,驱动在余下的队列里循环填充,如(a)到(b)和(b)到(e)。

当应用程序调用FVID_queue()函数时,将一个空的缓存区交给驱动程序并加入队列,如图(b)到(a)和(e)到(b)。

当应用程序调用FVID_exchange()函数时,应用程序交给驱动一个空的缓存区,驱动交给应用程序放有最新图像的缓存区,相当于同时调用FVID_dequeue()和FVID_queue()两个函数,如图(b)到(c)和(c)到(d)。

图4-2

图像显示缓存区,初始时只有一个缓冲区用于显示,其它缓存区等待出队,如图(a),黄块表示显示驱动队列里准备出队的缓存区。显示驱动程序重复显示一个缓存区的图像。

当应用程序调用FVID_dequeue()函数时,从驱动获得一个缓存区,应用程序向它填充显示数据,同时驱动仍然显示之前的缓存区,如图(b) 和(d)。 当应用程序调用FVID_queue()函数时,应用程序给驱动程序一个准备显示的缓存区,同时驱动将它设置为当前的缓存区,如图(b)到(c)到(d)。

当应用程序调用FVID_exchange()函数时,应用程序给驱动一个准备显示的缓存区,从驱动得到一个空的缓存区,相当于同时调用FVID_dequeue()和FVID_queue()函数,如图(d)到(e)。

图4-3

4.3 应用程序框架介绍

基于dvsdk_install_dir/example目录下的video_preview示例程序,做为项目软件框架

应用程序主要包含三部分:

Main函数

Video_preview线程

自添加的中断处理函数

许多实时DSP应用都需要同时执行很多不相关的功能,这些功能一般是对外部事件的响应,这些功能就加线程。

DSP/BIOS支持4种线程:

(1) 硬件中断(HWI):频率可达200KHz(5us) (2) 软件中断(SWI):SWI允许HWI将一些非关键处理在低优先级上延迟执行,这样可以减少在中断服务程序中的驻留时间。

(3) 任务(TSK):任务与中断不同点在于,任务在执行过程中可以被挂起。

(4) 后台线程(IDL):空闲循环,运行那些没有执行时间限制的函数。

上电加载完操作系统内核后,首先执行main函数。

Main函数执行完后,启动video_preview线程,线程生命期直到执行结束后。此线程主要功能有图像采集,处理,字符叠加,显示。

Video_preview线程第一步调用FVID_create()函数为vp0口创建捕获通道对象capChan,初始化vp0寄存器,为vp1口创建显示通道对象disChan,初始化vp1寄存器。

第二步调用FVID_allocBuffer() 为capChan和disChan分别分配三个图像缓存区,然后调用FVID_queue()将三个缓存区组成队列,同时为capChan和disChan分配edma通道,设置edma参数表。

第三步调用FVID_control()函数使能vp0,vp1口,vp0开始捕获,vp1开始输出显示。

第四步调用FVID_dequeue()从capChan和disChan的缓存队列中各出一个缓存。

第五步 进入while(1)循环,在循环中执行两次FVID_exchange()。FVID_exchange(capChan,pImg1)捕获新的一场图像数据,FVID_exchange(disChan,pImg)显示新的一帧图像。捕获两次,显示一次。

FVID_exchange(capChan,pImg1)后面添加图像处理算法和叠加字符。

4.4添加图像处理算法

在FVID_exchange(capChan,img)函数捕获图像后添加图像处理算法。为了减少CPU访问图像数据时间,将图像数据和访问频率高的中间数组放在L2 RAM里。DM648 L2的大小512KB,其中128KB用于cache,剩余384KB可用于应用程序存放图像数据。

4.5 VPORT驱动调试方法

VPORT驱动采用BIOS的两层驱动模型cla/mini-driver,BIOS现在抽象定义了三种cla驱动,PIP/PIO,SIO/DIO,GIO,应用程序通过这三类BIOS API接口与mini driver通讯,在一个应用工程中可以同时使用这三种API 接口。

Mini层通过CSL层访问外围硬件的寄存器,存储器,中断资源,如图4-6。

图4-6 Video_preview应用工程中使用了BIOS GIO接口API,如图4-7是GIO和mini diver层包含的API,

FVID函数是GIO API的宏定义,如下:

#define FVID_create(name, mode, status, optArgs, attrs) \\

GIO_create(name, mode, status, optArgs, attrs) #define FVID_exchange(gioChan, bufp) \\

GIO_submit(gioChan, FVID_EXCHANGE, bufp, NULL, NULL) #define FVID_control(gioChan, cmd, args) \\

GIO_control(gioChan, cmd, args)

图4-7 VPORT的mini driver层实现工程vport_bios_dm648_drv_lib.pjt在dvsdk_install_dir/pspdriver目录下,将其设置为video_preview_PAL.pjt的依赖工程(Dependent Projects),如图4-8,这样应用工程重新编译之后就可以同时调试应用工程

和mini driver层。

图4-8 五 flash芯片烧写程序

在烧写程序之前需要准备两个文件ubl.ais和video_preview_PAL.ais,使用Dvsdk_install_dir\\flashutil\\目录下的perl脚本命令create_ais.bat将ubl.out和video_preview_PAL.out生成对应的ais文件。

Ubl(user boot loader)是DSP启动加载器,DSP上电后会自动将UBL代码从 flash加载到存储器中,开始执行UBL,ubl先初始化pll,ddr2,emif,再将video_preview_PAL工程从flash加载到存储器中,然后开始执行应用程序。

准备好ais文件后,加载运行norwrite工程Dvsdk_install_dir\\flashutil\\DM647_8\\CCS\\DM648_NORWriter,norwriter包含四个步骤:

(1) 设备初始化,pll,ddr2,emif初始化。 (2) 擦写flash块0xa000 0000-0xa002 0000,将UBL二进制文件写入该flash块。

(3) 擦写flash块0xa002 0000-0xa008 0000 ,将video_preview工程二进制文件写入该flash块。

(4) 擦写flash块0xa060 0000-0xa060 2000,将轴位写入该flash块

软件开发心得总结

软件开发期末总结

软件开发心得总结

aspnet软件开发学习总结

软件开发项目经理终总结

大学生软件开发实习总结

七五普法专题活动练习题 (648)

软件开发平台与工具总结

软件开发专业实训总结

软件开发项目实训总结

648软件开发总结
《648软件开发总结.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档