DSP范文10篇

时间:2023-03-21 03:00:50

DSP范文篇1

1多个外设的情况

当DSP与低速器件接口时,可以通过设置DSP片内的等待状态产生控制寄存器(WSGR),在相应的程序空间、数据空间或I/O空间产生1~7个等待周期,以使DSP的访问速度能和低速器件相匹配。当在同一空间内既有低速器件又有高速器件时,通常WSGR的延时值被设置成与速度最慢的器件相一致,以保证DSP对所有的器件都能进行正确的访问。若对高速器件的操作很频繁,则这种对整个空间的延时将极不合理地降低系统速度。例如,有些系统在程序空间同时扩展有RAM和ROM。而ROM的速度一般远远低于RAM,其访问周期一般为100~200ns,即使DSP和RAM的访问速度均可达到25ns,但对整个数据空间进行延时后,DSP也只能以ROM的访问速度(100~200ns)对RAM进行访问。

在这种情况下,首先应考虑使用软件方法提供效率。其方法是默认的情况下将WSGR设置成与高速器件一致,当要访问低速器件时再修改WSGR的值。DSP常常对外部件进行连续操作,在这种情况下,软件方法还是比较有效的。但最大问题在于增加了软件负担和不稳定因素。

显然,效率最高的情况是,既不需要修改WSGR,DSP又能以外部器件本身的速度对它们进行访问。事实上,只要能够产生适当的信号控制DSP的READY端,就可以达到这个目的。DSP在开始一个外部总线的操作后,会在每一个CLKOUT信号(DSP的时钟输出)的上升沿时刻对READY端进行查询,若READY为低,则保持总线的状态不变,然后在下一个CLKOUT上升沿时刻两次查询,直至查询到READY为高时结束本次总线访问。

下面的设计实例中介绍的硬件等待电路(见图1)能够实现这个功能。它针对不同的外部器件产生相应的等待信号送到DSP的READY端,实现硬等待。其核心器件采用了广泛应用的通用逻辑阵列(GAL),GAL的引脚定义与图1相对应。使用GAL器件使硬件设计变得简单而灵活,可以完成比较复杂的逻辑关系。

例如,频率为50MHz的DSP在数据空间外扩有RAM和ROM各一片,访问周期分别为70ns和150ns,地址空间分别为0x8000~0x8fff和0x9000~0x9fff。由DSP的主频可知,对RAM和ROM的访问各需插入3个和7个等待周期。下面给出GAL源文件的关键部分(它们使用汇编程序FM的格式编写):

Q0:=/Q0/RD+/Q0/WR

Q1:=/Q0Q1/RD+Q0/Q1/RD+/Q0Q1/WR

+Q0/Q1/WR

Q2:=/Q1Q2/RD+/Q0Q1Q2/RD+Q0Q1/Q2/RD

+/Q1Q2/WR+/Q0Q1Q2/WR+Q0Q1/Q2/WR

;构成一个三位的二进制计数器

;Q2为最高位、Q0为最低位

;对读信号或写信号的宽度进行计数

GAL_READY.OE=VCC

/GAL_READY=/DSA15/A14/A13/A12/Q1+/DSA15/A14/A13A12Q1/A0

;为RAM的访问插入3个周期

+/DSA15/A14/A13A12/Q0

+/DSA15/A14/A13/Q1

+/DSA15/A14/A13A12/Q2

;为ROM的访问插入7个周期

图2是一个与写时序对应的时序图,其中在下三角符号标出的时刻,DSP对READY端进行查询。

这种方法能够充分使用硬件的速度,并且对软件是透明的,不会增加编程人员的负担。

图3DSP与SJA1000的接口原理图

2总线不兼容的情况

有一类芯片的总线接口是分时复用的,如CAN总线控制器SJA1000。SJA1000有8位的数据和地址复用的总线,可以和多种MCU直接相连。一次总线操作开始时,总线先传递此次操作访问的地址,在ALE信号将地址锁存后,再进行数据读写。而DSP的数据总线和地址总线被并行地引出,这种并行结构比分时复用的串行结构先进,有着高一倍的带宽。但DSP被设计时并没有考虑过会在芯片外将并行的总线再串行化,也就是没有设计相应的辅助信号来完成这种转换。这使得完全使用硬件方法进行串行转换比较困难。

此类问题通常使用软件和硬件配合解决,并不真正地靠硬件进行园,而是把一次总线操作分解成两步。先把此次操作的目标地址作为数据送到总线上,同时通过硬件产生一个锁存信号将其锁存。然后再进行读写操作,读写操作的目标地址就是上一步被锁存的地址。

使用这种办法,硬件和软件都不需要进行复杂的变换。唯一的缺点是指令的效率变低了。由于SJA1000的读写周期一般是DSP的指令周期的几倍,一次访问被分解成两次后多消耗的时间不能忽略。还有一个更重要的影响是,这种转换方法在寻址时无法使用DSP的并行寻址功能,必须使用另外的变量独立运行。在多数的CAN总线应用中,这种处理方法不会对系统的整体性能产生太大的影响。但在有的系统中,这种低效是不可容忍的,如由DSP和SJA1000组成的CAN总线网关,它含有多个SJA1000芯片,并且在SJA1000之间需要经常进行数据块的搬移。对于次数频繁并且寻址有规律的操作,利用DSP的并行寻址功能将极大地提高程序的效率。以下程序段可在两个同网段的SJA1000之间完成一帧消息搬移功能(它在每次操作的同时对下次操作的地址进行并行寻址):

Larar0,mlength;取消息的长度

Larar1,#SJA1_A;一个SJA1000中接收邮箱的首地址

Larar2,#SJA2_S;另一个SJA1000中发送邮箱的首地址

Mar,ar0

Mar-,ar1

Loop:;复制一帧消息

Lacl+,ar2

Sacl+,ar0

Banzloop,-,ar1

如果按下述方法改写这段程序,不仅对SJA1000的操作时间要增加倍,而且每次操作前都要对地址进行运算,使得完成同样功能的程序运行时间要增加到原来的3~4倍。

这时,只有使用纯硬件的解决方法才能获得理想的效果。设计的关键是生成合适的锁存信号ALE,使它能够满足SJA1000的时序要求。通过研究DSP控制信号的时序要吧发现,从地址建立到读写控制信号有效大约要经历二分之一个CPU时钟的时间,而SJA1000的ALE信号要求的最小宽度为8ns,因此对于主频在50MHz(CPU时钟为20ns)以下DSP,可以利用这二分之一个CPU时钟的时间间隔生成ALE信号。图3给出了含两片SJA1000的接口电路图。除了片选信号外,这两片SJA1000的总线和其它控制信号都连在一起。

假设SJA1000的片选地址为0X8xxx和0x9xxx,各引脚定义与图中对应,则GAL中的逻辑关系如下:

/ADDR_G=DSP_RDDSP_WRRDWR

/DATA_G=/DSP_DSDSP_A15/DSP_A14/DSP_A13ADDR_G

/WR=/DSP_WR/ALE

/RD=/DSP_RD/ALE

ALE=/DSP_DSDSP_A15/DSP_A14/DSP_A13

DSP_RDDSP_WR

/CS1=/DSP_DSDSP_A15/DSP_A14/DSP_A13

/DSP_A12ADDR_G

/CS2=/DSP_DSDSP_A15/DSP_A14/DSP_A13DSP_A12ADDR_G

对其中一片进行读写操作,则时序关系如图4所示。

其中,twr、tww分别为DSP读、写时的ALE信号宽度,它们都接近1/2个CLKOUT的周期。T为ALE的下降沿到RD、WR有效的时间,它由GAL翻转的延时产生,为10ns以上(注:本图中DSP的时序来自TMS320C24xxA系列,不同系列的DSP产品之间时序可能有细微的差别)。

DSP范文篇2

实际上,只有从芯片开始仔细设计,才能方便地实现多处理器系统的调节功能。这里选用的是AD公司新出品的SHARC级处理器ADSP21160。

ADSP21160具有很大的片内存储区、多重内部总线结构、独立的I/O子系统;具有构造多处理器系统的所有特点,能够真正支持处理器数目的可调节功能,十分适合组成高性能浮点的多DSP系统。

VxWorks是目前世界上用户数量最大的实时操作系统。这使它除了具有优越的技术性能之外,还具有丰富的应用软件支持、良好的技术服务和可靠的系统稳定性。由于它具有以上优点,本系统中选用了VxWorks作为MVME167的操作系统。

一、ADSP21160的特点

ADSP21160是AD公司采用超级哈佛结构的一种新产品。21160的汇编代码与2106x兼容,处理器具有SIMD(单指令流多数据流)功能;而2106x只具有SISD(单指令流单数据流)功能。为了充分利用这种新的功能,一些指令做了一些改变。ADSP21160包括1个100/150MHz的运算核、双端片内SRAM、1个支持多处理器的集成在片内的I/O处理器和多重内部总线以消除I/O瓶颈。

ADSP21160的汇编源代码与2106x兼容。SIMD计算结构:2个32bit的计算单元,其中每一个单元包括乘法器、ALU、移位寄存器及寄存器文件。具有完备的与设备接口功能。包括独立的I/O处理器、4Mbit的片内双端SRAM、可直接连接的多处理器特性及端口(串口、连接口、外总线及JTAG)。

ADSP21160包括2个运算处理单元,具有SIMD功能。处理单元指的是PEX和PEY。PEX始终是有效的,而PEY的有效是通过设置MODE1寄存器中的PEYEN位来实现的。当PEY模式有效时,同一条指令在2个处理器单元中都得到执行,但每一个处理器单元中的操作数不同。

SIMD模式在存储区和处理器单元之间的数据传输也是很有作用的。当使用SIMD模式,通过加倍数据带宽来保证处理器单元的操作。在SIMD模式,当使用DAGs来传输数据时,存储区每次访问所传输的是两个数据值。

ADSP21160包括4Mbit的片内SRAM,分为两块,每一块2Mbit。可以定义为不同字长的指令和数据存储。每一个存储块的双端口结构可以使存储块独立地被运算核处理和I/O处理器访问。21160的存储区最大可以容纳128K的32bit数据,或256K的16bit数据,或85K的48bit指令,或其他混合字长的数据,但总和最大为4Mbit。所有存储区可以16、32、48、64bit字长的字访问。外端口支持处理器与片外存储器及外设的接口,片外的4G地址空间属于21160的统一地址空间。

外端口支持同步、异步及同步BURST访问。DMA控制器的操作相对处理器运算核是独立和不可见的,即DMA操作可与执行指令同时进行。DMA传输可以在内部存储区与外部存储区、设备或主机之间进行。21160共有14个DMA通道,其中:连接口(linkport)占6个;串口占4个;外端口(externalport)占4个。21160可以通过DMA传输来下载程序,异步设备也可以通过DMA请求/应答线来控制2个DMA通道。

21160具有许多特点支持多DSP系统。外端口与连接口支持多处理器系统的直接连接,外端口支持统一的地址空间,允许DSP之间互相访问。片内具有分布式总线仲裁逻辑,最多支持6片21160和主机连接。外端口的最大数据传输率为400MB/s,广播写信号可以同时发

送到各片21160。6个连接口提供了另一种方法实现多处理器之间的通信。连接口的最高传输速率为600MB/s。

整个系统基于VME总线。VME总线系统作为最早的国际通用开放式总线,自1981年起,经历了近20年的发展。其影响不断扩大,功能不断完善,现已成为性能最好、应用最广的国际总线标准之一。

根据设计要求,采用了4片ADSP21160。片外共享内存SRAM可以被主机和各片DSP直接访问;EPROM用来存放初始化程序和各片DSP要运行的程序,在系统上电后这些程序被下载到各片DSP中;LEDs用来显示插件的状态,如reset、normal等。每一片都有1个连接口连到插件的前面板,这样前端采集来的数据就可以很方便地传输到多DSP上,而且也使数据的传输模式更加灵活。

连接口(linkport)是SHARC系列DSP芯片的一个特点。ADSP21160共有6个8bit连接口提供额外的I/O服务。在100MHz时钟下运行时,每个连接口可达100MB/s。连接口尤其适合多处理器间点到点的连接。连接口可以独立地同时操作,通过连接口的数据封装成48/32bit字长后,可以从片内存储区直接被运算核读取或DMA传输。每一个连接口有它自己的双缓冲I/O寄存器,数据传输可编程,硬件由时钟/应答握手线控制。4片DSP使用连接口实现DSP间两两互连。

21160的主机接口可以很方便地与标准微处理器总线(16/32bit)相连,几乎不需要额外硬件。主机通过21160的外端口对其进行访问,存储区地址映射为统一的地址空间。4个DMA通道可以用于主机接口,代码和数据传输的软件开销很小,主处理器通过HBR、HBG和REDY信号线与21160进行通信,主机可以对片内存储区进行直接读写。

二、开发环境Tornado

VxWorks的开发环境是WindRiver公司提供的Tornado。Tornado采用主机-目标机开发方式,主机系统可采用运行SunSolaris、HP-UX以及Win95/NT的工作站或个人计算机,VxWorks则运行在Intelx86、MC68K、PowerPC或SPARC等处理器上。Tornado支持各种主机-目标机连接方式,如以太网、串行线、在线仿真器和ROM仿真器。

Tornado的体系结构使得许多强有力的开发工具可以用于各种目标机系统和各种主机-目标机连接方式下,而不受制于目标机的资源和通信机制。同时VxWorks具有良好的可剪裁性。因此它适用于各种嵌入式环境的开发,小到资源极其有限的个人手持式设备如PDA(PersonalDigitalAssistant);大到多处理机系统,如VME系统。

Tornado可提供一个直观的、可视化的、用户可扩充的开发环境,极大缩短了开发周期。同时,由于Tornado是一个完全的开放系统,使得集成第三方开发工具变得十分容易。

主机与目标机之间的通信是通过运行各自处理器上的进程来完成的,使主机上的开发工具和目标机的操作系统可以完全脱离相互连接的方式。

为了摆脱主机-目标机通信带宽和目标机资源的限制,Tornado将传统的目标机方的工具迁移到主机上,如shell、loader和符号表等。这样,系统不再需要额外的时间和带宽在主机和目标机之间交换信息,降低了对连接带宽的需求,也避免了目标机的资源(如内存)被工具或符号表大量占用,使得应用程序拥有更多的系统资源。同时这种迁移也使得各种主机开发工具独立于目标机存在,从而使同一主机平台上的工具可以用于所有的目标机系统。

作为一个应用软件开发环境,Tornado提供了友好的可视化开发界面、交叉编译环境、源码级调试工具、目标机命令解释器和目标机状态监视器等多种应用工具,为应用软件开发提供了一个高效而可靠的平台。

三、程序设计

我们选用的DSP开发工具是AD公司提供的VisualDSP。这是一个集成开发环境,支持对SHARC系列DSP芯片的开发。实时操作系统VxWorks的开发工具是WindRiver公司的Tornado集成开发工具。VisualDSP可以C语言或汇编语言编

写的DSP代码,最新版本的VisualDSP还支持C++。它还有1个优点,就是可以编译多片DSP的源代码,并产生下载文件,这就可以很方便地进行多DSP系统的软件模拟。

ADSP21160阵列的设计结构使它既可以构成单指令流多数据流(SIMD)的并行处理机,也可以构成多指令流单数据流(MISD)或多指令流多数据流(MIMD)的流水线处理机,视用户的要求而定。这两种并行方案的选择,简单来说就是选择分割数据流还是分割处理工序。SIMD方案的原理如图1所示。

以下介绍我们实验室承担的水声信号处理系统。本系统以VME总线为系统开发平台,前端调理模件、模数转换模件和前端控制模件等为VME插件,采用SHARC级DSP芯片阵列完成声纳信号实时处理,基于嵌入式实时操作系统VxWorks及X窗口系统的中央控制和显示。

图2是4片DSP的任务分配图。从前端采集来的信号,经波束形成和复解调,再经过窄带滤波后的信号分为两路,一路送去进行幅度检波,一路做频域处理。幅度检波就是对复信号求模,根据信号幅度判决有无目标存在。频域处理分两种情况:当发射信号为单频脉冲时,进行功率谱估计,然后根据多普勒频移估计目标速度;当发射信号为双曲调频信号时,进行相关处理。

声纳综合数据处理主要包括主动声纳信号处理和被动声纳信号处理。其中,主动声纳信号处理又根据发射信号的不同,分为非相干处理、相干处理、功率谱处理。声纳综合数据处理主要完成:目标自动检测、目标参数测定和动目标跟踪。

四、操作流水线

操作流水线是模块内数据计算与I/O的流水线,物理上表现为CPU与I/O端口的DMA之间的并行。在前端处理中由于数据率高,通信开销很大。以通信任务最为繁重的复解调和多普勒补偿模块为例,输入数据率为2Mw/s,输出数据率为4Mw/s,高速连接口LinkPort最高速率为100Mw/s,如果采用串行传输的话,通信时间就将占用60%以上的处理时间,计算时间显然严重不足。所以必须采用并行执行,流程图如图3所示。这也是一种异步流水线方式,每次传送和计算完成都须要设置标志以通知下一操作。

结束语

在VxWorks实时操作系统下,4片ADSP21160上的程序已经通过模拟输入和系统测试。采用SHARCDSP阵列能够很好地完成声纳信号实时处理,每一片DSP至少有10%的计算裕量,基本达到设计要求。

送到各片21160。6个连接口提供了另一种方法实现多处理器之间的通信。连接口的最高传输速率为600MB/s。

整个系统基于VME总线。VME总线系统作为最早的国际通用开放式总线,自1981年起,经历了近20年的发展。其影响不断扩大,功能不断完善,现已成为性能最好、应用最广的国际总线标准之一。

根据设计要求,采用了4片ADSP21160。片外共享内存SRAM可以被主机和各片DSP直接访问;EPROM用来存放初始化程序和各片DSP要运行的程序,在系统上电后这些程序被下载到各片DSP中;LEDs用来显示插件的状态,如reset、normal等。每一片都有1个连接口连到插件的前面板,这样前端采集来的数据就可以很方便地传输到多DSP上,而且也使数据的传输模式更加灵活。

连接口(linkport)是SHARC系列DSP芯片的一个特点。ADSP21160共有6个8bit连接口提供额外的I/O服务。在100MHz时钟下运行时,每个连接口可达100MB/s。连接口尤其适合多处理器间点到点的连接。连接口可以独立地同时操作,通过连接口的数据封装成48/32bit字长后,可以从片内存储区直接被运算核读取或DMA传输。每一个连接口有它自己的双缓冲I/O寄存器,数据传输可编程,硬件由时钟/应答握手线控制。4片DSP使用连接口实现DSP间两两互连。

21160的主机接口可以很方便地与标准微处理器总线(16/32bit)相连,几乎不需要额外硬件。主机通过21160的外端口对其进行访问,存储区地址映射为统一的地址空间。4个DMA通道可以用于主机接口,代码和数据传输的软件开销很小,主处理器通过HBR、HBG和REDY信号线与21160进行通信,主机可以对片内存储区进行直接读写。

二、开发环境Tornado

VxWorks的开发环境是WindRiver公司提供的Tornado。Tornado采用主机-目标机开发方式,主机系统可采用运行SunSolaris、HP-UX以及Win95/NT的工作站或个人计算机,VxWorks则运行在Intelx86、MC68K、PowerPC或SPARC等处理器上。Tornado支持各种主机-目标机连接方式,如以太网、串行线、在线仿真器和ROM仿真器。

Tornado的体系结构使得许多强有力的开发工具可以用于各种目标机系统和各种主机-目标机连接方式下,而不受制于目标机的资源和通信机制。同时VxWorks具有良好的可剪裁性。因此它适用于各种嵌入式环境的开发,小到资源极其有限的个人手持式设备如PDA(PersonalDigitalAssistant);大到多处理机系统,如VME系统。

Tornado可提供一个直观的、可视化的、用户可扩充的开发环境,极大缩短了开发周期。同时,由于Tornado是一个完全的开放系统,使得集成第三方开发工具变得十分容易。

主机与目标机之间的通信是通过运行各自处理器上的进程来完成的,使主机上的开发工具和目标机的操作系统可以完全脱离相互连接的方式。

为了摆脱主机-目标机通信带宽和目标机资源的限制,Tornado将传统的目标机方的工具迁移到主机上,如shell、loader和符号表等。这样,系统不再需要额外的时间和带宽在主机和目标机之间交换信息,降低了对连接带宽的需求,也避免了目标机的资源(如内存)被工具或符号表大量占用,使得应用程序拥有更多的系统资源。同时这种迁移也使得各种主机开发工具独立于目标机存在,从而使同一主机平台上的工具可以用于所有的目标机系统。

作为一个应用软件开发环境,Tornado提供了友好的可视化开发界面、交叉编译环境、源码级调试工具、目标机命令解释器和目标机状态监视器等多种应用工具,为应用软件开发提供了一个高效而可靠的平台。

三、程序设计

我们选用的DSP开发工具是AD公司提供的VisualDSP。这是一个集成开发环境,支持对SHARC系列DSP芯片的开发。实时操作系统VxWorks的开发工具是WindRiver公司的Tornado集成开发工具。VisualDSP可以C语言或汇编语言编

写的DSP代码,最新版本的VisualDSP还支持C++。它还有1个优点,就是可以编译多片DSP的源代码,并产生下载文件,这就可以很方便地进行多DSP系统的软件模拟。

ADSP21160阵列的设计结构使它既可以构成单指令流多数据流(SIMD)的并行处理机,也可以构成多指令流单数据流(MISD)或多指令流多数据流(MIMD)的流水线处理机,视用户的要求而定。这两种并行方案的选择,简单来说就是选择分割数据流还是分割处理工序。SIMD方案的原理如图1所示。

以下介绍我们实验室承担的水声信号处理系统。本系统以VME总线为系统开发平台,前端调理模件、模数转换模件和前端控制模件等为VME插件,采用SHARC级DSP芯片阵列完成声纳信号实时处理,基于嵌入式实时操作系统VxWorks及X窗口系统的中央控制和显示。

图2是4片DSP的任务分配图。从前端采集来的信号,经波束形成和复解调,再经过窄带滤波后的信号分为两路,一路送去进行幅度检波,一路做频域处理。幅度检波就是对复信号求模,根据信号幅度判决有无目标存在。频域处理分两种情况:当发射信号为单频脉冲时,进行功率谱估计,然后根据多普勒频移估计目标速度;当发射信号为双曲调频信号时,进行相关处理。

声纳综合数据处理主要包括主动声纳信号处理和被动声纳信号处理。其中,主动声纳信号处理又根据发射信号的不同,分为非相干处理、相干处理、功率谱处理。声纳综合数据处理主要完成:目标自动检测、目标参数测定和动目标跟踪。

四、操作流水线

操作流水线是模块内数据计算与I/O的流水线,物理上表现为CPU与I/O端口的DMA之间的并行。在前端处理中由于数据率高,通信开销很大。以通信任务最为繁重的复解调和多普勒补偿模块为例,输入数据率为2Mw/s,输出数据率为4Mw/s,高速连接口LinkPort最高速率为100Mw/s,如果采用串行传输的话,通信时间就将占用60%以上的处理时间,计算时间显然严重不足。所以必须采用并行执行,流程图如图3所示。这也是一种异步流水线方式,每次传送和计算完成都须要设置标志以通知下一操作。

DSP范文篇3

在DOS下编程,将声音转化为数据记录下来,或将数据转化为声音,通过声卡上配置的喇叭回放出来,是一项很有实用价值和开发魅力的技术。时下流行的声卡,如SoundBlasterPro及其兼容卡,都配有数字声音处理器DSP芯片(DigitalSoundProcessor),专门用于对声音进行数字记录及回放,是声音数字处理的基础硬件。而WAV文件、VOC文件等,则都是这些数据记载的具体形式。Creative公司为了方便用户,提供了一组CT-Voice驱动程序,专门针对VOC文件,作为开发利用DSP功能的软接口,使用比较方便。但是,也造成了某些限制。对于开发者而言,直接对DSP硬件编程,实现其功能,也许是更有吸引力的。

声音,无论是从扬声器输出的,还是从话筒输入的,都是模拟量。

而数据,无论是内存里操作的,还是磁盘上存储的都是数字量。因此,微机处理声音,大多离不开ADC与DAC两种转换。由于声音数据的数据量比较大,在声音的数字处理中,除直接由CPU进行传输外,批量数据常采用DMA方式传输,以节省较多的CPU时间。

总括起来,ADC与DAC两种转换方式,直接传输和DMA传输这两种传输方式,再加上不同的压缩方式,如喇叭控制、静寂等等,所有这些的不同组合,就构成了DSP的各种功能。根据DSP的硬件原理,其各种功能都规定了一定的操作步骤。

一、DSP编程要点

在DSP编程中,主要注意命令与端口两个层次的操作。

1.DSP命令。DSP的功能一般以一个操作码(称作命令号)的写操作为中心,按规定的步骤,配合若干必要的辅助操作,构成一串操作的组合,称为DSP命令。如8位直接播放功能命令号为10h,8位直接录音功能命令号为20h,喇叭的通断功能命令号分别为d1h与d3h等等。

2.端口操作。DSP命令主要靠端口操作来实现。端口操作包括DSP初始化、写DSP命令(即发DSP命令)、读DSP状态参数、DSP中断等。所涉及的端口地址及相应的用途如表1。

表1DSP端口及用途

端口地址由基址2x0h加6、0ah、0ch、0eh等形成,其中,x可取值1、2、3、4、5、6等,具体情况随硬件设置而定,多数卡在出厂被默认设置为2,即基址为220h。通过跳线,可改变此值,避免与其它设备口地址冲突。

二、编程实例

DSP的功能是比较丰富的,限于篇幅,本文只简要介绍其中的8位直接播放功能,由此举一反三,其它功能的用法不难得知。各功能的规定操作可参考文献1和2。

1.命令操作步骤。8位直接播放功能的操作步骤如下:

·写命令号10h;

·写数据字节(即播放声音的8位数据);

·按采样率所需时间周期延时。

以此三步操作为循环体,进行n次循环,即完成播放。其中,n为声音数据字节数。

2.2xch端口写操作。在DSP编程中,无论是发送命令,还是发送数据,都是通过写端口2xch来完成的。在写端口2xch之前,应先读此端口,直到所得值的bit7为0,这才表明此端口处于可写状态,才能进行写操作。此过程的c语言形式如下:

while(inportb(0x22c)&0x80);

outportb(0x22c,byte);

这里假定端口基址为220h。句中byte可以是命令号,也可以是数据。

3.定时器。为使播放按一定的采样率进行,需对数据发送进行定时控制。这一般是借用主机定时中断int8,将其调用频率提高到与采样率相当的程度,利用其监视、控制数据发送的时间,来满足播音频率的要求。关于定时中断的编程技术已有过许多介绍,限于篇幅,不再赘述,读读文后的程序清单,即一目了然。应该说明的是,对于CPU较慢的机型如386,由于计时代码本身的执行时间可能已经超过采样率对应的时间周期,定时控制就达不到预期的效果。这种情况下,用一个空循环来定时,调整循环次数,即可满足频率要求。此法的缺点是定时精度差,参数因CPU速度而异。所幸的是,目前多数配置多媒体的PC机,其CPU都在486以上。

4.内存利用。人耳可辨声音的最高频率可达20kHz以上,因此DSP的采样率至少也要达到与此相当的水平,而为了容纳立体声双声道信息,采样率还要再翻一倍。常见的WAV声音的采样率有44100、22050、11025等。在这么高的采样率下,声音的数据量自然很大,如44k采样率下,20秒的录音数据长达800多k。为在DOS常规内存内处理这种规模的数据,实例程序采取了分块处理的方式,将数据分成以当前剩余自由内存大小为单位的块,将其逐次读入,逐次处理。同时,由于C语言的read()函数每次读操作的字节数最多不过64k-1,因此,每一个分块又需分

若干次读入。实例表明,经此法处理的播放程序不受WAV文件长度的限制,笔者在Windows下录制的长达5M多的WAV文件(11k采样率,约8分钟)也照播不误。

5.声音文件。本文提供的程序实例其声音数据取自WAV文件,其实,对于VOC文件,本播放技术也一样适用,只不过数据的读取格式有所不同而已。关于WAV文件的格式,可参考文献3,VOC文件的格式参考献1和2。

实例程序用BorlandC++3.1编译,在配置OPTI386主板、海洋48

6主板及多种与SoundBlasterPro兼容声卡的兼容机上运行通过。

三、源程序清单

#include<io.h>

#include<dos.h>

#include<conio.h>

#include<stdio.h>

#include<fcntl.h>

#include<stdlib.h>

#include<string.h>

#include<alloc.h>

#include"timer.h"

#definen120

#definen2100

structWavHead

{

charriff[4];

longsize0;

charwavefmt[8];

longsize1;

intfmttag;

intchannel;

longsamplespersec;

longbytespersec;

intblockalign;

intbitspersample;

charflg[4];

}whead;

unsignedPort=0x210;

charFound=0;

unsignedcnt1,cnt2;

voidPortReset();

voidoutwave(un

signedcharhuge*,long);

voidWritePortC(unsignedchar);

voiderrexit(char*);

voidmain()

intfp;

unsignedn,r,nn,i,j;

charname[32];

longfermem,rr,datasize;

unsignedcharhuge*data,huge*p;

if(argc<2)errexit("missfilename\n");

strcpy(name,argv[1]);strcat(name,".wav");

fp=-open(name,0-RDONLY);if(fp=-1)errexit("Erroropenfil

e\n");

-read(fp,&whead,sizeof(WavHead));

if(whead.blockalign=1&&strncmp(whead.flg,"data",4)==0)

{

-read(fp,&datasize,4);//单声道WAV数据

}

elseif(whead.blockalign=2&&strncmp(whead.flg,"fact"

,4)==0)

{

lseek(fp,12l,1);

-read(fp,&datasize,4);//双声道WAV数据

}

elseerrexit("Errorfilestruct\n");

farmem=farcoreleft();

PortReset();//初始化DSP端口

Counter=0;//开始计时

SetTimer(NewTimer,44100);//调整时间中断频率

WritePortC(0xd1);//接通喇叭

if(farmem≥datasize)//数据量不超过内存容量

{

p=data=(unsignedcharhuge*)farmalloc(datasize);

n=datasize/32768;r=datasize%32768;

for(i=0;i<n;i++,p+=32768)-read(fp,p,32768);

-read(fp,p,r);

outwave(data,datasize);

}

else//数据量超过内存容量

{

nn=datasize/farmem;//分块操作的块数

rr=datasize%farmem;//最后一块的大小

n=farmem/32768;//每块read次数

r=farmem%32768;//read余零尾数

data=(unsignedcharhuge*)farmalloc(farmem);

for(i=0;i<nn;i++)//逐块处理

{

p=data;

for(j=0;j<n;j++,p+=32768)-read(fp,p,32768);

-read(fp,p,r);

//读入内存

outwave(data,farmem);//发送声音数据

}

p=data;

n=rr/32768;r=rr%32768;//最后块的操作

for(i=0;i<n;i++,p+=32768)-read(fp,p,32768);

-read(fp,p,r);

//读入

outwave(data,rr);//发送

}

WritePortC(0xd3);//断开喇叭

RestoreTimer();//恢复时间中断

farfree(data);

-close(fp);

}

voidPortReset()//初始化DSP端口

{

cnt1=n1;

while(Port≤0x260)&&!Found)

{//测端口基址

outportb(Port+6,1);

outportb(Port+6,0);

cnt2=n2;

while(cnt2>2&&inportb(Port+0xe)<128)--cnt2;

if(cnt2=0||inportb(Port+0xa)!=oxaa)

{

--cnt1;

if(cnt1==0)

{

cnt1=n1;

Port=Port+0x10;

}

}

elseFound=1;//找到基址

}

if(!Found)errexit("Resetfailed\n");//找不到基址

}

voidoutwave(unsignedcharhuge*p,longlen)

{//发送声音数据

longi;

intsmpl;

smpl=44100/whead.samplespersec/whead.blockalign;

//采样周期系数

for(i=0;i<len;i++)

{

WritePortC(0x10);//发送命令

WritePortC(p[i]);//发送数据

while(Counter<smpl);Counter=0;//定时

}

}

voidWritePortC(unsignedcharv)

{

while(inportb(Port+0xc)&0x80);//等待写有效状态

outportb(Port+0xc,v);//写端口(发送)

}

voiderrexit(char*msg)

{

-AX=3;

asmint10h

printf(msg);

exit(0);

}

//Timer.h

#includ<dos.h>

#defineOldTimerInt0x60

unsignedlongCounter;

unsignedCounterInt8,fpI8;

voidSetTimer(voidinterrupt(*Rout)(…),unsignedfreq)

{//设置新频率的定时中断

intICnt;

fpI8=(freq+9)/18;//新旧频率的倍数

asmcli

ICnt=1193180/freq;

outportb(0x43,0x36);

outportb(0x40,ICnt&255);

outportb(0x40,ICnt》8);

setvect(OldTimerInt,getvect(

8));//保存旧定时中断

setvect(8,rout);//置新的定时中断

samsti;

}

voidRestoreTimer()

{

asmcli

outportb(0x43,0x36);

outportb(0x40,0);

outportb(0x40,0);

setvect(8,getvect(OldTimerInt));//恢复原定时中断

asmsti

}

voidinterruptNewTimer(…)

{//新定时中断

REGPACKR;

Counter++;//给应用程序提供新频率的计数

if(--CounterInt8=0)

{

intr(OldTimerInt,&R);//按原频率走动时钟

CounterInt8=fpI8;//用新旧频率的倍数分频

}

elseoutportb(0x20,0x20);//退出中断

}

参考文献

1阎小兵等.多媒体开发工具.北京:电子工业出版社,1994.

DSP范文篇4

“DSP原理及应用”是一门应用型课程,具有内容多、综合性强等特点。如何在有限的教学时数内高质量地完成教学任务,使学生掌握关键技术并具备一定的应用能力是摆在每一位课程教师面前的重大课题。①该课程在我校的开设时间并不长,如何抓住教学重点以及改进教学方法,有效提高教学质量并培养符合市场需求的合格人才,这使得对DSP课程进行教学改革研究有重要的现实意义。

1DSP课程教学现状

(1)教学内容不够合理。DSP课程的总课时为30课时左右,由于课时少,加之该课程开设时间较短,较难找到合适的优秀教材。目前的教学基本是按照所选教材内容结构进行教授,很难激起学生的学习兴趣,难以达到教学目标。

(2)重理论轻实践,理论教学和实践教学脱节。某些专业的DSP课程实践学时不足10学时甚至更少,作为实践性很强的专业课,缺乏足够的实践确实很难达到理想的教学效果。而理论教学和实践教学脱节,无法充分利用有限的实践机会加深理解专业理论。

(3)考核方式过于死板。目前的考核方式多为试题考试加平时成绩,很少体现学生的实际动手能力,学生所掌握的理论与实际相脱离较为严重,存在“高分低能”现象。

(4)学生学习兴趣不高,缺勤现象严重。前面一系列原因导致学生学习兴趣不高,同时该课程的开设时间一般安排在大三下半学年或大四上半学年,学生由于就业和考研而忽略课程学习,经常出现到课率不高的情况。

针对DSP课程教学的特点和现状,国内许多高校的专家学者提出了课程改革的思路,并进行了有益的探索。②③在充分研究他人成果的基础上,结合我校DSP课程的现有条件和实际情况,通过研究教学内容的优化以及教学方法的改进,改善了我校该课程教学现状,提高了教学效果。

2优化DSP课程教学内容

(1)抓住CPU寄存器这条主线。提出寄存器是开发人员的“人机接口”,强调对CPU寄存器的讲解要详细到位,它作用就像这个芯片的摘要,涉及到课程的各个部分。学生对该部分进行很好的理解,将为后续内容的展开很有帮助,后续的讲解也要经常反复涉及到CPU寄存器。因此,抓住了这条主线,就能够很好地让学生从整体上把握该课程的学习。

(2)围绕DSP芯片的软硬件设计是以提高运算速度、适合数字信号处理算法为目的这一中心。学生在学习该课程时往往会产生这样的疑惑:DSP芯片硬件上为什么要采用MAC、EXP等特殊的单元电路?为什么指令系统中需要设计MAC、EXP等特殊指令?要消除这些疑问,在授课的过程中须经常提到DSP芯片是为数字信号处理算法而设计的,在这些算法中,要经常用到乘累加等运算,采用MAC这样的硬件单元可以在1个机器周期内完成一次乘累加运算,而正因为有了这样的硬件,在指令系统中才能设计MAC这样的单周期指令。如此介绍,可以理清学生学习的头绪。

(3)突出教学重点。DSP课程教学要做到面面俱到非常难,这样也很难取得好的教学效果。在DSP课程之前学生已经学习了微机原理、单片机等相关课程,这些课程内容与DSP有一些共性的东西可以稍稍提及。而对于能体现DSP特点和优势的知识点要做详细讲解,如在讲解寻址方式时,立即寻址、绝对地址寻址等常见方式可以简要介绍,而对于特殊的寻址方式如循环寻址和位倒序寻址则需要重点介绍。

(4)结合实际案例讲授。某些内容的授课需要结合实际案例才能讲解透彻,如在介绍软件开发过程这一内容时,如果不结合一个实际案例进行讲解,将汇编、链接及运行过程等内容都分裂开来介绍,学生将会难以理解。通过实际案例则可以将整个开发过程紧密地联系在一起来介绍,能够增加学生的学习兴趣,让其在解决问题的过程中一步步把软件开发的步骤掌握住。

3改进DSP课程教学方法

(1)增加教学过程中的互动,提高学生的学习主动性。在教学过程中适时设置问题,可以采用提问和简短课堂作业方式,学生不是一味被动的接受,在寻找答案的过程中转而主动去学习,提高了教学的效率。

(2)自行开发多媒体课件。DSP课程适合采用多媒体教学,虽然有些教材提供课件,但这些课件把大量的信息放在课件中,授课过程中学生只能被动接受,从而产生厌烦感觉,失去学习的兴趣。因此,授课课件务必结合讲义自行开发,以求做到简明扼要地介绍课堂讲授的内容,对于需重点介绍的内容,应该增加实例,将图表通过多媒体动画演示,使其变得通俗易懂,从而提高学生学习的兴趣和积极性。

(3)增加实践教学内容比重,将科研融入教学过程。在实践课时较少甚至没有的情况下,结合科研实际案例,将DSP方面的科研成果介绍给学生,将科研开发中遇到的问题和解决方案穿插在课堂进行讲授,使学生对DSP应用系统的开发有感性认识,并对学生的课外实践提供指导。

(4)改革考核方式。DSP课程是实践性很强的课程,单纯的试卷考试很难考核学生对该课程的掌握程度。应当着力研究试卷考核的内容和形式,如可以采用开卷形式,主要考核学生对知识的理解和掌握情况,而不是考一些“死记硬背”的内容。同时,可以增加实践能力考核内容,将其作为最终成绩的一部分。

DSP范文篇5

关键词:多通道缓冲串行口McBSPTMS320C5402μPD780308SPIDSP

1引言

随着信息技术革命的深入和计算机技术的飞速发展,DSP技术也正以极快的速度被应用到科技和国民经济的各信领域。在很多工程开发设计中,由于要求实现单片DSP与单片DSP、多片DSP芯片以及及其它处理芯片之间的通信,因此,怎样更高效、更便捷的实现这些通信,已成为广大DSP应用者首先要解决的一个问题。

本文根据笔者在工程应用和调试方面用TI的DSPTMS320C5402与NEC的μPD780308单片机进行通信的经验,介绍并讨论了将TMS320C5402DSP的多通道缓冲串行口McBSP(Multi-channelBufferedSerialPort)配置为SPI模式(即时钟停止模式),从而实现DSP与其它单片处理器之间的通信设计方法同时给出了实现方法的部分程序代码。

2多通道缓冲串行口McBSP

多通道缓冲串行口McBSP的功能是提供器件内外数据的串行交换。同以前的串口相比,McBSP串口具有相当大的灵活性。表1给出了有关TMS320C5402的McBSP管脚说明。其中串口接收、发送时钟和同步帧信号既可由外部设备提供,又可由内部时钟发生器提供,从而大大的提高了通信的灵活性。

表1TMS320C5402的有关McBSP管脚说明

管脚说明说明

DR数据输入端

DX数据输出端

CLKR接收数据位时钟

CLKX发送数据位时钟

FSR接收数据帧时钟

FSX发送数据帧时钟

CLKS外部提供的采样率发生器时钟源

3SPI协议中的McBSP时钟停止模式

SPI协议是以主从方式工作的,这种模式通常有一个主设备和一个或多个从设备,其接口包括以下四种信号:

(1)串行数据输入(也称为主进从出,或MISO);

(2)串行数据输出(也称为主出从进,或MOSI);

(3)串行移位时钟(也称为SCK);

(4)从使能信号(也称为SS)。

图1为设备的SPI接口示意图。该接口在工作时,主设备通过提供移位时钟和从使能信号来控制信息的流动。从使能信号是一个可选的高低电平,它可以激活从设备(在没有时钟提供的情况下)的串行输入和输出。在没有专门的从使能信号的情况下,主从设备之间的通信则由移位时钟的有无来决定,在这种连接方式下,从设备必须自始至终保持激活状态,而且从设备只能是一个,不能为多个。

TMS320C5402提供的时钟停止模式可用于SPI协议通信,当McBSP被配置为时钟停止模式时,发送器和接收器在内部是同步的,即可将发送数据帧时钟(FSX)用作从使能(即SS),而将发送数据位时钟(CLKX)用作SPI协议中SCK。由于收数据位时钟(CLKR)和接收数据帧时钟(FSR)在内部与FSX和CLKX是相连的,因此,该管脚不能用于SPI模式。

当McBSP被配置为一个主设备时,传送输出信号(BDX)被用作SPI协议的MOSI信号,而接收输入信号(BDR)则被用作MISO信号。图2所示为McBSP用作主设备时的SPI接口示意图。

同样地,当McBSP被配置为一个从设备时,BDX被用作MISO信号,BDR则被用作MOSI信号。图3为McBSP用作从设备的SPI接口示意图。

当TMS320C5402的McBSP被用于时钟停止模式时,寄存器SPCR1的CLKSTP位域和引脚配置寄存器的CLKXP位的配置如表2所列。

表2时钟停止模式配置

CLKSTPCLKXP说明

0XX不可用时钟停止模式。时钟被激活用于非SPI模式

100时钟开始于上升沿(无延迟)

110时钟开始于上升沿(有延迟)

101时钟开始于下降沿(无延迟)

111时钟开始于下降沿(有延迟)

4其它有关寄存器的配置

为了更好地掌握和了解McBSP作为SPI设备时的有关寄存器配置,现以McBSP作为SPI从设备来介绍有关McBSP的其它有关寄存器的配置,若McBSP做为SPI主设备,则相关配置正好相反。当McBSP作为SPI从设备时,主设备外部产生主时钟。CLKX引脚和FSX引脚必须被设置为输入。由于CLKX引脚和CLKR信号在内部相连接,因而传送和接收回路均由外部主时钟计时(CLKX)。同时,由于FSX引脚和FSR信号也已在内部连接,因此,CLKR引脚和FSR引脚不再需要外部信号的连接。

尽管CLKX信号由主设备外部产生且与McBSP同步,但是,McBSP的采样率发生器仍然必须正确启动SPI从设备,同时,采样率发生器还应被设置为最大速率(CPU时钟速率的一半)。另外,内部采样率时钟常被用来同步McBSP逻辑和外部主时钟以及从使能信号。每次传送时,McBSP一般在从使能信号的上升沿进行FSX输入。也就是说,在每次传送的开始,主设备必须维护使能信号,而在每次传送完成后,则必须消除从使能信号。在两次传送之间,从使能信号不能一直保持为高电平。对正确的SPI从设备而言,McBSP的数据延迟参数必须设置为0,在这种运行模式中,设置值为1或2没有定义。配置McBSP为从设备所需的寄存器位值如表3所列。

表3SPI操作模式下的寄存器位值表

位域值功能描述寄存器

CLKXM0配置BCLKX引脚为输入PCR

CLKSM1由CPU时钟产生的采样率时钟SRGR2

CLKGDV1为采样率时钟选择2的划分因素SRGR1

FSXM0配置BFSX引脚为输入PCR

FSGM0对每个包传送,BFSX信号被激活SRGR2

FSXP1配置BFSX引脚为活动低电平PCR

XDATDLY0为SPI从设备运行,必须为0XCR2

RDATDLY0为SPI从设备运行,必须为0RCR2

5程序设计

下面是有关TMS320C5402器件的McBSP各个控制寄存器的配置,该配置程序笔者在实践中已经过测试,并已成功运用在了某工程设计中。

VoidMcBSP1_Config(void)

{

offlset=0x0000;

SPCR11=0x1800;;配置串口时钟停止模式CLKSTP=10

offlset=0x0001;

SPCR21=0x0222;

offlset=0x0005;

SRGR11=0x00FA;

offlset=0x0007;

SRGR21=0xa00F;

offlset=0x0002;

RCR11=0x0040;;接收一帧含一字,一字含16位

offlset=0x0003;

RCR21=0x0044;接收数据无延迟RDATDLY=00

offlset=0x0004;

XCR11=0x0040;;发送一帧含一字,一字含16位

offlset=0x0005;

XCR21=0x0044;;发送数据无延迟XDATDLY=00

offlset=0x000E;

PCR1=0x000;;发送时钟由外部时钟驱动,CLKX为输入脚CLKX=0,发送时钟极性CLKXP=0,发送帧同步极性FSXP=1

offlset=0x0008;

MCR11=0x0001;

offlset=0x0009;

MCR21=0x0001;

offlset=0x000C;

XCERA1=0x0003;

offlset=0x0001;

SPCR21=0x0262;

offlset=0x0001;

SPCR21=0x0263;

offlset=0x0000;

SPCR11=0x1801;;接收器有效

offlset=0x0001;

SPCR21=0x02e3;;发送器有效

Return;

}

DSP范文篇6

关键词:DSP接口电路CAN控制器

近几年来,数字信号处理器(DSP)得到了广泛的应用。由于DSP采用程序空间和数据空间分离的哈佛结构,对程序和数据并行操作,使之成倍地提高了处理速度;再加上流水线技术,使得DSP的指令周期多为10ns级。而与之配套的器件却没有像DSP那样猛地发展。首先,DSP与器件之间的速度差异日益显著,大部分器件的读写周期在50ns以上,即使是最快的静态RAM,其读写周期亦为8ns左右,也只能与50MHz以下的DSP直接接口;其次,一些领域的器件在设计时并没有考虑与DSP接口,以至于不能直接接入DSP总线,如CAN总线控制器SA1000采用地址总线与数据总线分时复用的总线接口。这使得DSP与许多外部器件难以接口,特别是在与多个外部器件接口或者与总线不兼容的外部器件接口时,常常会出现因接口处理不当而导致接口效率低下的情况。当DSP对外部器件的操作频率很高时,接口效率的高低将对系统的运行速度产生不可忽略的影响。

1多个外设的情况

当DSP与低速器件接口时,可以通过设置DSP片内的等待状态产生控制寄存器(WSGR),在相应的程序空间、数据空间或I/O空间产生1~7个等待周期,以使DSP的访问速度能和低速器件相匹配。当在同一空间内既有低速器件又有高速器件时,通常WSGR的延时值被设置成与速度最慢的器件相一致,以保证DSP对所有的器件都能进行正确的访问。若对高速器件的操作很频繁,则这种对整个空间的延时将极不合理地降低系统速度。例如,有些系统在程序空间同时扩展有RAM和ROM。而ROM的速度一般远远低于RAM,其访问周期一般为100~200ns,即使DSP和RAM的访问速度均可达到25ns,但对整个数据空间进行延时后,DSP也只能以ROM的访问速度(100~200ns)对RAM进行访问。

在这种情况下,首先应考虑使用软件方法提供效率。其方法是默认的情况下将WSGR设置成与高速器件一致,当要访问低速器件时再修改WSGR的值。DSP常常对外部件进行连续操作,在这种情况下,软件方法还是比较有效的。但最大问题在于增加了软件负担和不稳定因素。

显然,效率最高的情况是,既不需要修改WSGR,DSP又能以外部器件本身的速度对它们进行访问。事实上,只要能够产生适当的信号控制DSP的READY端,就可以达到这个目的。DSP在开始一个外部总线的操作后,会在每一个CLKOUT信号(DSP的时钟输出)的上升沿时刻对READY端进行查询,若READY为低,则保持总线的状态不变,然后在下一个CLKOUT上升沿时刻两次查询,直至查询到READY为高时结束本次总线访问。

下面的设计实例中介绍的硬件等待电路(见图1)能够实现这个功能。它针对不同的外部器件产生相应的等待信号送到DSP的READY端,实现硬等待。其核心器件采用了广泛应用的通用逻辑阵列(GAL),GAL的引脚定义与图1相对应。使用GAL器件使硬件设计变得简单而灵活,可以完成比较复杂的逻辑关系。

例如,频率为50MHz的DSP在数据空间外扩有RAM和ROM各一片,访问周期分别为70ns和150ns,地址空间分别为0x8000~0x8fff和0x9000~0x9fff。由DSP的主频可知,对RAM和ROM的访问各需插入3个和7个等待周期。下面给出GAL源文件的关键部分(它们使用汇编程序FM的格式编写):

Q0:=/Q0*/RD+/Q0*/WR

Q1:=/Q0*Q1*/RD+Q0*/Q1*/RD+/Q0*Q1*/WR

+Q0*/Q1*/WR

Q2:=/Q1*Q2*/RD+/Q0*Q1*Q2*/RD+Q0*Q1*/Q2*/RD

+/Q1*Q2*/WR+/Q0*Q1*Q2*/WR+Q0*Q1*/Q2*/WR

;构成一个三位的二进制计数器

;Q2为最高位、Q0为最低位

;对读信号或写信号的宽度进行计数

GAL_READY.OE=VCC

/GAL_READY=/DS*A15*/A14*/A13*/A12*/Q1+/DS*A15*/A14*/A13*A12*Q1*/A0

;为RAM的访问插入3个周期

+/DS*A15*/A14*/A13*A12*/Q0

+/DS*A15*/A14*/A13*/Q1

+/DS*A15*/A14*/A13*A12*/Q2

;为ROM的访问插入7个周期

图2是一个与写时序对应的时序图,其中在下三角符号标出的时刻,DSP对READY端进行查询。

这种方法能够充分使用硬件的速度,并且对软件是透明的,不会增加编程人员的负担。

图3DSP与SJA1000的接口原理图

2总线不兼容的情况

有一类芯片的总线接口是分时复用的,如CAN总线控制器SJA1000。SJA1000有8位的数据和地址复用的总线,可以和多种MCU直接相连。一次总线操作开始时,总线先传递此次操作访问的地址,在ALE信号将地址锁存后,再进行数据读写。而DSP的数据总线和地址总线被并行地引出,这种并行结构比分时复用的串行结构先进,有着高一倍的带宽。但DSP被设计时并没有考虑过会在芯片外将并行的总线再串行化,也就是没有设计相应的辅助信号来完成这种转换。这使得完全使用硬件方法进行串行转换比较困难。

此类问题通常使用软件和硬件配合解决,并不真正地靠硬件进行园,而是把一次总线操作分解成两步。先把此次操作的目标地址作为数据送到总线上,同时通过硬件产生一个锁存信号将其锁存。然后再进行读写操作,读写操作的目标地址就是上一步被锁存的地址。

使用这种办法,硬件和软件都不需要进行复杂的变换。唯一的缺点是指令的效率变低了。由于SJA1000的读写周期一般是DSP的指令周期的几倍,一次访问被分解成两次后多消耗的时间不能忽略。还有一个更重要的影响是,这种转换方法在寻址时无法使用DSP的并行寻址功能,必须使用另外的变量独立运行。在多数的CAN总线应用中,这种处理方法不会对系统的整体性能产生太大的影响。但在有的系统中,这种低效是不可容忍的,如由DSP和SJA1000组成的CAN总线网关,它含有多个SJA1000芯片,并且在SJA1000之间需要经常进行数据块的搬移。对于次数频繁并且寻址有规律的操作,利用DSP的并行寻址功能将极大地提高程序的效率。以下程序段可在两个同网段的SJA1000之间完成一帧消息搬移功能(它在每次操作的同时对下次操作的地址进行并行寻址):

Larar0,mlength;取消息的长度

Larar1,#SJA1_A;一个SJA1000中接收邮箱的首地址

Larar2,#SJA2_S;另一个SJA1000中发送邮箱的首地址

Mar*,ar0

Mar*-,ar1

Loop:;复制一帧消息

Lacl*+,ar2

Sacl*+,ar0

Banzloop,*-,ar1

如果按下述方法改写这段程序,不仅对SJA1000的操作时间要增加倍,而且每次操作前都要对地址进行运算,使得完成同样功能的程序运行时间要增加到原来的3~4倍。

这时,只有使用纯硬件的解决方法才能获得理想的效果。设计的关键是生成合适的锁存信号ALE,使它能够满足SJA1000的时序要求。通过研究DSP控制信号的时序要吧发现,从地址建立到读写控制信号有效大约要经历二分之一个CPU时钟的时间,而SJA1000的ALE信号要求的最小宽度为8ns,因此对于主频在50MHz(CPU时钟为20ns)以下DSP,可以利用这二分之一个CPU时钟的时间间隔生成ALE信号。图3给出了含两片SJA1000的接口电路图。除了片选信号外,这两片SJA1000的总线和其它控制信号都连在一起。

假设SJA1000的片选地址为0X8xxx和0x9xxx,各引脚定义与图中对应,则GAL中的逻辑关系如下:

/ADDR_G=DSP_RD*DSP_WR*RD*WR

/DATA_G=/DSP_DS*DSP_A15*/DSP_A14*/DSP_A13*ADDR_G

/WR=/DSP_WR*/ALE

/RD=/DSP_RD*/ALE

ALE=/DSP_DS*DSP_A15*/DSP_A14*/DSP_A13

*DSP_RD*DSP_WR

/CS1=/DSP_DS*DSP_A15*/DSP_A14*/DSP_A13

*/DSP_A12*ADDR_G

/CS2=/DSP_DS*DSP_A15*/DSP_A14*/DSP_A13*DSP_A12*ADDR_G

对其中一片进行读写操作,则时序关系如图4所示。

其中,twr、tww分别为DSP读、写时的ALE信号宽度,它们都接近1/2个CLKOUT的周期。T为ALE的下降沿到RD、WR有效的时间,它由GAL翻转的延时产生,为10ns以上(注:本图中DSP的时序来自TMS320C24xxA系列,不同系列的DSP产品之间时序可能有细微的差别)。

DSP范文篇7

数字音频已经具有很长的发展历史,在1937年就已经发明出了PCM,此技术也为后续的数字音频信号处理技术奠定了良好的基础。虽然在早起已经具有了一定的基础,但是数字音频处理技术的发展仍然会受到多方面的影响,所以在后续的几十年内都未能得到实质性的进展,而是随着其它相关的技术发展而缓慢前行。继上世纪90年代后,数字技术发展迅速,各种数字录音、环绕音频等技术都得到了突破性的发展。到了今天,数字化这个概念已经非常成熟,许多大型的企业都纷纷推出了自己的数字产品,可以说如今我们正处于一个数字化时代。

2数字信号处理DSP与数字音频信号处理概述

2.1数字信号处理DSP概述数字信号处理DSP是一门涉及多学科的新型学科,它随着计算机技术的快速发展也得到了很大的发展。在过去十几年里,数字信号处理DSP已经逐渐成为通信行业中一项极其重要的技术。数字信号处理DSP主要是通过计算机或者专业化的工具,以数字化的方式完成信号的手机、转换、识别等任务,最终得到所需要的数字信号。DSP数字信号处理技术主要是以数字信号处理的理论、实现及运用为基础发展而来,理论上的发展促进了技术的实现以及应用,而应用反过来有促进了理论的提高。数字信号处理DSP涉及到许多领域,如数学、微积分、概率等都是以数字信号处理DSP技术作为基础工具,而音频信号处理也与之密切相关。

2.2数字音频信号处理概述DSP在数字音频信号处理中的运用主要有:纠错、多重利用、语音合成、数据转换等,基于DSP的数字音频信号还可以实现多样化的效果,绝对部分用户都可以通过此技术下的设备听出不同的效果。如在一些特殊场景DSP设计的数字音频信号处理文/冯志鸿本文基于DSP设计的数字音频信号处理做了概述与分析,具有一定参考借鉴价值。当音频产品需要对多音频进行处理时,TI所具有强大的音频解决方案就可以使用DSP中强大的算法,将不同来源的数字资料直接输送到扬声器中。目前大部分的音频处理过程是通过数字线路连接的形式,这样就可恶意有效避免模拟信号过程中所存在的功能缺失以及信号损失等。最后,TI的DSP芯片还可以处理音频标准的其它格式,如立体环绕音效、AC3以及AAC。若音频产品后期需要进行提高音质的操作,TI也具有TAS300x系统,可以执行芯片内含的先进滤波算法,同时对扬声器的相应特征进行实时修正。为了提高音频的处理效果,无论是个人还是企业所用的音频产品都已经开始朝着数字化趋势不断发展,同时它也在不断推进消费市场的发展,随着数字音频处理技术的提高,未来音频产品市场的行情将会发生巨大的改变。

其中德州仪器TI就具有两种数字音频方案,其中最为关键的就是DSP技术。当音频产品需要对多音频进行处理时,TI所具有强大的音频解决方案就可以使用DSP中强大的算法,将不同来源的数字资料直接输送到扬声器中。目前大部分的音频处理过程是通过数字线路连接的形式,这样就可恶意有效避免模拟信号过程中所存在的功能缺失以及信号损失等。最后,TI的DSP芯片还可以处理音频标准的其它格式,如立体环绕音效、AC3以及AAC。若音频产品后期需要进行提高音质的操作,TI也具有TAS300x系统,可以执行芯片内含的先进滤波算法,同时对扬声器的相应特征进行实时修正。为了提高音频的处理效果,无论是个人还是企业所用的音频产品都已经开始朝着数字化趋势不断发展,同时它也在不断推进消费市场的发展,随着数字音频处理技术的提高,未来音频产品市场的行情将会发生巨大的改变。

3数字音频处理系统分析

传统的音频产品在设计的处理过程中基本都使用的为模拟设备,他具有体积大、精度低、易于受到外界环境影响,同时设备内部的元件发生老化现象是很容易影响设备的正常运行及使用。而数字音频处理设备与之相比较则具有着许多的优势,如在体积方面相比小许多,音频精准度也会大幅度提高,不易受到外界环境的影响与干扰,即便音频设备的元件发生老化的现象,也不会对使用效果产生太大的影响。其次根据输入信号可以将其分为模拟输入与数字输入两种,而扬声器大部分是以模拟设备为主,因此经过数字处理的信号是需要经过数模转换器DAC将其转化为相应的模拟信号。目前伴随着数字信息处理技术DSP的发展,数字音频系统的输出可以通过数字的形式进行,进而省去了中间的环节,通过数字信号直接作用于音箱让其保持正常运行。

3.1输入与输出为模拟量的数字音频系统分析输入与输入为模拟量的数字音频系统,录音机以及收音机都可以作为模拟信号进行输入,其它类型的模拟信号也可以,当模拟信号通过ADC模数转换器后会处理生成数字信号,之后再进入DAP数字音频处理设备内部进行滤波及音量等控制操作,若DAP所选用的为DSP芯片,那么可以处理相应业界标准的各种音频格式。处理后的数字音频信号再经过DAC数模转换器转换成为模拟量,最后输送至扬声器。

3.2输入为数字量的数字音频系统分析数字信号在数字音频系统传输过程中不会像模拟信号那样存在损耗以及干扰的影响,所以许多的音频设备都开始转用数字输出接口,例如CD以及DVD等。当数字信号传输至数字音频接收器后,它能够将信号编码成为DAP数字音频处理器所支持的格式,除此之外如CD、DVD等设备,当所进行播放的时,音频信号会被编码成为PCM数据,是DAP所支持的格式,之后经过DAP处理转换成为模拟量进行输出驱动。

3.3数字功放的音频系统数字功放主要是指通过开关电路将音频的功率进行放大,然后再经过滤波器将其还原成音频模拟信号,再将模拟进行输出实现音频所具有的功能。数字功放的主要优势是它能够在功率转换上没有采用任何模拟放大反馈电路,能够有效避免瞬间失真的现象发生;它的电路所具有的过载能力很大,远远超过了模拟功放;最后数字功放极高的效率,且在工作过程中基本不会发热;可以极大降低整机的成本、体积以及重量。

4结束语

综上所述,数字信号处理DSP是开展数字音频处理的基础,DSP技术对于数字音频处理而言具有着重要的意义。因此应相关工作人员应积极研究数字信号处理DSP技术,并将其应用于数字音频处理过程之中,充分发挥出DSP所具有的优势,让人们能够获得更好的音频产品,进而满足人们对音频产品的实际需求。

参考文献

[1]夏海旻.基于DSP的数字音频处理器的设计[J].中国新技术新产品,2016(09):44-45.

[2]王剑飞,程耀瑜.基于DSP的多路音频信号采集与处理设计[J].光电技术应用,2013,28(04):72-75.

DSP范文篇8

关键词:电机控制;直接转矩控制;双DSP;双端口RAM;通信

引言

直接转矩控制[1]是目前广为研究的电机控制理论之一,已在异步机上取得了成功,而在同步机方面的应用也已有了一定发展[2]。由于该理论直接对转矩进行控制,故瞬态性能得到了显著的改善。但是,由于其采用的是BangBang控制,控制周期过长会使电流过大;同时大周期会使转矩脉动加大。为了解决这个问题可以从控制策略上加以改进,比如采用SVMDTC[3]来取代传统DTC方案;也可以在控制平台上加以考虑,提高处理器速度,缩短控制周期。以单个DSP为核心的控制平台(常见的芯片如TI公司的2000系列),由于既要完成复杂的算法,还要执行数据采集、控制信号输出、系统保护以及人机交互等一系列操作,无法有效地缩短控制周期。在综合考虑了各种数字信号处理器的性能之后,决定采用双DSP并行工作的体系结构;并同时考虑到该控制系统的特点,即在每个控制周期内两个DSP之间交换的信息很少,不同于诸如图像采集系统[4]那样,需要大流量的数据交换。由此采取了一系列特殊的设计思想。首先,在芯片的选型上兼顾了各自不同的特点,即专用于电机控制领域的芯片TMS320LF2407A专注于控制;高速通用数据处理芯片TMS320VC33则着眼于复杂算法的实现,从而充分利用了各自的特点。其次,针对电机控制这一特定领域,需要采集的数据相对较少,同时反馈的也只是计算结果,即PWM波发送策略,并无大量中间结果,因此,需要考虑的重点是控制方法的实现,和数据采集的实现必须占用尽可能少的资源。同时由于数据量较少,可以用较小的代价来实现数据的冗余,使得数据处理时更加灵活和方便,DSP之间并不一定保持同步工作状态。为了实现两个DSP之间的数据交换和通信,选择了双口RAM作为两者之间的媒介。并从硬件和软件上相互配合,避免存储空间争用[5]的同时,使得数据存储过程尽量少耗费各种资源。

1硬件系统构成

TMS320LF2407A最突出的特点在于其事件管理器模块:共有两个事件管理器EVA及EVB,提供了8个16位脉宽调制(PWM)通道。这些都是针对电机控制而设计的,在PWM波的产生上相当方便可靠;可编程的PWM死区控制可以防止上下桥臂同时输出触发脉冲而导致直通。同时每个模块还提供了两个外部引脚PDPINTA和PDPINTB,当该引脚上出现低电平时事件管理器模块将快速关闭相应的PWM通道,起到保护作用。片内模数转换模块为数据采集提供了高性能的A/D转换器,最小转换时间只有500ns。由于转换时间是整个控制周期的组成部分之一,快速A/D对于缩短控制周期是非常有利的。

TMS320C3X系列DSP芯片是一种性能价格比很好的浮点处理芯片,具有很高的数据处理速度。片内部分拥有34K×32位的RAM,在程序运行期间,所有的数据都位于其中,从而能够充分发挥哈佛总线结构所带来的数据吞吐量大、运算快的优点。在算法实现上,由于采用了浮点计算格式,将使计算精度得到提高;采用编程语言C会使程序编写效率大大改善,这对于需要用复杂算法实现的控制策略来说是很重要的。

双口RAM的特点在于具有两组相互独立的地址线、数据线和控制线,片内包含的控制逻辑解决了三个重要的问题:处理器之间的信号关系(中断逻辑);两个CPU正在使用同一地址时的时间关系(仲裁逻辑)和把一块存储器临时分配到某一边的硬件支持(旗语逻辑),从而保证双机之间数据、信号交流的正确进行。

仲裁逻辑(忙逻辑)每块CY7C025允许两个CPU同时读取任何存储单元(包括同时读同一地址单元),但是不允许同时写或者一读一写同一地址单元,否则就会发生错误。双口RAM中已经有相应的仲裁逻辑电路来解决这一问题:先行稳定的地址端口通过仲裁逻辑电路优先读写,同时内部电路使另一个端口的BUSY信号有效,并在内部禁止对方访问,直到本端口的操作结束。BUSY信号可以作为CPURDY信号的来源,从而使得CPU处于等待状态。

当双口RAM单片使用的时候,问题相对简单,但是,在现代数字系统中,由于数据总线的宽度往往可以达到32位甚至更宽,这就需要多片双口RAM来进行位扩展。此时如果出现同时访问,将有多块双口RAM处于工作状态,如果依然象单片工作时那样,每块双口RAM都使用自己的仲裁逻辑,则很可能出现一种情况,即第一片仲裁使得BUSYL变低,而第二片仲裁使BUSYR变低,这样两边的CPU都会处于等待状态。为了避免这种情况的发生(BUSY信号死锁),可以使用主从模式,使得当多块芯片一起工作时,只使用主片的仲裁逻辑,并迫使从片跟随主片。主从模式的电路连接如图1所示。

主芯片的BUSY信号接上拉电阻作为输出,从芯片的BUSY信号作为写禁止输入,当主芯片处于BUSY状态时,从芯片接收这个状态,同样处于忙状态,从而避免了死锁的发生。

中断逻辑另一个重要的内部电路结构,它允许双CPU通过端口直接进行通信。CY7C025最高位的存储单元1FFF作为右边端口的中断信箱,次高位存储单元1FFE作为左边端口的中断信箱。各CPU可以读取双方的中断信箱,但只能写对方的中断信箱。当一端写入对方的中断信箱时,对方就会产生一个中断信号;读自己的中断信箱则清除自己的中断信号,读对方的中断信箱不会清除中断信号。

旗语通信逻辑可以使双口RAM暂时指定一块存储区,只供一端的CPU使用,称之为独占模式。CY7C025配置了独立于RAM阵列的8个旗语锁存器,用于标志双口RAM是否处于独占模式。独占模式也可以用来避免地址仲裁问题,因为,它是一种使两边不同时使用同一地址的方法,通常也叫做软件仲裁。

控制平台结构框图如图2所示。

电机由IPM来驱动,霍尔元件检测相关物理量,通过信号调理电路给A/D转换器,转换结果由LF2407A存储于双口RAM中,并由VC33读取用于计算。调理的同时保护电路也进行相应的检测,在意外状况发生时随时切断触发信号。VC33将获取的数据进行分析和计算,所有的数据处理都由VC33完成,只将计算结果反馈给LF2407A,并由此产生相应的控制信号,通过接口电路来控制IPM工作。同时预留了D/A及串口输出等相关电路,用于实现显示、检测、与其它系统通信等各项功能。LF2407A和VC33优势互补,并行工作,控制周期的长短主要取决于算法实现时间。原有的控制软件(以C32为控制平台)需要100μs左右,在采用了新的控制平台后,整个控制周期减小到20μs左右。

2双端口RAM存储争用解决方案

在双机的数据交流过程中,存在存储空间争用问题,常见的解决方案有如下几种。

——硬件方案最简单的方法就是上面提到的使用双口RAM内部的仲裁逻辑,要求两边的CPU都具有RDY引脚,从而插入相应的等待周期。对于8098单片机,DSP都具有这样的资源,而且只需要硬件支持,相对简单。如果不具备RDY引脚,如8031单片机,则不能采用此种方法。

——中断方案需要硬件和软件的同时支持。将双口RAM的左右中断信号输出引脚和CPU的外部中断输入引脚相连,并编写相应的中断子程序。

——旗语方案同样需要硬件和软件的同时支持,我们也称之为软件仲裁。其步骤为申请独占区域、判断申请是否成功、释放独占区域。由于两边不同时使用同一地址,所以也可以避免争用的发生。

本系统设计时综合了各种情况最后选用了硬件方案。这是因为使用中断方案软件编写复杂,频繁中断跳转在算法和控制都较复杂的情况下,对于软件的可靠性和稳定性是不利的;采用旗语方案则控制相对复杂一些;硬件方案具有简单可靠的特点,存储空间的争用完全由硬件解决,即当发生存储空间争用的时候,决定先行稳定的端口优先进行访问,另一端口则插入等待周期。由于DSP的快速性,不同于以往的单片机将产生很长的等待周期。针对本系统考虑,即使是最坏的情况:每个控制周期内传递数据8个,LF2407A一次读/写周期50ns记,共需要0.4μs。当然这完全由硬件来实现,若考虑软件上共同配合,则可以更有效地减少等待时间。而且0.4μs和20μs的控制周期相比,所占的比重非常小,并不会给系统性能带来显著影响,系统可靠性和稳定性也能够得到保证。这也正是本系统的特点所在。

3TMS320C2407A/TMS320VC33与

CY7C025之间通信的实现

LF2407A的数据总线宽度和地址总线宽度都是16位,单片CY7C025就足够了。VC33的数据总线宽度是32位,可以采用两片CY7C025以主从模式进行宽度扩展(见图3),这样每次VC33读取数据时就能一次读入两个LF2407A的采样数据。也可以采用单片CY7C025,虽然没有完全利用VC33的数据宽度,但是,从电路设计上来讲相对简洁。由于本系统双口RAM的作用主要是起到数据传递的作用,不需要保存大量的中间结果以及已经使用过的数据,因此,需要的存储空间不是很大,单片双口RAM就已经足够。具体的接口电路见图3,片选等控制信号由译码电路产生。

地址空间分配综合了不同DSP的空间资源分配要求,具体见表1。

表1地址空间分配表

起始地址

终止地址

LF2407A

0X8000H

0X9FFFH

VC33

010000H

011FFFH

4软件功能实现

双DSP协同工作的关键是相互通信和数据交流上的密切配合,可通过硬件仲裁电路来完成这一任务。但是如果仅仅用硬件完成,如上分析,毕竟等待时间还要0.4μs左右。如果辅以软件配合,则可以有效地减少等待产生的情况。

首先,冲突可能发生在同时写同一个存储单元。在数据写的时候采用如下措施可以避免这种情况的发生:如图4所示,将读/写的存储空间独立开来,显然LF2407A和VC33在写的时候就不可能产生冲突,避免了等待的发生。

其次,冲突可能发生在一读一写同一存储单元的情况下。以LF2407A写数据,VC33读数据为例,上面分析的产生0.4μs等待时间的情况是基于如下假设:将8个数据依顺序存储于同一地址单元。即LF2407A存第一个数据时发生冲突,VC33产生等待时间50ns,等待结束VC33读数据,此后LF2407A将第二个数据覆盖前一个数据存储,依次类推得出的结果就是8×50ns=400ns。

事实是我们有足够的地址空间用来存储每批数据,将8个数据按顺序存放在不同的地址空间,此时的情况如下:LF2407A存第一个数据时发生冲突,VC33产生等待时间50ns,等待结束VC33读数据,与此同时LF2407A也开始写第二个数据于下一个存储单元中。两者同时进行,我们只要保证VC33读完的时候,LF2407A第二个数据已经写完,则不会有冲突发生。针对本例,由于两者时间不同(LF2407A为50ns,VC33为13.3ns),VC33读得较快,只要在软件编写上增加40ns左右的循环,就能保证如上的要求。当读/写反过来的时候,则不存在这样的情况而能顺利配合。这样,最终的结果是只增加50ns的等待周期,对于本系统完全可以接受。

由于两个DSP并不同步工作,所以,LF2407A可以采样尽可能多的数据并保存,VC33只选用最新的数据用于计算,这样就能保证数据的冗余。程序流程如图5所示。

DSP范文篇9

关键词:捷联惯导;串口通信;DSP

1引言

捷联式惯性导航系统(StrapdownInertialNavigationSys-tem,SINS)将惯性器件直接固连在运载体上,惯性器件可以感应出运载体的加速度和姿态等信息,而且不受任何外部因素的影响,可以实现真正意义上的自主式导航[1-3]。捷联惯导系统具有成本较低、体积更小、可靠性更高等优点,因此已成为惯性导航技术的重要发展方向之一。相对于传统平台式惯性导航系统,捷联惯导数字化程度更高,因此数字信号的传输与通信是导航实现的前提和基础。目前,捷联惯导与上位机或导航解算计算机的通信主要采用串行通信。通信数据主要包含陀螺仪输出的角速度数据和加速度计输出的加速度数据等,用于后续导航解算和数据处理分析。为保证导航解算对于惯性器件数据更新率的要求,惯导串行通信通常具有数据量大、波特率高、更新率高等特点。在通用计算机上实现惯导高速串行通信相对简单,文献[4][5]介绍了在VC++开发平台下,基于MSComm进行串口编程的方法。文献[6][7]阐述了在VC++开发平台下基于MOXA多串口卡的多串口实时通信的实现方法。但是在嵌入式计算机上,由于要兼顾成本和性能,需要对系统资源进行优化配置,对程序进行合理设计。本文基于低成本的DSP28335硬件架构,设计了捷联惯导高速串行通信模块,以较低的硬件成本,构建了惯性导航实现平台。

2DSP28335及开发环境简介

DSP(DigitalSignalProcesser)即数字信号处理器,是美国德州仪器公司(TexasInstruments,简称TI)研发生产的专用于数字信号处理的芯片,其强大的浮点型计算能力是目前市面上其他CPU无法比拟的,集成有专用数学计算指令集以及对内存优化能力使这款专用CPU在数字信号处理领域表现优异。由于是专用CPU,因此DSP只能用TI公司专用的软件开发工具设计软件,TI公司将这款软件命名为CCS(CodeComposerStudio,CCS集成代码开发环境)。DSP系统软件开发工具CCS编辑、编译、连接、软件仿真以及硬件调试等功能于一体,操作简单,拥有良好的人机交互界面,并支持C语言标准,编程简单易于开发[8]。它不仅提供了配置、建立、调试、跟踪和分析程序的工具,而且便于实时、嵌入式信号处理程序的编制和测试,能够加速程序开发进程,提高设计工作效率。

3通信指标与程序流程

惯性导航设备陀螺仪和加速度计数据采用IEEE标准浮点型数据格式输出,每个浮点型数占4个字节外加协议头和协议尾以及自定义信息共62字节。由于惯性导航解算要求陀螺仪和加速度计数据更新率不低于100Hz,为保证信息的有效传输以及为后续导航解算预留硬件资源,设定通信波特率为1843200bit/s。串口接收数据以及发送数据都设置为中断模式,利用中断模式接收数据可以有效节省CPU资源,避免主程序实时查询带来不必要的浪费,当串口完整接收一个字节时将数据存储在预先定义的串口接收缓存区中,缓存区至少能缓存3条最大协议内容的长度。这种设计方式能够保证即使主程序不能及时处理串口数据也不会造成数据丢失的问题。主程序遍历串口接收数据缓存区,如果协议缓存区字节数超过最大协议长度字节数62字节依然没有收到协议头或者协议尾,或者校验失败则丢弃这条协议,清除协议解析缓冲区。这种串口接收数据处理方式称之为双缓存区模式。这种处理方式可以很轻松处理高速数据通信问题而且不容易丢失数据。串口数据接收协议解析流程如图1所示。

4串行通信实现

4.1初始化

DSP28335芯片初始化阶段,主要对系统时钟频率、串行通信SCI模块、芯片引脚、中断向量等进行初始化设置,其主要代码及其功能如下:InitSysCtrl();//设置系统时钟频率InitScic();//初始化串行通信SCI模块InitGpio();//初始化GPIO引脚InitPieCtrl();//禁止PIE,清除PIEIER和PIEIFR寄存器InitPieVectTable();//加载中断向量表EnableInterrupts();//中断使能PieVectTable.SCITXINTC=&SCITXINTC_ISR;//初始化PIE中断向量表PieVectTable.SCIRXINTC=&SCIRXINTC_ISR;//初始化PIE中断向量表

4.2串口接收中断服务程序

串口接收中断服务程序主要将输入缓冲区的数据读入到存储器中,同时将数据按照协议进行解析,将其转换成计算机能处理的数据形式,便于后续进行惯性导航解算,其主要代码及功能如下:

5结语

捷联惯性导航系统在军、民用领域都有重要应用,而嵌入式惯性导航解算计算机是捷联惯导的重要组成部分。陀螺仪和加速度计等惯性器件与嵌入式计算机的通信是实现惯性导航的前提和基础。为了兼顾惯性导航串行通信的高更新率、高波特率、大数据量等特性,以及嵌入式计算机成本等需求,本文基于DSP28335硬件架构设计了捷联惯导通信模块,从而实现了捷联惯导高速、稳定、可靠的数据通信。

参考文献:

[1]秦永元.惯性导航(第二版)[M].北京:科学出版社,2014.

[2]张天光,王秀萍,王丽霞.捷联惯性导航技术[M].北京:国防工业出版社,2007.

[3]王巍.惯性技术研究现状及发展趋势[J].自动化学报,2013,39(6):723-729.

[4]李薇,耿淑琴.基于VC实现MSP430与PC之间的异步串行通信[J].微型机与应用,2012,31(5):23-25.

[5]周小刚,单斌,汪立新,等.基于PC104的嵌入式转台控制系统设计[J].自动化应用,2013(1):62-24.

[6]赵素娟.基于Moxa多串口卡的多串口通信的VC++实现[J].计算机与现代化,2011(8):117-123.

[7]李瑞先.VC++中基于Moxa多串口卡串行通信的实现[J].通信技术,2009,42(11):7l-72+192.

DSP范文篇10

目前越来越多的工科院校开设了DSP课程,但是在许多高职院校,DSP课程却是最年轻的课程之一。无论在教材选取、教学内容,教学方式、方法,还是考核方式上,都带有一定的盲目性。为使学生掌握新技术,提高专业技能,提高就业竞争能力,我院通信专业开设了DSP课程,笔者结合教学实际,对DSP课程开设进行了有益的探索。

二、教学目标

2.1知识目标通过DSP课程的学习,使学生了解DSP的发展状况和应用领域,掌握DSP的基本硬件结构特点和集成开发环境CCS的使用,学习DSP的硬件设计和软件编程的基本方法,学会利用实验设备进行DSP系统软硬件开发,为后续的课程设计和毕业设计打下坚实的基础,为今后从事数字信号处理相关工作做准备。

2.2能力目标使学生在实践中提高动手能力和自学能力;通过分析、综合、探究等活动,培养学生探索求真知的精神。

三、教学实施

3.1先修课程数字电路、计算机原理。

3.2课时分配DSP课程的重要特点是偏重应用,所以采用讲授与实验相结合进行教学,共64课时,讲授约占总课时的1/3,其余都是教师演示实验或学生实际操作和摸索。

3.3教学形式由于课程的实践性强,我们采用了直接在实验室结合实验装置进行教学的形式;由于课时紧,我们采用多媒体教学,制作了媒体课件,例如DSP的内部结构、流水线操作、数据流图、程序流程等等很难单纯用语言文字讲清楚的内容,可以用多媒体课件的形式来很好地展示,使得学生在有限的课时内学到更多的知识。

3.4教学内容

3.4.1理论教学内容①DSP技术知识(如IIR、FIR滤波,FFT变换等);②DSP芯片的产生、特点、应用、发展前景;③DSP芯片,重点是TI公司54x系列的硬件结构介绍,包括CPU结构、存储器空间分配(程序空间、数据空间和I/O空间)和寻址方式、在片外设(时钟、定时器、串行/并行口、中断)、增强性外设(HPI、McBsp、DMA)、自举加载等;④DSP汇编语言指令;⑤DSP最小系统的硬件电路介绍。

3.4.2实践教学内容我系实验室购置了长沙三知电子有限公司研制的SZ-DSPⅡ多功能综合实验开发系统平台,该实验平台以TI的TMS320C5402的DSP为主体芯片,采用模块化设计,实验系统中的语音处理模块,A/D采样模块、D/A转换模块,CPLD、异步串口/同步串口模块,直流、步进电机模块,键盘、数码管、液晶屏、LED及按键等资源全部向学生开放。不仅可以进行验证性实验,也可开展丰富的设计性实验,并能一直延伸到综合设计等创新性实验课题。①CCS、实验平台启动实验:使学生熟悉实验箱中各个模块的功能和使用,熟悉CCS集成开发环境的使用,为后续课程的开展做好准备。②基础实验:基础的验证性实验可以激发学生的学习兴趣,使学生进一步熟悉DSP汇编编程的基本结构,理解和掌握汇编语句的意义和用法。分为硬件实验和软件实验两类。硬件类包括I/O实验、数码显示实验、同步串口、A/D、D/A转换实验、事件管理器实验(定时器实验、定时中断实验)等。软件类,包括基本算数运算实验、存储器实验、浮点数与Q15之间的数据转换、FIR滤波实验、实数FFT算法实验。③综合设计实验:通过该系列实验,提高学生综合DSP软件和硬件知识的能力,为课程的拓展奠定坚实基础。包括DSP实现交通灯控制实验、DSP实现电机的控制和显示实验、DSP实现调频信号源等。④课程设计要求:充分利用DSP资源设计出一具有完整功能的实验。学生可以自选课堂上介绍的一个或多个模块组成一个简单的应用小系统,复杂的系统可以多人分工合作。实验时间开放,进实验室前,必须做好软、硬件设计。这样不仅进一步锻炼了学生的动手能力,也提高了学生查阅资料的能力,引导学生有效地利用网络资源。同时也希望锻炼团队合作精神。本课程还安排了相关的职业资格证书考核并将课程延伸到毕业设计中。

3.5考核方式本课程实践性很强,在考核方式上偏重于实践环节,笔试采用开卷方式,占40%,实验占60%。其中基础实验占20分,主要由平时实验的表现、效果决定,综合设计实验占30分,综合设计实验的实验报告占10分。

四、课程开设意义

我院05级、06、07级通信专业学生在二年级的下学期开设了DSP课程,实践证明该课程的开设具有重要意义:

(1)教学内容的延续性:DSP实验平台是相关课程的一种综合运用和提升。《数字电路》、《模拟电路》、《计算机原理》、《信号与系统》、《通信原理》等课程群建立的知识体系,可以通过DSP实验平台实现综合应用,并在应用技术层面得到有效提升,从而形成对课程群课程知识的综合运用。