DSP学习初阶的一些笔记

article/2025/10/23 23:54:33

这些内容都是一些基础的、概述性的知识,是本人在学习、使用DSP开始阶段的一些总结,对于DSP内部结构:各个寄存器的配置使用、各种外设的详细配置、中断处理机制、内存管理以及各种编程、调试的经验,以后有空会另外贴出。

一、DSP芯片概述:

1、各平台:

C6000平台,包含定点C62x和C64x以及浮点C67x,追求至高性能,最高达1GHz。

C5000平台,TI公司推出双核处理器OMAP,包含一个ARM和一个C5000系列的DSP。

C2000平台,包含16位的C24xx和32位的C28xx定点DSP。

C5000和C6000和C28xx系列都配有实时操作系统RTOS内核和C/C++编译器;C24xx系列仅有C编译器。

 

2、C28xx系列主要特色:

1)  峰值速度高达150MIPS;

2)  具有4K字的RAM和最高达128K字的FLASH;

3)  采用双电压设计,外设电压3.3V,内核电压1.8V;

4)  12位A/D,采样速度高达80ns;

5)  软件上支持C++和实时操作系统RTOS,其数学库:智能Q格式数学库。

 

3、分页机制:

数据存储空间采用分页机制,2407整个空间分成512页,通过寄存器的9位指针DP来指定。分页机制有助于缩短汇编指令长短,提高访问速度。

 

4、外设:

SCI:经电平转换后,可用作RS-232通信。

SPI:带有同步时钟,可用来连接一些带有SPI器件,如串行E2PROM等。

EV:事件管理器,主要用途:通用定时器和PWM发生器,还包括捕获单元,QEP解码器。

10位A/D:F240采样转换时间最快是6.1us,LF< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />2407A最快500ns。

 

5、GEL:通用扩展语言的缩写:

GEL是一个大小写敏感但缺少类型检查的解释性语言,语法上可看作是C语言的一个子集。GEL主要用来扩展CC的功能,方便调试。

 

二、Q格式:

1、定点微处理器不能直接处理小数,比如要表达精度为0.01Hz的频率变量f,有三种方法:

1)把f定义为float类型。C语言中自动调用运行时函数来处理浮点运算,float类型精度最高,运算速度也最慢。一个简单的浮点加法也要好多汇编指令来实现。

2)仍定义为整型,采用放大若干倍来表示小数,但做法僵硬,精度变化时,要修改很多地方以防止溢出。

3)仍定义为整型,采用定标法。常用Q格式来表示定标,当假定小数点位于第0位的右侧时,为Q0,当小数点位于第15位的右侧时,为Q15.

浮点数Xf转换为定点数Xq时,Xq = (int)(Xf * 2^Q)

定点数Xf转换为浮点数Xq时,Xf – (float)(Xq * 2^-Q)

有符号32位数的Q15格式表示范围为-65536<=X<=65535.9999695。

2、定点运算:

任何数制运算都要考虑溢出,定点数之间的运算也要考虑溢出。

1)定点加减法< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />

必须是具有相同Q格式的数据才能相加,不同Q格式的数据必须先通过移位至相同Q格式,然后才能相加。

2)定点乘法:( )

不同Q格式数据相乘,相当于Q值相加。

3)定点除法:( )

不同Q格式数据相除,相当于Q值相减。

3、Q15格式:

程序中最常用的是Q0和Q15格式,int型变量的Q15格式数值范围是一个不超过1的小数。小数间乘法仍是小数,永远不会溢出。

如果一个数既包含整数又有小数,使用Q格式时,选定一个合适的Q格式来表示。还可以:把全部数据转化为小数,再用Q15格式表示。

假设整数x取值范围不会超过某一极限最大值,设此极限最大值为MAX,将x除以MAX转换成一个小数,再转换成Q15格式。

 

三、可重入性:

    当被两个以上线程调用时,函数的结果仍能保证正确,当然是插入式调用的。

 

DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘

保障可重入性的技术:

(1)       只使用局部变量,不使用全局变量。

(2)       全局变量设定为只读类型(加关键词const),由于不进行写操作,则程序仍具有可重入性。

(3)       如果将函数和全局变量封装在一起,即封装成一个对象,且函数只能访问此对象内的成员变量,则函数具有可重入性。这就是面向对象语言(C++)的好处,提高可重入性。

(4)       屏蔽中断:当函数访问到全局变量时,为保证可重入性,在变量修改前禁止中断,修改完后再开中断。

(5)       函数只能返回一个值,当想要通过一个函数返回多个变量值时,可以采取的措施是直接在函数体内处理全局变量或传递全局变量的地址。此时的全局变量就变成了过程量(状态量),此时可用局部变量在函数内代替全局变量。

(6)       16位DSP中,若输出变量是32位,赋值操作会用两条指令——先赋值变量低16位,再赋值高16位,这中间就可能因发生中断而不能得到正确结果。解决方法是赋值前禁止中断即可。

 

四、C语言生成的段和CMD文件:

通用目标文件格式COFF,是一种很流行的二进制可执行文件格式。二进制可执行文件包括库文件(.lib结尾)、目标文件(.obj)、最终可执行文件(.out)等。

详细的COFF文件格式包括有段头、可执行代码和初始化数据、可重定位信息、行号入口、符号表、字符串表等。这些属于编写操作系统和编译器人员关心的范畴,从应用的层面讲,DSP的C语言应掌握两点:通过伪指令定义段,并给段分配空间。

编译器处理段得过程为:每个源文件都编译成独立的目标文件(.obj),每个目标文件含有自己的段;连接器把这些目标文件中相同段名得部分连接在一起,生成最终的可执行文件(.out)。

1、段分两大类:已初始化段和未初始化段。

1)已初始化段含有真实的指令和数据,存放在程序存储空间。程序存储空间在DSP片内是FLASH。调试代码时,下载代码到片外的程序存储空间——此时多为RAM。

.text:包含可执行的汇编指令代码。如果不声明,代码就归属.text段;

.data:一般包括常数数据。如用来对变量初始化的数据或一个正弦表格等;

.sect:用户可自行定义已初始化段;

.asect:作用类似于.sect,但多了绝对地址定位功能。

.cinit:存放用来对全局和静态变量初始化的常数。

.switch:存放switch语句产生的常数表格。

2)未初始化的段只是保留变量的地址空间,未初始化的段存放在数据存储空间中,数据存储空间多为RAM存储单元。

.bss:定义变量存放空间;

.usect:用户可自行定义未初始化段;

.stack:存放C语言的栈;

.sysmen:存放C语言的堆;

.const:简单而言,是用来存放一些特殊的常数和字符等。

 

2、DSP C24系列堆栈向高地址方向增长,所以堆栈段定义在数据存储空间的最后区域,即使堆栈发生溢出,也不会覆盖其他有用的数据。

 

3、#pragma CODE_SECTION(symbol,”section name”);

symbol是符号,可以是函数名也可是全局变量名,section name是用户自己定义的段名。

CODE_SECTION用来定义代码段,DATA_SECTION定义数据段。二者在汇编层次上分别是由伪指令.sect和.usect实现的。

使用注意:不能在函数体内声明#pragma。必须在符号被定义和使用前使用#pragma。

 

4、CMD文件中,page0代表程序空间,page1代表数据空间。

page0:.text,.cinit,通过#pragma CODE_SECTION定义的段;

page1:.switch,.const,.bss,.stack,.sysmen,通过#pragma DATA_SECTION定义的段。

CMD文件支持C语言的块注释符“/**/”,但不支持“//”。

CMD文件两大功能:指示存储空间和分配段到存储空间:

1)通过MEMORY来指示存储空间:

MEMORY

{

PAGE0:name 0 [(attr)] : origin=constant, length=constant

PAGEn:name 0 [(attr)] : origin=constant, length=constant

}

2)通过SECTIONS来分配段到存储空间:

SECTIONS

{

name:[property,property,property,…]

name:[property,property,property,…]

}

(1)       name输出端的名;

(2)       property输出段的属性。

A、load:定义输出段被装载到哪里的关键字,load = allocation

Allocation可以是强制地址,如:load=0x100,更多时候,allocation是存储空间的名称。

B、run:定义输出段将会在哪里运行的关键字。CMD文件规定当只出现一个关键字load或run时,表示load地址和run地址是重叠的。

 

5、复杂的.const段:

三种情况会产生.const段:

1)关键词const:

由关键词const限定的带有全局变量的初始值。但由const限定的局部变量的初始值,不会产生.const段。局部变量都是运行时开辟在.bss段中的。

2)字符串常数:

出现在表达式中的字符串常数,如“strcpy(s,“abc”);”字符串常数用来初始化指针变量,如“char *p=“abc”;”,但当字符串常数用来初始化数组变量时,不论是全局还是局部数组,都不会产生.const段,此时字符串常数生成的是.cinit段。

3)数组和结构体的初始值:

数组和结构体是局部变量,其初始化值会产生.const段。但当数组和结构体时全局变量时,其初始化值不会产生.const段,此时生成的是.cinit段。

.const段存放的是初始化的常数值,理应存放在page0才对,否则一掉电,岂不是这些常数都没有了?这是基于灵活性考虑的,程序中常会有大量的常数占用数据空间。

把.const段从page0搬移到page1,需要在两个地方设置:

A、CMD文件中的位置

B、修改连接的rts2xx.lib

 

六、CCS设置及TI中FFT库:

1、CCS的设置:

主要就是设置路径(头文件Linker、库文件linker、目标文件compiler—Files等的路径),堆栈大小,入口地址以及Linker Order等。

2、TI的FFT算法:

TI公司为了加快实数FFT,巧妙的使用了压缩算法:对2N点的实数做N点复数FFT,最后再劈分还原,得到实数2N点实数FFT计算结果。

补充:

1)如果采样数据不足2的幂次方,补零,虽然很多地方说没影响,但实际补零对输出的影响,是一个复杂的插值函数关系。

2)考虑到共轭关系,对[1,N-1]点幅值结果应该乘以2,才是真正的某次谐波的幅值平方。(TI的程序只给出幅值平方,没给出幅值,如果是幅值平方则应该乘以4.)

TI手册中列出结构体类型FFT128R如下:

Typedef struct{

       int *ipcbptr;

       int *magptr;

       int peakmag;

       int peakfrq;

       int normflag;

       int size;

       int *winptr;

void (*init1)(void);

void (*init2)(void);

void (*calc)(void *);

void (*split)(void *);

void (*mag)(void *);

void (*win)(void *);

}FFT128R;

 

DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘

DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘

例示:

#include “fft.h”

#pragma DATA_SECTION(ipcb,”FFTipcb”)

#define TWON 128

int ipcb[TWON+2]; //存放FFT处理的数据,Q15格式

FFT128R fft=FFT128R_DEFAULTS;

DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘

-------DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘 

}

DSP学习初阶的一些笔记 - 傲笑红尘 - 傲笑红尘

 

以下是个人节选,内容来自http://www.weeqoo.com/zhuanti/dsp/,都是些有用的知识,贴在这里,共同学习。

 

1、DSP的应用:

 

语音处理:语音编码、语音合成、语音识别、语音增强、语音邮件、语音储存等。

  图像/图形处理:二维和三维图形处理、图像压缩与传输、图像识别、动画、机器人视觉、多媒体、电子地图、图像增强等。

  军事:保密通信、雷达处理、声呐处理、导航、全球定位、跳频电台、搜索和反搜索等。

  仪器仪表:频谱分析、函数发生、数据采集、地震处理等。

  自动控制:控制、深空作业、自动驾驶、机器人控制、磁盘控制等。

  医疗:助听、超声设备、诊断工具、病人监护、心电图等、CT、CAT。

  家用电器:数字音响、数字电视、可视电话、音乐合成、音调控制、玩具与游戏等。

 

2、TI DSP的选型:

 

主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、 I/O 口数量、中断数量、DMA 通道数等。DSP 的主要供应商有 TI,ADI,Motorola,Lucent 和 Zilog 等,其中 TI 占有最大的市场份额。

 

TI 公司现在主推四大系列 DSP

 

1)C5000  系列(定点、低功耗):C54X,C54XX,C55X 相比其它系列的主要特点是低功

耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS 等应用。处理

速度在 80MIPS--400MIPS 之间。C54XX 和 C55XX 一般只具有 McBSP 同步串口、HPI 并行

接口、定时器、DMA 等外设。值得注意的是 C55XX 提供了 EMIF 外部存储器扩展接口,

可以直接使用 SDRAM,而 C54XX 则不能直接使用。两个系列的数字 IO 都只有两条。

 

2)C2000 系列(定点、控制器):C20X,F20X,F24X,F24XX  ,C28x 该系芯片具有大量 外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN 总线/PWM 发 生器、数字 IO 脚等。是针对控制应用最佳化的 DSP,在 TI 所有的 DSP 中,只有 C2000 有 FLASH,也只有该系列有异步串口可以和 PC的 UART 相连。

 

3)C6000 系列:C62XX,C67XX,C64X 该系列以高性能著称,最适合宽带网络和数字影

像应用。32bit,其中:C62XX 和 C64X 是定点系列,C67XX 是浮点系列。该系列提供 EMIF

扩展存储器接口。该系列只提供 BGA 封 装,只能制作多层 PCB。且功耗较大。同为浮点

系列的 C3X 中的 VC33  现在虽非主流产品,但也仍在广泛使用,但其速度较低,最高在

150MIPS。

4)OMAP 系列:OMAP 处理器集成 ARM 的命令及控制功能,另外还提供 DSP 的低功耗 实时信号处理能力,最适合移动上网设备和多媒体家电。

其他系列的 DSP 曾经有过风光,但现在都非 TI 主推产品了,除了 C3X 系列外,其他基本 处于淘汰阶段,如:C3X 的浮点系列:C30,C31,C32 C2X 和 C5X 系列:C20,C25,C50 每个系列的 DSP 都有其主要应用领域.

 

3、如何高效开始 TI DSP 的硬件开发:

 

1)根据应用领域选择 TI 推荐的 DSP 类型

2)参考选定的 DSP 之 EVM 板,DSK 等原理图,完成 DSP 最小系统的搭建(包括外扩内 存空间、电源复位系统、各控制信号管脚的连接、JTAG 口的连接等);

3)根据具体应用需要,选择外围电路的扩展,一般如语音、视频、控制等领域均有成熟的 电路可以从 TI 网站得到。外围电路与 DSP 的接口可参看 EVM 或 DSK,以及所选外围电路 芯片的典型接口设计原理图;最好外围电路芯片也选择 TI 的,这样的话不管硬件接口有现 成原理图、很多连 DSP 与其接口的基本控制源码都有。

4)地址译码、IO 扩展等用 CPLD 或者 FPGA 来做,将 DSP 的地址线、数据线、控制信号 线如 IS/PS/DS 等都引进去有利于调试。

 

4、如何高效开始 TI DSP 的软件开发:

 

如果你不是纯做算法,而是在一个目标版上进行开发,需要使用 DSP 的片上外设,需要控 制片外接口电路,那么建议在写程序前先好好将这个目标版的电路设计搞清楚。最重要的是 程序、数据、I/O 空间的译码。不管是否纯做算法还是软硬结合,DSP 的 CPU,memory,program memory addressing, data mem.ory addressing 的资料都需要看.

 

1)看 CCS 的使用指南

2)明白 CMD 文件的编写

3)明白中断向量表文件的编写,并定位在正确的地方

4)运行一个纯 simulator 的程序,了解 CCS 的各个操作

5)到 TI 网站下相关的源码,参考源码的结构进行编程

6)不论是 C 编程还是 ASM 编程,模块化是必须的

 

5、关于 TI 54X 系列 DSP 的 bootloader 过程:

 

请详细阅读 TI 文档 SPRA618A、SPRA571,这些文档对 boot 的机制进行了详细说明同时说明了利用 hex500 将*.out 文件转化为*.hex 文件时,需要编写的 cmd 文件的写法。

6、如何选择外部时钟?

DSP 的内部指令周期较高,外部晶振的主频不够,因此 DSP 大多数片内均有 PLL。但每个系列不尽相同。

 

1)TMS320C2000 系列:

TMS320C20x:PLL 可以÷2,×1,×2 和×4,因此外部时钟可以为 5MHz-40MHz。

TMS320F240:PLL 可以÷2,×1,×1.5,×2,×2.5,×3,×4,×4.5,×5 和×9,因此外部时钟 可以为2.22MHz-40MHz。

TMS320F241/C242/F243:PLL 可以×4,因此外部时钟为 5MHz。 TMS320LF24xx:PLL 可 以由 RC 调节,因此外部时钟为 4MHz-20MHz。

TMS320LF24xxA:PLL 可以由 RC 调节,因此外部时钟为 4MHz-20MHz。

 

2)TMS320C3x 系列:

TMS320C3x:没有 PLL,因此外部主频为工作频率的 2 倍。

TMS320VC33:PLL 可以÷2,×1,×5,因此外部主频可以为 12MHz-100MHz。

 

3)TMS320C5000 系列:

TMS320VC54xx:PLL 可以÷4,÷2,×1-32,因此外部主频可以为 0.625MHz-50MHz。

TMS320VC55xx:PLL 可以÷4,÷2,×1-32,因此外部主频可以为 6.25MHz-300MHz。

 

4)TMS320C6000 系列:

TMS320C62xx:PLL 可以×1,×4,×6,×7,×8,×9,×10 和×11,因此外部主频可以为 11.8MHz-300MHz。

TMS320C67xx:PLL 可以×1 和×4,因此外部主频可以为 12.5MHz-230MHz。 TMS320C64xx:PLL 可以×1,×6 和×12,因此外部主频可以为 30MHz-720MHz 软件。

 

7、等待的如何使用?

    DSP 的指令周期较快,访问慢速存储器或外设时需加入等待。等待分硬件等待和软件等待, 每一个系列的等待不完全相同。

 

1)对于 C2000 系列: 硬件等待信号为 READY,高电平时不等待。 软件等待由 WSGR 寄

存器决定,可以加入最多 7 个等待。其中程序存储器和数据存储器及 I/O 可以分别设置。

2)对于 C3x 系列: 硬件等待信号为/RDY,低电平是不等待。 软件等待由总线控制寄存器 中的 SWW 和WTCNY 决定,可以加入最多 7 个等待,但等待是不分段的,除了片内之外 全空间有效。

3)对于 C5000 系列: 硬件等待信号为 READY,高电平时不等待。 软件等待由 SWWCR 和 SWWSR 寄存器决定,可以加入最多 14 个等待。其中程序存储器、控制程序存储器和数据 存储器及 I/O 可以分别设置。

4)对于 C6000 系列(只限于非同步存储器或外设): 硬件等待信号为 ARDY,高电平时不 等待。 软件等待由外部存储器接口控制寄存器决定,总线访问外部存储器或设备的时序可 以设置,可以方便的同异步的存储器或外设接口。

 

8、Link 的 cmd 文件的作用是什么?

 

Link 的 cmd 文件用于 DSP 代码的定位。由于 DSP 的编译器的编译结果是未定位的,DSP 没有操作系统来定位执行代码,每个客户设计的 DSP 系统的配置也不尽相同,因此需要用 户自己定义代码的安装位置。以 C5000为例,基本格式为:

 

-o sample.out

-m sample.map

-stack 100

sample.obj meminit.obj

-l rts.lib

 

MEMORY

{

PAGE 0: VECT: origin = 0xff80, length 0x80

PAGE 0: PROG: origin = 0x2000, length 0x400

PAGE 1: DATA: origin = 0x800, length 0x400

}

 

SECTIONS

{

.vectors : {} >PROG PAGE 0

.text : {} >PROG PAGE 0

.data : {} >PROG PAGE 0

.cinit : {} >PROG PAGE 0

.bss : {} >DATA PAGE 1

}

 

9、如何将 OUT 文件转换为 16 进制的文件格式?

 

DSP 的开发软件集成了一个程序,可以从执行文件 OUT 转换到编程器可以接受的格式,使 得编程器可以用次文件烧写 EPROM 或 FLASH。对于 C2000 的程序为 DSPHEX;对于 C3x 程 序为 HEX30;对于 C54x 程序为HEX500;对于 C55x 程序为 HEX55;对于 C6x 程序为 Hex6x。 以 C32 为例,基本格式为:

sample.out

-x

-memwidth 8

-bootorg 900000h

-iostrb 0h

-strb0 03f0000h

-strb1 01f0000h

-o sample.hex

ROMS

{

EPROM: org = 0x900000,len=0x02000,romwidth=8

}

SECTIONS

{

.text: paddr=boot

.data: paddr=boot

}

 

10、为什么在 CCS 下编译工具工作不正常?

 

在 CCS 下有部分客户会碰到编译工具工作不正常,常见错误为:

1)autoexec.bat 的路径“out of memory”。修改 autoexec.bat,清除无用的 PATH 路径。

2)编译的输出文件(OUT 文件)写保护,无法覆盖。删除或修改输出文件的属性。

3)Windows 有问题。重新安装 windows。

4)Windows 下有程序对 CCS 有影响。建议用一“干净”的计算机。

 

11、在 CCS 下,如何选择有效的存储器空间?

 

CCS 下的存储器空间最好设置同你的硬件,没有的存储器不要有效。这样便于调试,CCS 会发现你调入程序时或程序运行时,是否访问了无效地址。

1)在 GEL 文件中设置。参见 CCS 中的示例。

2)在 OptiON 菜单下,选择 Memory Map 选项,根据你的硬件设置。注意一定要将 Enable Memory Mapping 置为使能。

 

12、在 CCS 下,OUT 文件加载时提示“Data verification failed...”的原因?

 

Link 的 CMD 文件分配的地址同 GEL 或设置的有效地址空间不符。中断向量定位处或其它 代码、数据段定位处,没有 RAM,无法加载 OUT 文件。解决方法:

1)调整 Link 的 CMD 文件,使得定位段处有 RAM。

2)调整存储器设置,使得 RAM 区有效。

 

13、为什么要使用 BIOS?

 

1)BIOS 是 Basic I/O System 的简称,是基本的输入、输出管理。

2)用于管理任务的调度,程序实时分析,中断管理,跟踪管理和实时数据交换。

3)BIOS 是基本的实时系统,使用 BIOS 可以方便地实现多任务、多进程的时间管理。

4)BIOS 是 eXpress DSP 的标准平台,要使用 eXpress DSP 技术,必须使用 BIOS。

 

14、5V/3.3V 如何混接?

 

TI DSP 的发展同集成电路的发展一样,新的 DSP 都是 3.3V 的,但目前还有许多外围电路

是 5V 的,因此在 DSP 系统中,经常有 5V 和 3.3V 的 DSP 混接问题。在这些系统中,应注

意:

1)DSP 输出给 5V 的电路(如 D/A),无需加任何缓冲电路,可以直接连接。

2)DSP 输入 5V 的信号(如 A/D),由于输入信号的电压>4V,超过了 DSP 的电源电压,DSP

的外部信号没有保护电路,需要加缓冲,如  74LVC245 等,将 5V 信号变换成 3.3V 的信号。

3)仿真器的 JTAG 口的信号也必须为 3.3V,否则有可能损坏 DSP。

 

15、如何选择 DSP 的电源芯片?

 

TMS320LF24xx:TPS7333QD,5V 变 3.3V,最大 500mA。

TMS320VC33: TPS73HD318PWP,5V 变 3.3V 和 1.8V,最大 750mA。

TMS320VC54xx:TPS73HD318PWP,5V 变 3.3V 和 1.8V,最大 750mA; TPS73HD301PWP, 5V 变 3.3V 和可调,最大 750mA。

TMS320VC55xx:TPS73HD301PWP,5V 变 3.3V 和可调,最大 750mA。 TMS320C6000:PT6931,TPS56000,最大 3A。

 

16、DSP 的最高主频能从芯片型号中获得吗?

 

TI 的 DSP 最高主频可以从芯片的型号中获得,但每一个系列不一定相同。

1)TMS320C2000 系列:

TMS320F206-最高主频 20MHz。

TMS320C203/C206-最高主频 40MHz。

TMS320F24x-最高主频 20MHz。

TMS320LF24xx-最高主频 30MHz。

TMS320LF24xxA-最高主频 40MHz。

TMS320LF28xx-最高主频 150MHz。

2)TMS320C3x 系列:

TMS320C30:最高主频 25MHz。

TMS320C31PQL80:最高主频 40MHz。

TMS320C32PCM60:最高主频 30MHz。

TMS320VC33PGE150:最高主频 75MHz。

3)TMS320C5000 系列:

TMS320VC54xx:最高主频 160MHz。

TMS320VC55xx:最高主频 300MHz。

4)TMS320C6000 系列:

TMS320C62xx:最高主频 300MHz。

TMS320C67xx:最高主频 230MHz。

TMS320C64xx:最高主频 720MHz。

 

17、如何选择 DSP 的外部存储器?

 

DSP 的速度较快,为了保证 DSP 的运行速度,外部存储器需要具有一定的速度,否则 DSP 访问外部存储器时需要加入等待周期。

1)对于 C2000 系列: C2000 系列只能同异步的存储器直接相接。 C2000 系列的 DSP 目前 的最高速度为150MHz。建议可以用的存储器有:

CY7C199-15:32K×8,15ns,5V;

CY7C1021-12:64K×16,15ns,5V; CY7C1021V33-12:64K×16,15ns,3.3V。

 

2)对于 C3x 系列: C3x 系列只能同异步的存储器直接相接。 C3x 系列的 DSP 的最高速度, 5V 的为40MHz,3.3V 的为 75MHz,为保证 DSP 无等待运行,分别需要外部存储器的速度 <25ns 和<12ns。建议可以用的存储器有:

ROM: AM29F400-70:256K×16,70ns,5V,加入一个等待;

AM29LV400-55(SST39VF400):256K×16,55ns,3.3V,加入两个等待(目前没有更快的 Flash)。 SRAM:CY7C199-15:32K×8,15ns,5V;

 

 

CY7C1021-15:64K×16,15ns,5V;

CY7C1009-15:128K×8,15ns,5V;

CY7C1049-15:512K×8,15ns,5V;

CY7C1021V33-15:64K×16,15ns,3.3V;

CY7C1009V33-15:128K×8,15ns,3.3V;

CY7C1041V33-15:256K×16,15ns,3.3V。

 

3)对于 C54x 系列: C54x 系列只能同异步的存储器直接相接。 C54x 系列的 DSP 的速度为 100MHz 或160MHz,为保证 DSP 无等待运行,需要外部存储器的速度<10ns 或<6ns。建议 可以用的存储器有:

ROM: AM29LV400-55(SST39VF400):256K×16,55ns,3.3V,加入 5 或 9 个等待(目前 没有更快的Flash)。

SRAM: CY7C1021V33-12:64K×16,12ns,3.3V,加入一个等待; CY7C1009V33-12:128K×8,12ns,3.3V,加入一个等待。

4)对于 C55x 和 C6000 系列: TI 的 DSP 中只有 C55x 和 C6000 可以同同步的存储器相连, 同步存储器可以保证系统的数据交换效率更高。

ROM: AM29LV400-55(SST39VF400):256K×16,55ns,3.3V。 SDRAM: HY57V651620BTC-10S:64M,10ns。

SBSRAM: CY7C1329-133AC,64k×32;

CY7C1339-133AC,128k×32。

FIFO:CY7C42x5V-10ASC,32k/64k×18。

 

    以上都节选自http://www.weeqoo.com/zhuanti/dsp/,里面包含很多很好很强大的内容,基本分两部分,开始介绍DSP处理器的相关内容,之后通过实例介绍了DSP在实际应用中的各个典型领域中的一些疑问及解决。有问题,大家可以一块交流学习。


http://chatgpt.dhexx.cn/article/M8LD5NbX.shtml

相关文章

手把手教你学DSP:基于TMS320C55x

书名:手把手教你学DSP&#xff1a;基于TMS320C55x 作者:陈泰红 副书名: 出版日期:2011年8月1日 出版社:北京航空航天大学出版社 页数:348 《手把手教你学DSP&#xff1a;基于TMS320C55x》是以TMS320C55x系列高性能低功耗DSP为主&#xff0c;主要介绍了以数字信号处理器&#xf…

手把手教你学DSP(TMS320X281X) 2020-11-30

摘要&#xff1a; 本收藏夹内容为自己看《手把手教你学dspTMS320X281X》(顾卫刚版)图书的笔记&#xff0c;只是记录一下自己学习的思想历程。由于自己硬件学习也是新手&#xff0c;如有错误&#xff0c;请评论或者私信指出&#xff0c;如果看见一定更正&#xff1b;如果感觉本…

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

目录 1 c语言与汇编语言器 2 配置SCI寄存器 2.1 了解SCI寄存器 2.2 使用位定义的方法定义寄存器 2.2.1 位域 2.2.2 声明共同体 2.2.3 结构体 2.2.4 查看寄存器的值 2.3 寄存器文件空间分配 本节内容看懂之后主要是头文件程序的解析。 1 c语言与汇编语言器 一些对时间要…

规则引擎架构-基于aviator

目录 aviator使用场景ASM 字节码操控框架aviator 表达式例子debug表达式类生成过程b-ca生成的class文件 aviator使用场景 github地址&#xff1a;aviator Aviator的特性 支持大部分运算操作符&#xff0c;包括算术操作符、关系运算符、逻辑操作符、正则匹配操作符(~)、三元表…

0.1、Aviator 的使用

文章目录 前言一图胜千言Maven 依赖代码 Demo工具类和测试测试结果参考 前言 google 公司提供了一个工具包&#xff0c;可以方便的用于复杂规则的校验场景。 一图胜千言 Maven 依赖 <dependency><groupId>com.googlecode.aviator</groupId><artifactId…

JVM内存分析:Aviator低版本内存泄漏问题分析

目录 1.频繁FullGC告警 2.堆转储操作生成dump文件 3.利用MAT工具分析dump文件 3.1 大对象视图分析内存泄漏原因 3.2 Aviator框架中什么地方用到ThreadLocal&#xff1f; 3.3 fnLocal为什么存在内存泄漏&#xff1f; 3.4 LambdaFunctionBootstrap为什么没有释放&#xff…

Aviator 规则引擎介绍

先说结论&#xff1a; 规则简单&#xff1a;qlexpress或者avaitor&#xff1b;规则复杂&#xff1a;drools 最终选择是因为&#xff1a;足够轻量级&#xff0c;社区活跃度较好&#xff0c;最新jar包更新于22年4月 String expression "a河北省&&((b男人||c>3…

aviator实战

aviator规则引擎轻量、高性能可以帮我们解决很多配置规则的问题 官方文档参考&#xff1a;Aviator帮助文档 实战一把aviator&#xff0c;举个栗子 对年龄在40岁以内、职级大于等于3的“宋姓”销售人员发放提成&#xff0c; 提成计算公式“销售量 * 单件提成金额 * 10%” 代码…

aviator java,基于Aviator的规则引擎系统设计

项目里或多或少的都会有一些基于规则判断的代码&#xff0c;而往往这部分逻辑判断代码都写在项目里&#xff0c;改规则就得改代码&#xff0c;所以就很不方便&#xff0c;而且随着规则越多&#xff0c;代码越繁杂。 最近有时间&#xff0c;设计了一套基于Aviator的规则引擎系统…

Aviator源码:Aviator表达式引擎执行过程源码分析

目录 1.if执行脚本示例 2.源码分析 2.1 compile执行过程 2.1.1 CodeGenerator 2.1.2 ExpressionParser 2.1.3 if脚本ASM反编译结果 2.2 compiledExpression.execute执行过程 3.总结概述 由于Aviator支持的脚本语法较多&#xff0c;下面通过项目中使用较多的if语句来对a…

Aviator使用

“初步了解和使用Aviator” 1.Aviator简介 Aviator 是一个高性能&#xff0c;轻量级的java语言实现的表达式求值引擎&#xff0c;主要用于各种表达式的动态求值。 官方文档 github地址 支持数字、字符串、正则表达式、布尔值、正则表达式等基本类型&#xff0c;完整支持所有…

java aviator_Aviator 表达式求值引擎开源框架

简介 Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎&#xff0c;主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎&#xff0c;为什么还需要Avaitor呢&#xff1f; Aviator的设计目标是轻量级和高性能&#xff0c;相比于Groovy、JRuby…

java aviator_Aviator——让表达式飞起来

《飞行大亨》是我很喜欢的一部电影&#xff0c;不过这里我想介绍的是一个叫Aviator的开源的Java表达式求值器。 一、轮子的必要性 表达式的求值上&#xff0c;java的选择非常多&#xff0c;强大的如Groovy、JRuby&#xff0c;N年没维护的beanshell&#xff0c;包括javaeye上朋友…

Aviator

Aviator 简介 Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎&#xff0c;主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎&#xff0c;为什么还需要Avaitor呢&#xff1f; Aviator的设计目标是轻量级和高性能 &#xff0c;相比于Groo…

Aviator介绍

Aviator简介 Aviator是一个高性能、轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值。现在已经有很多开源可用的 java 表达式求值引擎,为什么还需要 Avaitor 呢? Aviator的设计目标是轻量级和高性能,相比于Groovy、JRuby的笨重, Aviator非常小, 加上…

西电计算机学院名誉院长,杨孟飞院士受聘为西电计科院名誉院长及讲席教授

西电新闻网讯(通讯员 陈龙)12月21日上午&#xff0c;西安电子科技大学计算机科学与技术学院名誉院长杨孟飞院士“华山学者”讲席教授及战略咨询委员会委员聘任仪式在北校区主楼Ⅱ区319会议室举行&#xff0c;校长杨宗凯、副校长王泉参加仪式。仪式由计科院执行院长崔江涛主持。…

北航计算机学院新闻,澳门理工学院代表团访问我校计算机学院

北航新闻网1月21日电(通讯员 盛浩)2019年1月16日&#xff0c;澳门理工学院副院长李雁莲教授、孙毓奇教授等一行三人到北航计算机学院就双方合作等事项进行交流。 座谈会由先进计算机应用技术教育部工程研究中心熊璋教授主持&#xff0c;计算机学院副院长胡春明副教授、中心李超…

【华人学者风采】陈晓峰 西安电子科技大学

【华人学者风采】陈晓峰&#xff0c;西安电子科技大学网络与信息安全学院副院长。研究方向包括公钥密码学、金融密码学、云计算安全、数据安全、区块链技术及应用、人工智能安全。曾获荣誉&#xff1a; 国家万人计划科技创新领军人才&#xff0c;教育部“青年长江学者” &#…

港科资讯 | 倪明选校长等出席江门“双碳”实验室揭牌暨项目签约仪式

12月7日&#xff0c;由香港科技大学&#xff08;广州&#xff09;&#xff08;筹&#xff09;和江门市政府发起共建的江门“双碳”实验室举行了揭牌暨项目签约仪式&#xff0c;江门双碳实验室正式启动成立。香港科技大学&#xff08;广州&#xff09;&#xff08;筹&#xff09…

莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

一、理解 我的理解就是巧妙的暴力&#xff0c;利用双指针以及分块思想&#xff0c;巧妙的移动双指针&#xff0c;时间复杂度可以达到O(NlogN)。 强推博客&#xff1a;写的又好又全。链接 二、套路 1、普通莫队 【1】核心代码 bool cmp(node a,node b){return belong[a.l]…