0

关于投票
开发DSP硬件驱动程序的一种方法(转贴)
开发DSP硬件驱动程序的一种方法
张 行,雷 勇

(四川大学电气信息学院 四川 成都610065)

l 引 言

目前,TI公司的DSP应用很广泛,随着DSP的功能越来越强大,片上外设种类及应用日趋复杂。传统的DSP程序开发包含两方面程序:即配置、控制、中断等管理DSP片内外设、接口的硬件相关程序和基于应用的算法程序。这样的系统结构,应用程序与硬件相关程序紧密的结合一起,限制了程序的可移植性和通用性,软件开发总要从零开始,存在诸多重复工作。一旦硬件平台有变化,往往与硬件程序捆绑一起的应用程序也需改动,代码的维护性和
可移植性均不高。

通过建立硬件驱动程序的开发模式,可使上述现象得到改善。因此,本文介绍一种开发TI公司DSP片内及片外硬件外设驱动程序的方法,并以C5000 DSP的McBSP/DMA及TMS320C5509的USB驱动程序开发为具体对象,介绍这种方法的应用。

2 基于DSP/BIOS的IOM硬件驱动

在CCS应用环境中集成的实时操作系统DSP/BI-OS[1]中,硬件驱动程序最终以函数库的形式被封装起来,应用程序可不关心底层硬件外设的具体操作,通过调用DSP/BIOS相关的标准API与不同外设接口。接口按统一标准定义,即在DSP/BIOS中创建并配置硬件设备驱动
模块为IOM(I/O Mini-driver)模式。

IOM[2]是DSP/BIOS的设备驱动模块的一种接口方式,配置硬件设备驱动模块为IOM模式可在DSP/BIOS的图形化界面(GUI)中方便完成。IOM模式将设备驱动程序分为两个层次:上一层是"类"驱动程序(class driv-er),这部分程序负责对存储缓冲区管理、由DSP/BIOS各类标准的API函数与应用程序接口,与设备硬件无关。下一层是"迷你"驱动程序(mini-driver),这部分程序集成了实际硬件相关的代码。IOM接口将"迷你"驱动程序与"类"驱动程序联系一起,包括定义I/O数据包(IOM_Packet)以提交"迷你"驱动程序读写,定义功能函数包(IOM Fxns)完成相关初始化,打开或关闭通道,提交I/O数据传输与控制等任务,确保"迷你"驱动程序与"类"驱动程序运行协调一致。

"类"驱动程序直接在应用程序中出现,并且根据数据输入/输出的处理方式不同,有相应"类"驱动程序。主要是3种:流输入输出型"类"驱动(SIO)、管道型"类"驱动(PIP)和通用输入输出型"类"驱动(GIO)。

其中,SIO"类"驱动由两部分组成:SIO模块和DIO适配模块(Adapter),前者负责创建通道、数据流输入/输出,DIO提供负责缓冲管理、信号同步、将API及参数与下层"迷你"驱动程序接口;PIP"类"驱动由两部分组成:PIP模块和PIO适配模块(Adapter),前者创建管道、数据管道输入/输出,PIO提供负责缓冲管理、信号同步、将API及参数与下层"迷你"驱动程序接口。GIO"类"驱动是一种通用输入输出接口,调用的API函数,可通过阻塞线程读写数据,直接与"迷你"驱动通信。

SIO,PIP,GIO模块集成在DSP/BIOS中,SIO通道、PIP管道可在DSP/BIOS的输入输出模块图形化界面(GUI)中静态设置并创建,也可以在应用程序中动态创建。DIO,PIO适配模块(Adapter)创建在DSP/BIOS的设备驱动模块图形化界面(GUI)中完成。

由上可见,"类"驱动程序均为标准的API函数,故编写驱动程序的重点是"迷你"驱动程序方面。"迷你"驱动通过创建统一接口标准的功能函数包(IOM Fxns),应用程序就可以由DIO适配模块或PIO适配模块或GIO"类"驱动调用"迷你"驱动,控制底层硬件设备。这些统一接口标准的功能函数包括:

mdBindDev:设备与"迷你"驱动绑定函数;

mdControlChan:设备通道控制函数;

mdCreateChan:设备通道创建函数;

mdDeleteChan:设备通道删除函数;

mdSubmitChan:按IOM数据包命令执行函数;

mdUnBindDev:设备从"迷你"驱动释放函数。

IOM数据包是其中一关键数据结构,为IOM驱动程序内部数据的输入输出服务。应用程序本身不会涉及IOM数据包访问,是IO适配模块、PIO适配模块或GIO"类"驱动通过他访问"迷你"驱动层,其中,数据结构的cmd项,即"类"驱动命令"迷你"驱动的mdSubmitChan功能函数执行硬件设备的读写等操作。"迷你"驱动完成相应操作,通过回调函数后向上返回该数据包。

3 McBSP/DMA驱动程序开发

这是基于C5000系列DSP的McBSP和DMA硬件驱动开发。系统以TMS320VC5410为CPU,TLC320AD50C为音频编解码芯片,TLC320AD50C与DSP的McBSP0通道接口,数据传输采用DMA方式。

在传统的软件开发结构中,应用程序一般通过DMA中断服务程序控制硬件设备及数据管理。传统的软件开发结构如图1所示。

在本文推荐的软件开发结构中,硬件设备驱动程序与应用程序隔离开,他们之间通过DSP/BIOS的API接口,包括硬件设备初始化参数的传递。本系统软件开发结构如图2所示。

具体开发过程如下:

(1)IOM驱动程序

mdBindDev在DSP/BIOS启动时调用,具体完成硬件设备初始化参数传递、获取McBSP及DMA资源,McBSP及DMA的初始化参数用CSL配置,注意McBSP使用的是通道O。mdCreateChan在应用层与硬件设备创建两个逻辑通道,即DMA接收、发送通道。分别设置初始化参数。mdSubmitChan按IOM数据包数据结构的cmd项,命令"迷你"驱动执行向硬件设备的IOM写操作,即通过McBSP0输出数据。相应工程编译链接生成驱动库函数,完成IOM驱动程序。

(2)DMA/McBSP应用程序

在应用工程中,首先在DSP/BIOS配置工具中User-Defined Devices项进行"迷你"驱动程序注册,命名为"co-dec"。属性如图3(a)所示。注册信息中设置了驱动程序的初始化函数、IOM函数包指针、设备参数指针的名称。本应用采用IOM驱动程序的流输入输出"类"驱动(SIO/DIO),DIO适配模块与上述"迷你"驱动程序"codec''接口,DIO适配模块在DSP/BIOS配置工具中添加,命名为"dio codec",属性如图3 (b)所示。

本应用选择DMA通道4,5,设置TLC320AD50C的4个控制寄存器初始化参数,即"迷你"驱动程序注册信息的设备参数指针所指内容。

然后,应用程序通过调用DSP/BIOS的API,动态创建DMA/McBSP输入、输出通道,如:

SIO输人、输出通道均采用双缓冲管理。获取双缓冲资源,管理缓冲数据的工作,同样由SIO相关API完成,API的使用方法可参见参考文献中所列手册。

4 USB驱动程序开发

这是基于C5000系列DSP(TMS320C5509A)的USB硬件驱动开发。TMS320C5509A内部集成符合USB 2.0标准的全速模式USB接口。SIE[3](Serial Interface En-gine)负责将数据按照USB物理电平信号串行转并行输入或并行转串行输出,并且具有错误校验机制。UBM(USB
Buffer Manager)负责数据缓冲管理,管理数据在SIE和缓冲RAM的输入输出,CPU或USB的DMA控制器在缓冲RAM收发数据。

本硬件驱动的软件开发结构与上述McBSP/DMA硬件驱动开发类似,上层为"类"驱动,即DSP/BIOS GIO,SIO,或PIP模块,提供针对USB的"迷你"驱动的各种输入输出请求。"迷你"驱动是基于DSP/BIOS关于USB模块的CSL(Chip Support Library),调用CSL的API完成底层硬件各种复杂操作。

(1)IOM驱动程序

C5509 USB mdBindDev在DSP/BIOS启动时调用,完成USB初始化参数传递,中断向量设置,初始化USB模块;C5509 USB mdControlChan接受如SIOcontrol等"类驱动"命令,可复位USB数据通道,连接主机USB接口等工作;C5509 USB mdCreateChan创建某个USB端点的数据通道及配置数据传输方向;C5509 USB mdSubmitChan负责USB数据流输入输出管理。

(2)USB应用程序

在DSP/BIOS配置工具中User-Defined Devices项进行"迷你"驱动程序注册,命名为"usb"。属性如图4(a)所示。本应用也采用流输入输出(SIO/DIO),DIO适配模块与上述"迷你"驱动程序"usb"接口,DIO适配模块在DSP/BIOS配置工具中添加,命名为"dio_usb",属性如图4(b)所示。

应用程序动态创建USB的某端点为输入、输出通道,如:

由上可知,应用层"类"驱动程序开发的通用性是很强的。

5 结 语

本文推荐的这种DSP硬件驱动开发方法,通过构建应用程序与硬件外设输入输出的统一数据接口,将接口代码层次化。当硬件设备改动后,应用程序可不做修改,应用程序的通用性、可移植性大大加强,硬件驱动程序也具有反复利用的特点。

系统分类: DSP
用户分类: DSP/BIOS
标签: 无标签
来源: 转贴
发表评论 阅读全文(209) | 回复(0)

0

关于投票
TMS320VC5410 DSP的DSP-BIOS扩展寻址的实现(转帖)
摘  要:通常C5410程序空间被限制在64K地址空间内,当应用程序超出64K时,则需增加目标系统存储区和附加逻辑,实现对系统的扩展。本文介绍如何配置及使用DSP/BIOS实现扩展寻址功能,并分析了API调用和中断触发过程,最后以DSP并行自举引导方式实现程序的脱离仿真运行。

     关键词:DSP/BIOS  扩展寻址  API  并行自举引导

字串6

     一 DSP/BIOS 接口 字串3

     DSP/BIOS提供了基本的运行服务,如应用程序实时分析功能,时钟周期函数,I/O模块,优先级的任务调度等。DSP/BIOS提供支持汇编和C语言的API接口函数,这些API函数绝大部分都是用汇编语言实现的,因此汇编语言可以直接调用API,而C语言调用API则通过DSP/BIOS的C封装器。应用程序通过调用API函数来使用DSP/BIOS,如软件中断、背景线程和中断服务程序等都可以调用DSP/BIOS的函数。当DSP/BIOS要调用用户的C语言函数时则要通过函数链接器,如图一所示。

字串3

字串2

    二 扩展程序空间

字串7

    C5410的16位地址空间逻辑上被划分为两块,低地址块定义为公共区(或未映射区),高地址块为映射区(或扩展区)。划分这两块的地址由目标系统的外部寄存器和存储区决定的。值得注意的是,C5410的数据区没有扩展存储区。

字串4

    用户可以在映射区上定义多个物理存储区,它们覆盖整个映射区,但彼此空间不重叠。当使用存储区的扩展页时,内部16位地址空间被扩展为32位的地址来寻址,高16位代表扩展页的数目,低16位代表局部的16位地址。如使用扩展程序映射存储器(XPC)来存放扩展页码,XPC存放在数据空间地址为0x1E的位置,它的值要与.CMD链接文件中定义的扩展页码保持一致。如图二所示的一个扩展3页的程序区结构图。公共区的范围是0x0000-0x7FFF;映射区的范围0x8000-0xFFFF,映射区为第一页,XPC要为0才能访问该区;映射地址空间存放两个扩展页,扩展程序映射寄存器限定了映射地址,使得每个扩展页的每个单元具有唯一的地址。当访问扩展页时,映射区将被覆盖。
C5410的DSP/BIOS不仅支持64K程序页内的“近”访问模式,而且支持扩展程序的“远”访问模式,只需设置DSP/BIOS的属性即可实现扩展程序的“远”访问。要注意的是汇编语言写的API只能在PAGE0页调用,而C语言写的API可以在任何页面调用。

字串2

    三 中断 字串5

    当中断产生时,DSP的内部结构机制只能够保存低16位页内的局部地址,而扩展寻址时程序地址需要23位,这就意味着调用和返回时将超出64K(16位地址)的范围,因此必须考虑怎样保存和恢复扩展地址。解决的方法是用中断服务程序(ISR)保存XPC的值,确保能正确的计算中断向量,为此中断向量表必须方在公共区或映射区的64K程序页面上。当DSP/BIOS在公共区上时,ISR可以放在任何位置;如果不在公共区上,则ISR必须放在PAGE0上。
当OVLY=0时,为了能保证中断正确的执行,必须在每一个页面上都要有中断向量表的拷贝。当OVLY=1时,只须在公共页面上(如0x7F80)作一份中断向量表的拷贝就可以了。

字串7

    四  程序实例 字串5

    通过一个简单的例子介绍DSP/BIOS如何实现程序地址的扩展。本例中有三个软中断:时钟中断PRD_POST_SWI,每100毫秒触发SWI_PAGE1(或SWI_PAGE2)一次;SWI_PAGE1,完成值XF高;SWI_PAGE2,完成值XF低。三个软中断执行的函数分别放在程序空间的不同页面上,即PRD_Post_SWI放在公共页面上(XPC=0),Page1Func 和Page2Func分别放在扩展程序页面 1和2上,XPC为1和2。 字串1

#include "testfarcfg.h"
#pragma CODE_SECTION(Page1Func, ".FarPage1")
#pragma CODE_SECTION(Page2Func, ".FarPage2")
int pagenumber;
void main(void)       {pagenumber=0;}
void Page2Func (void)  { asm(" rsbx xf");  pagenumber="0";}
void Page1Func (void)  { asm(" ssbx xf");  pagenumber="1";}
void PRD_Post_SWI(void)
{ if(pagenumber)   SWI_post(&SWI_PAGE2);
else   SWI_post(&SWI_PAGE1);
}

字串3

    五 DSP/BIOS的配置

字串6

    如要把DSP/BIOS的程序映射到扩展程序空间,需要对其配置,步骤如下。 字串9

  1.     建立一个新配置文件。启动仿真软件(Code Composer Studio),建立testfar.pjt工程,通过File中的New -- DSP/BIOS Config创建配置文件,选用sd54.cdb54X EVM)配置。

字串5

  2.     添加软件中断。右键打开软件中断管理器(Software Interrupt Manager,选择Insert SWI,创建SWI_PAGE1,属性配置为:function:_Page1Funcpriority:2。同样的方法创建function_Page2FuncSWI_PAGE2。右键打开定时器功能管理器(Periodic Function Manager),选择Insert PRD,创建PRD_POST_SWI,属性为:period(ticks):50function :_ PRD_Post_SWImode: continuous

字串5

  3.     设置OVLY位为1。打开System中的Global Settings的属性页,在PMST(60)项中填入使第5位为1的值,如MP=1,填入0x60 字串6

  4.     指定“远”调用模式。在Global Settings属性页面的Function Call Model选项中选择far,使全局变量CALLMODEL设置为far

字串2

  5.     在公共区中重新分配中断向量表。双击System中的MEM,右键打开VECT 的属性页,在base项中填入新的基地址,如0x7F80 字串1

   6.       配置扩展程序地址段。对于54X EVM评估板,已经有了2个扩展程序段EPROG0EPROG1(如果没有的话,则需添加这两个段,选择Insert MEM ,添加两个扩展程序段,重命名为EPROG0EPROG1)。EPROG0属性为base:0x8000len:0x4000 ,勾去create a heap in this memory选项,space: codeEPROG1EPROG0的属性不同之处base:0x18000。加入一个新的扩展程序段EPROG2,属性为base:0x28000len:0x4000 space: code

字串1

   7.       将目标代码链接到扩展程序段。pragma伪指令告诉编译器的预处理器如何处理函数,语法为 #pragma CODE_SECTION(Page1Func, ".FarPage1"),在名为".FarPage1"段中分配Page1Func的程序空间。这样目标代码Page1Func就被链接到.FarPage1段的区域。

字串4

   8.      创建一个新的链接命令文件(testfar.cmd)。其主要的功能是把testfarcfg.cmd链接进去,并且告诉链接器把不同目标函数放在不同的扩展页面上。如:

字串6

-ltestfarcfg.cmd 字串9

SECTIONS

字串6

{ .FarPage1: {} > EPROG1 PAGE 0

字串4

.FarPage2: {} > EPROG2 PAGE 0

字串1

} 字串1

   9.     保存配置文件为testfar.cdb,然后将testfar.cdbtestfar.cmd testfar.c文件加入工程中。 字串8

   10.   配置编译器和汇编器的支持远模式代码。打开菜单Project中的Build Options窗体,选择Compiler属性页,点击Category中的Advanced选项。勾选Use Far Calls -mf)(C548 and higher)。此选项指定产生远调用代码模式。

字串4

11.   调试器内描述并激活扩展寻址功能。仿真器的调试软件需要激活扩展寻址功能,才能支持长指令的执行和扩展存储区的读/写,也可方便地对使用扩展寻址的程序进行调试。所以使用通用扩展函数GEL_XMDef()来定义映射寄存器(如XPC)和映射扩展空间的首地址。如当OVLY=1,扩展程序区从0x8000开始,7XPC放置在数据空间的0x1E单元中。把下面这两条语句加入C5410.gel文件的C5410_Init()函数中。

字串1

GEL_XMDef(0,0x1e,1,0x8000,0x7f); 字串6

file://0/:映射程序空间;0x1eXPC的地址;1XPC 在数据空间中; 字串9

file://0x8000/:映射首地址;0x7fXPC的大小,128页; 字串2

GEL_XMOn(); //使能扩展地址映射
字串9

DSP/BIOS函数调用和中断触发过程分析

字串8

1DSP/BIOS API 调用过程,如图三中的实线所示。 字串9

字串2


点击放大

字串7

产生PRD_F_swi,短调用C语言封装器的PRD_F_swi ()XPC=0字串6

C语言封装器触发PRD_POST_SWI时钟软中断,然后检测到SWI_PAGE1,产生执行DSP/BIOS调度表的分支。

字串6

DSP/BIOS调度表保存当前PRD_POST_SWI上下文信息,调用函数链接器以便触发SWI_PAGE1字串3

函数链接器远调用SWI_PAGE1,执行相应的函数(Page1Func),XPC=1字串6

SWI_PAGE1执行结束,远返回函数链接器。

字串8

函数链接器又返回到DSP/BIOS调度表。 字串7

DSP/BIO调度表恢复PRD_POST_SWI信息,返回到C语言封装器。 字串7

执行上述⑴和⑵,第⑶步触发SWI_PAGE2,函数链接器远调用SWI_PAGE2,执行函数(Page2Func),XPC=2字串8

SWI_PAGE2执行结束,远返回函数链接器,然后顺序执行上述的第⑹和⑺。

字串6

2、中断触发过程,如图三中的虚线所示。 字串7

PRD_F_swi发生,CPU把当前的16PC指针压入堆栈,在中断向量表中取指令。 字串2

中断向量程序把当前的XPC压入堆栈,产生一个配置中断服务程序的分支指令,执行中断服务程序,XPC=0

字串6

中断服务程序调用HWI_enter,触发PRD_POST_SWI软中断,接着调用HWI_exitHWI_exit检测到SWI_PAGE1准备好,开始调用DSP/BIOS调度表。

字串7

DSP/BIOS调度表保存当前的上下文信息,调用函数链接器以便触发SWI_PAGE1

字串3

函数链接器远调用SWI_PAGE1,执行相应的函数,此时XPC=1SWI_PAGE1执行完,远返回调用函数链接器,再到DSP/BIOS调度表,调度表恢复上下文信息,把程序指针交给PRD_POST_SWI软中断。PRD_POST_SWI结束。

字串3

执行上述的①、②后,第③步检测到SWI_PAGE2准备好,第④步触发SWI_PAGE2,第⑤步函数链接器远调用SWI_PAGE2XPC=2,顺序执行下去直到PRD_POST_SWI结束。

字串2

   七 并行自举引导的实现
   C5410上电复位后,检查到DSP处于MC(微计算机)工作方式,从片内ROM的0FF80h起执行程序。0FF80h地址存放的是中断向量表,它实为一条分支转移指令(BD  0F800h),使程序跳转至0F800h执行自举引导程序(Bootlooader)。并行自举引导是DSP举引导常用的一种方式,Bootlooader首先从地址为0FFFFh的I/O口读取自举表首地址的内容,如果此内容不符合8位或16位的引导方式,就从地址为0FFFFh的数据存储器读取,进行8位或16位并行自举引导。若要完成自举引导功能,必须建立正确的自举表。
字串2


自举表的内容不仅包括了欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。自举表可由hex500格式转换器自动生成。hex500是一个通用程序,它将公共目标文件格式—COFF文件转换成各种FLASH(或EPROM)的编程格式。因此,在使用hex500工具之前,首先把testfar.pjt进行编译、链接,生成COFF格式的testfar.out文件,然后再通过设置适当的选项生成用户所要求的自举表,如转换文件的格式,外部数据存储器的字宽等选项。把testfar.out转换为testfar.hex文件后,再使用C语言编写一个转换程序,将hex文件转换为DSP烧写FLASH程序能识别的文件格式。根据文件信息就可以完成自举表的内容,如表一。最后使用FLASH的擦除、读和写等操作指令把表一的内容烧入FLASH中。DSP上电复位,便可完成并行自举引导。

字串4


整个引导过程为:上电复位后,判断MP/MC=0 处于微计算机工作方式,从片内ROM的0FF80h处执行中断向量表的分支转移指令(BD 0F800h),使程序跳转至0F800h处执行自举引导程序,自举引导程序完成初始化后读取数据空间的0FFFFh地址的内容,找到自举表首地址8000h,从8000h处开始读取内容,首先是16位自举标记(10AA),然后分别是寄存器SWWSR及BSCR的内容,程序入口地址,代码段长度,存放代码段的目标地址等信息,最后根据这些信息把FLASH的8008H到A594H的程序搬运到片内RAM中,然在把Page1Func和Page2Func的代码搬运到0x180000和0x28000处,最后跳转至片内RAM的26FDH,即PC为26FDH,XPC为0,开始执程序。完成程序的并行自举过程。
字串4

点击看大图 字串5

 

系统分类: DSP
用户分类: DSP/BIOS
标签: 无标签
来源: 转贴
发表评论 阅读全文(164) | 回复(0)

0

关于投票
实时操作系统在探地雷达信号处理中的应用(邓怀东,杨万海)

现代电子技术
Modern Electronics Technique
2004年 第27卷 第8期 


实时操作系统在探地雷达信号处理中的应用

邓怀东,杨万海

  (西安电子科技大学 电子工程学院 陕西 西安 710071)

   :介绍了一个在探地雷达信号处理机中应用实时操作系统的例子,对硬件结构和软件设计都做了说明,并归纳了TI(德州仪器)为其公司的DSP量身订做的嵌入式操作系统DSP/BIOSⅡ的一些特点以及在应用中值得注意的问题。
  关键词:探地雷达;TMS320C55x;实时操作系统;DSP/BIOSⅡ

  Application of Real-time Signal Processing of Subsurface Radar
 
DENG Huaidong,YANG W anhai
 
(The Electronic Engineering School,Xidian University,710071,China)

    Abstract: This paper deals with an example of applying real-time operating system or subsurface radar, illustrates the hardware structure and the software design,sums up some features of embedded operating system DSP/BIOSⅡdedicated by TIDSP,andsummarizes some noticeable problems in practice.
  Keywords:subsurface radar;TMS320C55x;embedded operating system;DSP/BIOSⅡ

  随着DSP(数字信号处理器)性能的改进,应用范围的扩大,特别是在消费类电子产品的应用日益增加,DSP除了继续承担传统的算法处理核心的角色之外,还需要完成一些控制性的或事务性的工作,而这些工作以前往往是由控制能力、线程管理能力更强的MCU或CPU来完成。嵌入式实时操作系统的应用解决了DSP系统开发中的2个重要的问题:一是可以保证系统响应的实时性,二是使复杂的多线程多任务的软件系统的开发变得相对简单易行。
  DSP平台的信号处理机一般只是整个系统的一个专用于信号处理算法的子部分,不需要控制太多的外设,而且为了满足实时信号处理,尽量采用前后台式的线性程序结构。
  本设计的信号处理机是希望以他为主体构成一个完整的便携式雷达系统,除了信号处理的任务之外,采样、显示、通信等多种任务也必须由他来完成,需要满足实时多任务的要求,所以必须使用嵌入式实时操作系统。本文主要介绍了为什么使用实时操作系统以及基于DSP/BIOSⅡ实时操作系统的总体软件设计思想和方案。

1 总体硬件方案设计
  本信号处理机以TMS320C5509作为整个系统的核心,由于考虑到图像的缓存需要较大的存储空间,所以扩展了三星公司的16 Mb的SDRAM——KM416S1020C作 为扩展存储器。整个系统的工作流程是由控制器和D/A提供给前端采样头所需的信号,并启动A/D对采样头传来的模拟信号进行采样,DSP接收之后做相应的信号处理,根据键盘的设定将图像按照一定的要求显示到彩色图形液晶上,并通过USB接口将数据传送到PC机存储以便做进一步的处理和显示。总体硬件框图如图1所示。

  TMS320C5509数字信号处理器是德州仪器公司(TI)TMS320C5000系列中新推出的一种,极大降低了功耗,达到了每个MIPS只需0.05 mW的水平,与市场上的主流产品TMS320C54x相比,功耗降低了6倍。TMS320C5509的内核是从TMS320C54x上发展而来的,所以可以完全兼容现在市场主流的TMS320C54x系列处理器的指令,既保护了用户在软件方面的投资,又使得熟悉TMS320C54x编程的软件人员几乎不用再学习就可以编写他的软件。同时,TMS320C5509中还集成了大量诸如AD,USB控制器之类的片内外设,使其成为了一款具有SOC(片上系统)性质处理器,用户只需外加很少的辅助器件就可以构成一个较完整的DSP系统。从以上特点可以看出,TMS320C5509非常适合于应用在便携式系统中。

2 实时操作系统DSP/BIOSⅡ的简介
  TI公司的DSP/BIOSⅡ是一种专门为TI公司的TMS320系列DSP芯片设计的嵌入式实时多任务操作系统。主要由5个部分组成:
  (1)线程和调度(Procedure and Scheduling)
  DSP/BIOSⅡ提供了4种不同的执行线程,包括HWI(硬中断任务)、SWI(软中断任务)和TSK(任务)等,每一类线程又具有不同的执行、挂起、休眠等特性。DSP/BIOSⅡ支持基于静态优先级的调度方法,又可以通过修改内核提供抢先式多任务服务。
  (2)硬件抽象(Hardware Abstraction)
  他提供了PIP和SIO两种数据传输模式,可以方便DSP与外设之间的数据交换。Pipe(数据管道)使用了较少的内存,并且传输的速度快、效率高。SIO(流)对内存有了更高的抽象,便于创建设备驱动程序更加结构化的方法。
  (3)资源管理(Resoure Management)
  利用DSP/BIOSⅡ的逻辑接口可以对特定的硬件部分进行访问和配置。DSP/BIOSⅡ不仅可以通过其设置工具来定义内存映射、中断向量表而且还可以设置定时器、串行口等硬件设备。
  (4)通信和同步(Communication and Synchronization)
  DSP/BIOSⅡ支持旗语(Semaphores)、邮箱(Mailbox)和数据队列(Queue)等多种内部线程通信和同步的方式。旗语是最主要的同步方式,可以使任务通过旗语来运行和挂起,还可以用互斥旗语来管理缓冲区和设备。
  (5)实时分析(Real-Time Analysis)
  实时分析工具能够让开发者在程序执行期间对DSP进行交互和诊断。DSP/BIOSⅡ不仅提供了常用的日志(LOG),STS,TRC模块,还提供了CPU负载图(CPULoad Graph)、执行图(Execution Graph)等多种更方便的调试和观察工具。

3 基于DSP/BIOSⅡ实时操作系统的软件结构设计
  使用DSP/BIOSⅡ来做项目的第一步就是模块划分,即把项目所要完成的功能拆分成几个相对独立的线程来完成(可以认为线程在运行时是独占DSP的),根据线程中使用硬件资源的情况考虑用什么类型的线程来完成。一般来说,用到硬中断的任务放到HWI来完成,用到定时器的任务可以放到PRD(周期任务)中完成。然后是确定线程之间的关系,根据他来设定各个线程的优先级,以及用 什么方式通讯和交换数据。旗语是最便于使用的通讯方式。
  探地雷达信号处理机的信号处理过程:A/D每采来一列数据之后给DSP发一个硬中断信号,每接收到一列数据之后,DSP对这列数据分别进行平均滤波和自适应滤波,同时进行列计数;当列计数到达一帧时,对这一帧图像信号进行小波去噪处理和脉冲压缩,最后根据键盘的设定把图像显示到图形液晶上,并通过USB接口送到PC主机,以便下一步的处理。
  根据以上的执行过程,整个软件分解为12个独立的任务,其中列中断、USB数据传送这2个模块是HWI(硬中断)类型的任务,键盘模块属于PRD(周期性)任务(完成对键盘定期扫描),其余模块是SWI(软中断)类型的任务。初始化任务完成对DSP的初始设定后就删除;列中断任务负责给DSP发送列数据来临信息,触发列平均、列自适应任务,完成对一列数据的去噪处理;列计数模块完成对列中断的计数,当到达一帧时,发送帧中断,触发一系列针对帧的数据处理任务;整个软件系统的执行流程如图2所示。

  DSP/BIOSⅡ作为一种商用的操作系统,提供给便于使用的图形配置界面。使用图形界面可以帮助开发者快速开发程序,不必写繁琐的初始化程序,而可以用图形界面配置后让编译器自动生成。比如对于串行口(MCBSP)的设置就需要配置中断源、数据格式、收发频率等十几个寄存器,麻烦而且容易出错,但是如果使用图形界面来设置,一切就容易多了。图形配置界面不仅可以完成对硬件资源的设置,还可以对任务、信号量进行初始化,完成了他,也就完成了使用DSP/BIOSⅡ的第二步工作。完成各个线程程序的编写之后,编译并载入DSP中运行。DSP首先初始化,然后从MAIN()函数跳入任务循环队列,按照优先级执行队列中的任务,而任务一般都是无限循环的,只被特定的信号量挂起。
  DSP/BIOSⅡ提供了强大的分析调试工具。除了常用  的方法之外,CPU负载图和执行图是两种非常有效的方法。CPU负载图提供的是目标CPU的负载曲线。CPU负载的定义是除去执行最低优先级任务以外的时间量。最低优先级任务是只在其他线程都不运行时才执行的任务。因此,CPU负载图包括从目标向主机传送数据和执行附加后台任务所需的时间。在执行图中,可以看到各个线程的活动方式。图形中还包括了信号量的活动,周期性函数标记(tick)和时钟模块标记。执行图能从整体上看到项目所有线程的活动状态。根据调试得到的信息可以评估线程的执行情况和CPU的负荷情况,配合其他调试工具,修改设计直到完成项目的功能需要。
  CPU负载图反映的是软件系统所需要的性能和CPU实际最大性能的比值,像PC机上性能统计图,如果所需的性能大于DSP的实际性能,就必须修改设计、优化算法、加快时钟频率,甚至更换性能更高的DSP芯片。
  执行图显示了各个任务执行过程中的细节信息,对于嵌入式应用而言,实时性是非常重要甚至是必须满足的条件,操作系统按很小的间隔进行调度就是力图保证系统响应的实时性。但是在实际中,如果任务分配不好,使得任务不能在调度间隔内完成,就会影响整个系统的实时性,这时,必须对任务划分作合理的修改。比如本系统中对一列数据的去噪处理,原先是等到一帧数据来到后再做的,仿真中发现这样使得一帧间隔内所要执行的任务过多,DSP无法完成,所以将数据的预处理改到每一列去做,保证系统的实时性。

4 DSP/BIOSⅡ操作系统使用中要注意的问题
  (1)很好地使用DSP/BIOSⅡ的关键在于很好地理解操作系统,这有点像算法理论和应用算法的关系。操作系统凝聚了软件领域几十年发展中的精华,有很多概念和结构是需要很深入的理解和思考的,所以,初学者一定得反复看看一些专门讲操作系统的书籍。
  (2)任务必须写成下面2种形式之一。
 
 
  在DSP/BIOSⅡ开发环境里没有要求显示调用OSTaskDel(),这是因为开发环境自动做了处理,实际原理都是一样的。

5 结语
  本文对探地雷达信号处理机的硬件结构和软件设计都做了介绍,重点介绍了如何在项目应用中使用DSP/BIOSⅡ实时嵌入式操作系统。实时嵌入式操作系统在国外得到广泛的应用,已成为嵌入式系统设计中必不可少的一部分,但是在国内高校,以DSP为核心的嵌入式平台中,嵌入式操作系统的应用很有限。所以快速利用这方面的最新技术,提高嵌入式系统开发的层次和深度是刻不容缓的。


参考文献


[1]TI.TMS320 DSP/BIOSuser′s guide.SPRU423,February,2001.
[2]TI.TMS320C5000 DSP/BIOSapplication programming interface(API)reference guide.SPRU404C,April,2001.
[3]邵贝贝.UC/OS-Ⅱ---源码公开的实时嵌入式操作系统[M].北京:中国电力出版社,2001.
[4]刘树军.TMS320C55x嵌入式实时多任务系统DSP/BIOSⅡ[J].嵌入式系统,2002,(5).

系统分类: DSP
用户分类: DSP/BIOS
标签: 无标签
来源: 转贴
发表评论 阅读全文(359) | 回复(3)

0

关于投票
实时操作系统DSP/BIOS在DSP开发中的应用(转帖)
实时操作系统DSP/BIOS在DSP开发中的应用
hc360慧聪网电子行业频道 2003-09-10 11:12:09
摘  要:本文介绍了实时操作系统DSP/BIOS在DSP开发中的应用。首先简述了DSP应用的一般模型,并说明了实时操作系统在DSP外设管理,实时性能分析,程序总体流程控制中的应用。
关键词: 实时操作系统;DSP/BIOS;DSP;信号采集与处理

引  言:
  信号采集与处理系统的一般结构是前端模数转换部分将现实世界的模拟信息经过采样量化,转换成数字量后送入数字信号处理系统做具体的算法处理。可以发现,不同应用领域中的信号采集和处理系统的实现结构都是相似的,区别主要在于模数部分采样频率要求不同,以及具体应用的算法差异。所以在当前的技术条件下,实现通用的高速信号采集与数据处理系统结构,有着广泛的工程应用前景。

硬件模型
  根据TI公司提供的对比数据,价格仅5美元的TMS320VC5402芯片实时信号处理能力相当于主频为700MHz的奔腾III处理器。为了充分利用DSP在嵌入式实时处理中的强大能力,针对不同的应用,设计了通用的信号采集处理系统。本系统硬件结构如图1。适用于采样率低于500KHz的系统,运算能力100MIPS ,有64KB节程序空间,64KB数据空间。
系统的各个模块的功能和工作原理如下所述:采用VC5402的多通道同步串口(MCBSP)控制ADC/DAC,采样频率一般低于500KHz的系统,高于500KHz的串行ADC/DAC很少,如果需要很高的采样率就需要用并行ADC/DAC,并且作为I/O或者数据空间设备访问。

  54X系列DSP的同步串口MCBSP包括时钟信号线,数据信号线,帧信号线。由于MCBSP比一般的串口标准应用更灵活,传输数据率更高。采用MCBSP控制串行模数转换器的原理如图2所示。

  DSP通过MCBSP接口控制串行ADC,当芯片18引脚片选信号有效时,MCBSP以BSPCLKR0为基准时钟给串行ADC的输入DIN引脚输入控制指令ADDIN,指示串行ADC采样CH0~CH7中指定通道的信号。串行ADC一旦完成了采样保持与转换,即给MCBSP的帧信号引脚(BSPFSR0)发出有效信号,MCBSP根据帧信号指示开始采集串行ADC DOUT引脚串行输出的数字量数据。

  通过MCBSP控制串行ADC采集数据具有设计简捷和软件实现方便的优点。可以利用DSP的DMA控制器操作MCBSP的数据发送与接收,使得对DSP的运算资源占用率降到最小。

图1 VC5402全系统结构框图



图2  串行ADC与DSP的MCBSP连接图



DSP/BIOS 实时操作系统介绍
  TI公司的DSP开发软件包括集成开发系统(CCS), 实时操作系统(DSP/BIOS),第三方算法库标准(eXpressDSP)。下面重点介绍DSP/BIOS。

  对于不同的系统应用需要采用定制信号处理算法。使用实时操作系统开发DSP算法,方便快捷,程序思路清晰,便于代码调试和重用,但是目前国内的DSP实际应用中,开发者往往被DSP/BIOS表面上的繁琐迷惑,对繁多的实时操作系统文档望而却步,仍然采用与早期单片机开发一样的手工汇编或者C代码编译的开发方式,将DSP/BIOS的强大的开发和管理能力搁置,实在是一件很可惜的事情。作者从所做的项目中总结使用经验,帮助大家了解如何利用DSP/BIOS开发TI公司的DSP系统。下文首先简短介绍DSP/BIOS的基本情况,然后以常见的应用开发为例具体说明DSP/BIOS的使用。

  DSP/BIOS是一个用户可剪裁的实时操作系统,主要由三部分组成:多线程实时内核;实时分析工具;芯片支持库。利用实时操作系统开发程序,可以方便快速的开发复杂的DSP程序。操作系统维护调度多线程的运行,只需将定制的数字信号算法作为一个线程嵌入系统即可;芯片支持库帮助管理外设资源,复杂的外设寄存器初始化可以利用直接图形工具配置;实时分析工具可以帮助分析算法实时运行情况。

    DSP/BIOS以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁。实际应用中需要的定制算法作为一个线程插入DSP/BIOS的调度队列,由DSP/BIOS进行调度。

DSP/BIOS 实时操作系统应用
DSP/BIOS实时操作系统的图形配置界面包括:
* 全局设置(System)—包括内存端设置、锁相环设置、中断向量入口设置等;
* 调试工具(Instrumentation)—记录器(LOG)可以提供调试信息,但是特别针对实时操作优化;
* 操作系统调度工具(Scheduling)—包括定时器、周期器、硬件中断管理、软件中断管理、任务调度、系统空载任务函数;
* 同步机制(Synchronization)
—提供一般操作系统都具有的信号灯、邮箱、队列、锁四个工具;
* 主机交互接口(Input/Output)
—提供DSP实时运行时与主机通过仿真口和CCS交互数据的机制;
* 芯片支持库(Chip Support Library)—针对不同的DSP芯片帮助配置DSP的外设资源,最常用的有DMA、MCBSP的配置。

  前面已经提到,采用DSP/BIOS的CSL可以帮助开发者快速开发管理外设的程序。举例来说,原本对于MCBSP的控制需要配置引脚定义、中断源定义、发送数据格式、发送数据长度、接收数据格式、接收数据长度、收发频率发生器控制等多个寄存器,繁琐而且容易发生错误。但是如果采用CSL控制MCBSP的开发将会大大加快程序开发与调试。

  将DSP/BIOS操作系统根据自己的需要剪裁完毕,形成配置文件,然后在此基础上将自定义的算法与控制程序作为线程插入任务循环。编译载入DSP开始执行后,DSP首先进行初始化,然后从MAIN()函数跳入任务循环队列,按照优先级执行队列中的任务。DSP外部的设备(如UART、ADC等)可以通过中断打断任务,DSP/BIOS根据硬件中断管理(HWI)中的设置调用相应的中断服务程序处理中断。这就是DSP/BIOS开发与执行的大致流程。

  为了验证算法实时性,用快速傅立叶变换为例说明。用定时器调度做1024点FFT运算,每秒调用1000次FFT。利用DSP/BIOS的实时分析工具时FFT实时运行只占用DSP运算资源不到20%。1024点FFT需要25716个指令周期,453个程序空间字,1517个数据空间字。足以说明DSP系统的强大的实时信号处理能力。

图3 信号采集与压缩算法流程

由DSP/BIOS的实际系统开发的完整程序实例如下所述:
  利用前面所述的硬件系统采集外部信号源数据,采样频率10KHz,MCBSP控制串行ADC,DMA控制器将MCBSP中数据送入DSP数据空间,DSP利用行程编码算法实时压缩采集到的数据。DSP/BIOS程序流程图如图3。
  使用的ADC的精度为12位,而DSP中数据空间为16位宽,为此设计的行程编码压缩算法的思想是,比较前后数据,利用闲置的4位数字存储相邻的数据。图3中可以看出,程序从MAIN()函数出来后进入DSP/BIOS的任务调度队列无限循环,键盘中断和DMA结束中断使得任务调度队列调度相应的中断处理函数。定时器中断定期给ADC发送控制字,以此控制ADC的采样频率和工作模式。键盘中断指示本次DMA操作结束后进行压缩,DMA结束中断处理程序,调用压缩算法对DMA结束后采集到的数据进行压缩。

DSP/BIOS实时操作 系统学习步骤
上面的几个例子分别说明了DSP/BIOS的图像开发环境,实时分析工具,调度流程。DSP/BIOS的学习步骤可简单总结为:
1. 了解DSP/BIOS术语,工作机制;
2.  用CSL管理DMA,MCBSP,TIMER,编写试验程序。以上程序都可以基于DSP片内资源,这样可以防止硬件设计的错误,专注于软件的学习与开发;
3 . 进一步了解DSP/BIOS占用空间的优化,以及DSP/BIOS中不同部分占用DSP运算资源的情况,以此为基础优化自己的程序。
通过我们的介绍,希望广大DSP开发人员能够早日认识到DSP/BIOS在DSP 开发应用中的优越性能,尽快掌握这一开发工具,更好的应用到工程实践中去。
系统分类: DSP
用户分类: DSP/BIOS
标签: 无标签
来源: 转贴
发表评论 阅读全文(205) | 回复(0)

0

关于投票
谈谈DSP实时多任务操作系统(转帖)

关于DSP实时多任务操作系统在国外已经广为大家应用,但在国内大家迟迟接受不了这种基于DSP操作系统的概念,往往被基本输入输出BIOS所困扰,大家可以想想:为什么计算机上有了主板的BIOS,还需要一个DOSwindows?

有专家认为:在未来的几年内,DSP系统的发展为几乎所有的电子设备注入了新的活力,由于迅速发展的Internet和非常廉价的微处理器的出现,DSP系统将在我们的日常生活里形成一个更大的应用领域。消费电子、交通运输/汽车、电信服务/网络工业都表现出对这个市场的关注,DSP RTOS将继续保持迅速的增长。

电子工业出版社出版了一本书《DSP实时多任务操作系统》,这本书以目前流行的TMS320C2000系列数字处理器件和易于学习开发的DSP RTOS嵌入式操作系统为核心,结合编者多年开发研制工作实践,介绍基于DSP芯片的DSP RTOS操作系统的移植和应用实例,大家可以看看,我个人认为这是一本非常不错的书。另外在DSP上使用的其他操作系统也有很多,比如VxworksuCos-iiuCLinux等等大家不妨在设计自己的应用系统时这情考虑,拥有了操作系统将大大加快您的开发节奏和设计水平。

目前,DSP实时操作系统的品种较多,据统计,仅用于信息电器的DSP操作系统就有10种左右,其中较为流行的主要有:CY- DRTOS VxWorkspSOS。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。通过对比和使用,我个人比较欣赏CY-DRTOS,因为它有很多优点。

1、编程方便:为编制程序提供了一个简单的、快捷的操作平台。

2、许多底层的工作都由操作系统完成:任务的切换,任务之间的消息传递,任务之间的协同工作都由操作系统完成。

3、提高系统的实时性:因为是一个多任务(64个优先级不同的任务)实时操作系统,所以CPU的工作效率最高。在同等时间内,多任务系统可以完成更多的功能,而传统的编程方法是不可能的。

4、方便调试:因为每一个任务就相当于一个独立的计算机,调试一个任务是非常方便的,每一个任务都是互相独立的。

5、便于软件的维护:多年后拿出自己的程序,思路仍然很清晰,任务很明确。

便于软件的扩展:当需要扩展某些应用时可以非常容易。

6、公开全部的源代码,不必担心知识产权和会有隐藏的秘密在里面,适用于军方的各种应用产品。

7、确定性:全部的函数调用与服务的执行时间是可知的,系统服务的执行时间不依赖于应用程序任务的多少。

8、系统服务功能强大,如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断嵌套层数可达255层。