第一篇:DSP各种知识点总结
DSP芯片的特点:(1).哈佛结构(程序空间和数据空间分开)(2).多总线结构.(3)流水线结构(取指、译码、译码、寻址、读数、执行)(4)多处理单元.(5)特殊的DSP指令(6).指令周期短.(7)运算精度高.(8)硬件配置强.(9)DSP最重要的特点: 特殊的内部结构、强大的信息处理能力及较高的运行速度。2 三类TMS320:(1)TMS320C2000适用于控制领域(2)TMS320C5000应用于通信领域(3)TMS320C6000应用于图像处理 DSP总线结构: C54x片内有8条16位主总线:4条程序/数据总线和4条对应的地址总线。1条程序总线(PB):传送自程序储存器的指令代码和立即操作数。3条数据总线(CB、DB、EB):CB和EB传送从数据存储器读出的操作数;EB传送写到存储器中的数据。4条地址总线(PAB、CAB、DAB、EAB)传送相应指令所需要的代码 4存储器的分类: 64k字的程序存储空间、64K字的数据存储空间和64K字的I/O空间(执行4次存储器操作、1次取指、2次读操作数和一次写操作数。
5存储器空间分配 片内存储器的形式有DARAM、SARAM、ROM。RAM安排到数据存储空间、ROM构成程序存储空间。(1)程序空间:MP/MC=1
40000H~FFFFH 片外
MP/MC=0 4000H~EDDDH 片外
FF00H~FFFFH 片内 OVLY=1 0000H~007FH 保留
0080H~007FH 片内
OVLY=0 0000H~3FFFH片外(2)数据空间:DROM=1 F000H~F3FFH 只读空间 FF00H~FFFH保留
DROM=0 F000H~FEFFH 片外
6数据寻址方式
(1)立即寻址(2)绝对寻址<两位>(3)累加器寻址(4)直接寻址@<包换数据存储器地址的低7位>优点:每条指令只需一个字(5)间接寻址*按照存放某个辅助寄存器中的16位地址寻址的AR0~AR7(7)储存器映像寄存器寻址(8)堆栈寻址
7寻址缩写语 Smem:16位单寻址操作数 Xmem Ymem 16位双
dmad pmad PA16位立即数(0-65535)scr源累加器 dst目的累加器 lk 16位长立即数
8状态寄存器ST0 15~13ARP辅助寄存器指针 12TC测试标志位 11C进位位 10累积起A的一出标志位OVA 9OVB 8~0DP数据存储器页指针
9状态寄存器ST1 CPL:直接寻址编辑方式
INTM =0开放全部可屏蔽中断 =1关闭
C16 双16位算数运算方式
10定点DSP 浮点DSP:定点DSP能直接进行浮点运算,一次完成是用硬件完成的,而浮点需要程序辅助。
11重复操作:重复执行单条指令,程序块重复操作(可以响应中断)12复位操作:处理器从FF80h处取指 13中断:两大类:(1)可屏蔽:立即响应(2)非屏蔽:(满足下列条件才能响应)①优先级别最高②状态寄存器ST1中的INTM位为0③中断屏蔽寄存器IMR中的相应位为1 三个阶段:(1)接受中断请求(2)响应中断(3)执行中断服务程序
14复位的三种方式:上电复位,手动复位,软件复位
15常用汇编命令:.bss为未初始化的变量保留空间;usect在一个未初始化的有命名的段中为变量保留空间;.data通常包含了初始化的数据;.sect定义已初始化的带命名段,其后的数据存入该段;.text该段包含了可执行的代码;title.接在后面的是程序名;int用来设置一个或多个16位无符号整型常数;word用来设置一个或多个16位带符号整型常数 16.DSP系统的特点:(1)精度高、抗干扰能力强,稳定性好。(2)编程方便、易于实现复杂算法(含自适应算法)。(3)可程控。(4)接口简单。(5)集成方便。
17.CPU部分:①先进的多总线结构(1条程序总线、3条数据总线和4条地址总线)。②位算术逻辑运算单元(ALU),包括1个40位桶形移位寄存器和2个独立的40位累加器。③17×17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算。④比较、选择、存储单元(CSSU):用于加法/比较选择。⑤指数编码器:可以在单个周期内计算40位累加器中数值的指数。⑥双地址生成器:包括8个辅助寄存器和2个辅助寄存器算术运算单元(ARAU)存储器空间
192 K字可寻址存储空间:64 K字程序存储空间、64 K字数据存储空间及64 K字I/O空间 ⑦功能结构上分:运算部件和控制部件 18.累加器:目的寄存器 用来存放从ALU或乘法器/加法器单元输出的数据。19.桶形移位器:立即数;asm,T低6位
20.TMS320C54X有两个通用引脚bio监视外部 xf 握手信号
21.COFF3.公共目标文件格式——COFF COFF的核心概念:使用代码块(段)和数据块(段)编程,而不是指令或数据简单的顺序编写。段的定义:就是在编写汇编语言源程序时,采用的代码块或数据块,它占据存储器的某个连续空间。21.COFF包含的三个缺省段 1text 2data 3bss 22.DSP指令系统:助记符和代数
23.Dsp开发工具:代码生成工具和代码调节工具 24.Dsp按照用途分类:通用型和专用型
AR3+是加2或者减2 25.1狭义理解为数字信号处理器,广义理解为数字信号处理方法
26.程序计数器的直可通过复位操作、顺序执行指令、分支转移、累加器转移、块重复、子程序调用、从累加器调用子程序、中断操作改变
27.MMR写操作流水线冲突时,采用推荐指令和插入空操作指令
28.定时器: 3个16位存储器映射寄存器组成:定时器寄存器(TIM)、定时器周期寄存器(PRD)、定时器控制寄存器(TCR)。
.title “example.asm”
;用双引号括起的源程序名
.mmregs
;定义存储器映射寄存器的替代符号
STACK
.usect “STACK”, 10h
;在数据存储器中留出16个单元作为
;堆栈区,名为STACK
.bss
a, 4
.bss
x, 4
;在数据存储器中空出4个存储单元存放
;变量x1,x2,x3和x4..bss
y, 1
.def
start
;在此模块中定义,可为别的模块引用
.data
;紧跟其后的是已初始化数据
table:
.word 1, 2, 3, 4
;在程序存储器标号为table开始的8个单
.word 8, 6, 4, 2
;元存放初始化数据
.text
;紧跟其后的是汇编语言程序正文
start:
STM
#0, SWWSR
;SWWSR置0,不插等待周期
S
STM
#STACK+10H,SP
;设置堆栈指针
STM
#a, AR1
;AR1指向a的首地址
RPT
#7
;从程序存储器向数据存储器
MVPD
table, *AR1+
;重复传递共8个数据
CALL
SUM
;调用惩罚累加子程序 end:
B
end
;循环等待
SUM:
STM
#a, AR3
;将洗漱的首地址附给AR3
STM
#x, AR4
;降变量x的首地址附给AR4
RPTZ
A, #3
;降累加器清零,重复执行下条指令4次
MAC
*AR3+, *AR4+, A
;乘法累加运算
STL
A, @y
;结果送往变量y的存储单元
RET
.end
;结束汇编,汇编器将忽略
5.堆栈用法:
压入操作:SP先减1,然后再将数据压入栈顶。
弹出操作:数据弹出后,再将SP加1。堆栈设置: size
.set 100 stack.usect “STK”, size
;自定义一个名为STK的保留空间,共100个单元
STM
#stack+size, SP;将这个保留空间的高地址(#stack+size)赋给SP,作为栈底,【例4.14】 对数组x[5]中的每个元素加1。
.bss
x, 5 begin:
LD
#1, 16, B
STM
#4,BRC
;BRC赋值为4
STM
#x,AR4
RPTB
next-1
;next-1为循环结束地址
ADD
*AR4,16,B,A
STH
A,*AR4+ next:
LD
#0, B
…
用next-1作为结束地址是恰当的。如果用循环回路中最后一条指令(STH指令)的标号作为结束地址,若最后一条指令是单字指令也可以,若是双字指令,就不对了。
【例4.15】 编写一段程序,首先对数组x[20]赋值,再将数据存储器中的数组x[20]复制到数组y[20]。
.title “exp15.asm”
.mmregs
STACK
.usect “STACK”, 30h
.bss
x, 20
.bss
y, 20
.data
table:
.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
.def start
.text Start:
STM
#x, AR1
RPT #19
MVPD
table, *AR1+;程序存储器传送到数据存储器
STM #x, AR2
STM
#y, AR3
RPT
#19
MVDD *AR2+, *AR3+;数据存储器传送到数据存储器 end:
B end
.end
计算 z=x+y-w LD @x,A ADD @y,A SUB @W, A STL A,@z 计算y=mx+b LD @m,T MPY @x,A ADD @b,A STL A,@y 计算 y=x1*a1+x2*a2 LD @x1,T MPY @a1,B LD @x2,T MAC @a2,B STL B,@y STH B, @y+1 找出最大值,并存放在累加器A中 STM #a,AR1 STM #x,AR2 STM #2, AR3 LD
*AR1+,T MPY *AR2+,A
;第一个成绩累加器A中 Loop LD *AR1+.T
MPY *AR2+,B ;其他乘积在累加器B中
MAX A
;累加器A和B比较,选大的存在A中
BANZ loop,*AR3 ;此循环中共进行三次乘法比较 数组 x【5】={1,2,3,4,5}初始化
.data TBL
.word
1,2,3,4,5
.bss
x,5
.text
STM
#x,AR5
RPT
#4
MVPD
TBL,*AR5+
第二篇:DSP调试总结
6416是定点型芯片,在项目中主要用来做下变频后数据的谱计算。FPGA中对所采数据进行下变频后通过DSP的EMIF口(64bit)传输到DSP中进行FFT运算,算完的谱数据再通过EMIF口回传至FPGA,再传至上位机进行频谱图的显示。
在这个过程中,并没有用DSP做多少事情,只是有一个FFT计算和EMIF口以及MCBSP口的数据与控制命令的传输,总体来说功能还是蛮简单的。
1、首先,FFT运算直接调用TI的C64XX的库函数就可以完成。在这个调试过程中,首先使用的是simulater环境进行软件仿真计算,根据计算出来的谱图发现结果是正确的,只是模拟数据和旋转因子在软仿真的时候耗费的时间太长(32K点)。可由MATLAB产生数据,然后导入数组,直接进行FFT验证之。
FFT消耗时间分析:在软件中可以设置观测FFT函数所消耗的时间,最后由两种结果,Total cycle 和Cpu cycle,其根据600M主频计算下来,做32K点时其耗时相差有100倍,即百毫秒与毫秒的差别,由于不确定时间应采取哪种,所以进而进行了板级实验。
在板级实验过程中,发现程序“经常偶尔”跑飞,一直也没有找到原因。最后经过多次试验用示波器检测出来的时间与用Cpu cycle计算出来的相近。此时,我们假设Cpu cycle是正确的,那换算出来的主频就只为400M。用示波器对分频时钟进行测试,发现现在CPU确实只工作在400M的主频,而不是最大600M的主频。
由此说明,芯片的配置可能有问题,并且还可以证明可以用Cpu cycle来计算程序的运行时间(当然DSP主频要确定)。
经databook查询,发现晶振的频率与其设置的主频选择有误,及用此晶振的频率,要改变外围电路配置才能达到最高频率。当然,也许maybe可能这个问题与DSP经常跑飞有关联。
改了之后发现其运行在666M的状态,超了66M,不晓得对芯片有没有影响,知道的大神可告知小弟,不胜感激...2、EMIF 与 MCBSP 的可按照自己的需要进行配置初始化。
EMIF用到了64位,在传输64位数据上纠结了很久,C语言上long即为64位,可在此只为40位。经一位大神提醒,使用long long类型搞定之,木有技术含量,发现自己基本功相当之不扎实。
第三篇:DSP理论课总结
GX_Joe 第一次课-----DSP概念 Q1:DSP的概念:
DSP可以代表数字信号处理技术(Digital Signal Processing),也可以代表数字信号处理器(Digital Signal Processor)。前者是理论和计算方法上的技术,后者是指实现这些技术的通用或专用可编程微处理器芯片。
数字信号处理包括两个方面的内容: 1.算法的研究
算法的研究是指如何以最小的运算量和存储器的使用量来完成指定的任务。诸如:语音与图像的压缩编码、识别与鉴别,信号的调制与解调、加密和解密,信道的辨识与均衡,智能天线,频谱分析等各种快速算法 2.数字信号处理的实现
数字信号处理的实现是用硬件、软件或软硬结合的方法来实现各种算法。它和单片机的主要区别在于数值处理和高速运算。数字信号处理的实现一般有以下几种方法:
基于软件仿真的MATLAB,基于PC的应用程序,单片机,FPGA,DSP,ASIC
Q2:DSP结构特点:(手把手P1)
强调实时性;除了具备普通微处理器所强调的高速运算和控制能力外,针对实时数字信号处理的特点,在处理器的结构、指令系统、指令流程上作了很大的改进,其主要特点如下:
(PS比较哈佛和冯诺依曼结构的区别)
冯.诺依曼指出:程序只是一种(特殊)的数据,它可以像数据一样被处理,因此可以和数据一起被存储在同一个存储器中——这就是著名的冯.诺依曼原理。注意:数据总线和地址总线共用。
哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。
数据指令存储区是分开的,但总线是分时复用得----改进型的哈佛结构
哈佛结构 Q3:DSP分类
Q4:选型(以TI公司为例)手把手P2-P3
Q5:DSP主要应用
Q6:DSP技术的现状和发展趋势
Q7:DSP系统的构成和工作过程 构成:
一个典型的DSP系统应包括抗混叠滤波器、数据采集A/D转换器、数字信号处理器DSP、D/A转换器和低通滤波器组成。
工作过程:
① 将输入信号x(t)进行抗混叠滤波,滤掉高于折叠频率的分量,以防止信号频谱的混叠;
② 经采样和A/D转换器,将滤波后的信号转换为数字信号x(n); ③ 数字信号处理器对x(n)进行处理,得数字信号y(n); ④ 经D/A转换器,将y(n)转换成模拟信号;
⑤ 经低通滤波器,滤除高频分量,得到平滑的模拟信号y(t)。Q8:什么是定点DSP和浮点DSP?
DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法。定点运算 DSP 在应用中已取得了极大的成功,而且仍然是DSP应用的主体。
和定点运算 DSP 相比,浮点运算 DSP 具有许多优越性: 浮点运算 DSP 比定点运算 DSP 的动态范围要大很多。定点 DSP 的字长每增加 1bit,动态范围扩大 6dB。16bit 字长的动态范围为 96dB。32bit 浮点运算 DSP 的动态范围可以作到 1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。
由于浮点 DSP 的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点 DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。32bit 浮点 DSP 的总线宽度较定点 DSP 宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的 DSP 目标子程序已使用到几十MB 存储器或更多;另一方面也为高级语言编译器、DSP 操作系统等高级工具软件的应用提供了条件。DSP 的进一步发展,必然是多处理器的应用。新型的浮点 DSP 已开始在通信口的设置和强化、资源共享等方面有所响应。
第二次课-------阅读TI文档(可以在user guide中通过索引找到)Q1:引脚分布
TMS320C5515/14/05/04/VC05/VC04 DSP General-Purpose Input/Output User's Guide 手把手---2.3 Q2:54X和55X的区别
Q3:HPI的概念及适用情况
HPI是HOST PORT INTERFACE(主机接口总线)的简称。HPI是一个与主机通信的并行接口,主要用于DSP与其他总线或CPU进行通信。信息可通过'C54x的片内存储器与主机进行数据交换。
第三次课---------外设及软件程序介绍 Q1:IIC总线及SPI总线比较 I2C VS SPI SPI是[单主设备(single-master)]通信协议(是一种高速的,全双工,同步的通信总线,以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)),这意味着总线中的只有一支中心设备能发起通信。
IIC 是多主设备的总线(IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源),IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线—— ‘serial data’(SDA)和 ‘serial clock’(SCL)。
第一总线拓扑结构/信号路由/硬件资源耗费
IIC 只需两根信号线,而标准SPI至少四根信号,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线——SCLK, SS和双向的MISO/MOSI,但SS线还是要和从设备一对一根。另外,如果SPI要实现多主设备结构,总线系统需额外的逻辑和线路。用IIC 构建系统总线唯一的问题是有限的7位地址空间,但这个问题新标准已经解决——使用10位地址。从第一点上看,IIC是明显的大赢家。
第二数据吞吐/传输速度
如果应用中必须使用高速数据传输,那么SPI是必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。
Q2:多媒体卡控制器(只是简介)作用:
多媒体卡控制器可以读写多媒体卡(MultiMediaCard,简称MMC卡)和数字存储卡(Secure Digital Memory Card,简称SD卡)上的存储器。该控制器有如下特点:
支持MMC/SD协议和SPI协议;软件支持未来的扩展升级;MMC控制器的运行频率可以通过程序设置; MMC控制器与存储卡之间控制传输速率的时钟可以通过编程设置。
MMC控制器可以在存储卡和CPU或DMA控制器之间传输数据,也可以进行卡对卡之间的传输。它们之间的通信可以按照MMC/SD协议也可以按照SPI协议进行,在基于MMC/SD协议时使用一条双向数据线(MMC卡)或4条双向数据线(SD卡),基于SPI协议时则是用两条串行数据线,一条向卡上存储数据,一条从卡上读回数据。下面是MMC控制器信号连接图。
从图中可以看到连接的信号有时钟信号
(CLK),控制信号(CMD)和数据信号,当连接的是MMC卡时,只
使用DAT0数据线,而连接的是SD卡时,则使用DAT0~3数据线。
应用实时时钟芯片支持库函数首先需要在头文件中包含csl_rtc.h文件。。。Q6:异步串口UART 1. 异步串口发送部分
异步串口发送部分包括一个发送保持寄存器(URTHR)和一个发送移位寄存器(URTSR),当异步串口工作在FIFO模式下时,发送保持寄存器可以缓存16个字节。发送部分由异步串口线路控制寄存器(URLCR)控制,发送格式如下: 1个起始位5、6、7或者8个数据位 1个奇偶校验位(可选)
1、1.5或者2个停止位
如果串口发送保持寄存器从内部数据总线接收到数据,当发送移位寄存器准备好时,异步串口模块将数据从送到保持寄存器发送到发送移位寄存器,发送移位寄存器通过TX引脚将串行数据发送出去。
在非FIFO模式下,当发送保持寄存器没有数据存储时,如果中断使能寄存器使能发送寄存器空中断,则产生该中断,而当一个新的字节被装入发送保持寄存器时这个中断被清除;在FIFO模式下,发送FIFO为空时产生中断,当新的字节被装入FIFO时中断被清除。2. 异步串口接收部分
异步串口接收部分包括一个接收移位寄存器(URRSR)和一个接收缓冲寄存器(URRBR)。当异步串口工作在FIFO模式下时,接收缓冲寄存器可以缓冲16个字节。接收部分的定时器由16倍接收时钟提供,在异步串口控制寄存器的控制下,接收部分可以接收如下格式数据: 1个起始位5、6、7或者8个数据位 1个奇偶校验位(可选)1个停止位
当接收移位寄存器从RX引脚收到数据后,将组合好的数据送到接收缓冲寄存器或者接收FIFO,异步串口可以为每个收到的字节存储3个错误状态信息位,包括奇偶校验错 误、帧错误和接收间断。
在非FIFO模式下时,如果一个字符被放到接收数据缓冲寄存器中,并且中断使能时将产生中断,该字符被读走时中断被清除;在FIFO模式下时,如果FIFO存储的数据量达到FIFO控制寄存器(URFCR)设定的触发值时将产生中断,而当FIFO存储的数据量小于触发值时中断被清除。3. 波特率产生器
异步串行通信需要满足各种不同通信速率的要求,模块采用波特率产生器,通过对输入时钟分频来适应串口的通信速率。波特率产生器的分频数可以从1到65535任意选择,异步串口的工作时钟BCLK应为波特率的16倍,即每个输入输出的位都将持续16个工作时钟,而如果串口工作在接收状态下,将在第8个工作时钟对该位采样,下面给出分频数的计算公式:
4.中断申请和DMA。。。
Q7:寻址方式
当硬件执行指令时,寻找指令所指定的参与运算的操作数的方法——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
C54x芯片的寻址方式可以分为两类:
数据寻址
程序寻址
Q8:指令表示方法
Q9:算术运算指令---实现数学计算
Q10:数据传送指令
Q11:逻辑运算指令
Q12:程序控制指令
Q13:并行操作指令
Q14:重复操作指令
可以使紧随其后的一条指令或程序块重复执行,分为单指令重复和程序块重复。
Q17:探测点
探测点是一种设置在源文件某条语句上的特殊断点,主要用来与一个外部文件的读/写相关联。
当用户程序运行到探测点时,自动地从与该探测点连接的外部文件中读入数据或将计算的结果输出给外部文件。完成数据的传输后,自动恢复程序的运行。探测点在算法开发过程中是一个有用的工具,可用来与PC主机进行数据通信。探测点可以进行一下工作:
1从PC主机的文件中,传输输入数据至目标系统的缓冲区,作为算法开发的模拟数据;
2从目标系统的缓冲区中,传输输出数据至PC主机的文件中,以便进行数据分析;
3更新窗口,例如图形、数据等。
PS:Probe Point 和 Break Point比较-----手把手P64
Probe Point 的使用方法-----手把手P67(实验中有)Q18:数据观察方法
图形显示:graph。。时域/频率 手把手P62 第4课--------DSP+XXX:相关设计的架构
第5课--------DSP硬件系统设计:ADC Q1:ADC理论 采样与编码
Q3:分类
1.SAR(逐次逼近)型ADC:
逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。
TLC0831(德州仪器公司(TI)推出的TLC0831/2是广泛应用的8位A/D转换器。)TLC0831可以外接高精度基准以提高转换精度,TLC0832的基准输入在片内与VCC连接。TLC0831/2的操作非常类似TLC0834/8(更多输入通道),为以后升级提供便利
2.Σ-Δ(Delta-Sigma)调制型 ADC:
Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。
3.流水线ADC结构适合于几Msps到100Msps采样速率,其复杂性随分辨率的增加只是线性(而不是指数)增加,具有高速、高精度和低功耗特性,适用于各种场合,特别是数字通讯领域,在这些领域中转换器的动态性能经常比微分非线性(DNL)和积分非线性等传统的ADC特性更重要。在大多数的应用中,流水线ADC的数据延迟都无关紧要。
PS:AD转换器分类
下面简要介绍常用的几种类型的基本原理及特点:积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。
1)积分型(如TLC7135)
积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。2)逐次比较型(如TLC0831)
逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。3)并行比较型/串并行比较型(如TLC5510)
并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。
串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级(Multistep/Subrangling)型AD,而从转换时序角度又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。4)Σ-Δ(Sigma?/FONT>delta)调制型(如AD7705)
Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。
5)电容阵列逐次比较型
电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易。如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器。最近的逐次比较型AD转换器大多为电容阵列式的。6)压频变换型(如AD650)压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。
第四篇:DSP错误总结!
1.warning: entry point symbol _c_int00 undefined 使用C写DSP时,在rts.lib库中定义了入口地址:_c_int00 而使用汇编语言编程,就不用包括rts.lib库,所以入口地址及其标号可以由人工指定。而使用C时,就不同了,必须从rts.lib定义的这个入口_c_int00入口,是约定的。
The –c and cr options cause the linker to use linking conventions that are required by the C compiler.”
其实在汇编语句中也可以不用_c_int00来定义程序入口,只要把编译器选项-c去掉,用-e 选项来定义你想要的程序入口地址。这个可在CMD文件里加-c。
这个错误是没有加库文件,你可以project view 右键加入,也可以在project->build options->Linker->libraries中加入../../lib/cls/lib/(搜索路径)还要加上库名cslDM642.lib;rts6400.lib分号隔开。
2.Error: Illegal opcode at pc = 0x00000190
我第一次遇到这种错误,因为B跳转(分支)指令要有五个周期的延时,所以加上NOP 5就好了。
b.s2 b3;NOP 5
3.error: can't allocate.text, size 00006e40(page 0)in LP(avail: 00001000)>> error: errors in input'./Debug/MyAsmTest.out' not built
解决方法:1.是库的问题 2.把你的汇编程序和C程序起不同的名字。
6.creating output section.const without SECTIONS specification >> warning: creating output section.switch without SECTIONS specification
>> warning: creating output section.sysmem without SECTIONS specification、Printf()需要上面的段.sysmem 段??
前十个参数将被从左到右依次放入寄存器A4、B4、A6、B6、A8、B8、A10、B10、A12和B12。返回值是整型或32位的浮点型,则放在寄存器A4中返回;假如返回值是双精度或是长双精度型,则放在A5:A4中返回;假如返回值是一个结构类型,则将其结构的地址放在A3中返回。
最近总是出现相同的错误!唉!
1.C运行库文件rtsXX.lib提供了C函数,及初始化函数c_int00().程序写进EPROM上电后直接运行,就必须包含Vectors.asm文件,必须被.cmd文件分配到0地址。
DSP复位后,跳转到c_int00(),在它之中完成初始化堆栈和页面指针,全局变量等,然后再调用main()函数。
2.连接器-c选项用于设置运行时初始化全局变量(Run-time-autoinitalization),-cr选项用于设置在加载时初始化(Load-time initialization)。编译器将C中的初始化的全局/静态变量的初始化放在.cinit段中。但实际的全局/静态变量占有的地址空间在.bss段。3.大数组far b[1024] 放在.far段,.bss放小变量。
4.restict 标明一个指针是指向一个特定对象的惟一的指针。5.intrinsics定义内联函数。内联函数前面加_ 6.软件流水:-o2,-o3时会使用软件流水。
Prolog(软件流水填充),epilog(软件流水排空)
错误:undefined first referenced symbol in file
-------------------------_dopt C://CCStudio_v3.3//MyProjects//dianji//Debug//dianji.obj 改法一种是库没有加对,一种是汇编文件和C文件重名字了。
程序优化: 3个阶段,1.不考虑相关知识,直接写C语言程序。2.利用C优化方法优化C程序。
3.从C中抽出对性能影响较大的程序段,改写成汇编程序。
查看指令运行时间,clock()函数 #include
Clock_t start ,stop,overhead;Start = clock();Stop = clock();
Overhead = stop – start;
Start = clock();函数
Stop = clock();
Printf(%d,start-stop-overhead);
-g/-s :-g 使能符号和汇编调试;-s
第五篇:DSP BIOS使用总结
DSP/BIOS 实现实时数据调试和交换
摘要:本文介绍了基于TI公司DSP/BIOS实现实时数据调试和交换的方法
----数字信号处理技术已成为目前最广泛的应用技术之一,TI公司在不断推出各种新型高速低功耗DSP的基础上,提出了基于DSP的微型实时操作系统BIOS的概念.----DSP所面临的系统越来越复杂,诸如多任务处理,烦琐的硬件设备管理,实时数据处理及传送等等,传统的DSP编程越来越难以胜任.----TI公司推出的BIOS可以支持以上功能,它提供了众多的模块及面向用户的API接口,包括多优先级多任务系统调度,内存管理,硬件DRIVER抽象,以及数字信号处理所独特的实时数据调试及交换的支持..1 BIOS中的图形化管理界面
----先介绍一下BIOS中的图形化管理界面:DSP/BIOS CONFIGURATION TOOLS。在 CCS 集成 开发环境中打开FILE
-> NEW->
DSP/BIOS
CONFIGURATION,就可以看到DSP/CONFIGURATION TOOLS,在这里用图形化的界面集中管理所有的BIOS模块,包括硬中断,软中断,任务,时钟,管道等,在每个模块下都可以添加新的对象以及编辑它的属性,添加完对象会在工程中自动生成相应的代码,用户程序中只需声明此对象,然后调用它的API函数就可以了。
----下面主要介绍数字信号处理所独特的实时数据调试及交换
----在通常的软件调试中如何去观察变量?很简单,我们会单步运行或者设置断点,然后在WATCH窗口中观察变量的值.这种经典的调试方法在数字信号处理中捉荆见拙,因为我们面对的是实时任务,程序的停顿会使我们面对的系统面目全非.DSP/BIOS的解决方案是提供LOG模块,在目标DSP内,LOG对象将要监控的信息实时的捕捉存放在DSP的特定缓冲LOG
BUFFER中,在DSP进入空闲的时刻通过JTAG接口传回主机,主机端的CCS集成环境将接受数据并显示在打开的LOG观察窗口中,从而不打断正常的程序运行情况下,获取必要的调试信息。.2 LOG模块
----下面介绍如何使用LOG模块。在现有的工程中打开DSP/BIOS CONFIGURATION TOOL,在LOG模块上单击右键选择INSERT LOG,然后修改新添加的对象名为 LogTarget.在程序里添加以下代码
#include
#include
extern far LOG_Obj logTarget;//声明为外部对象
func()
{
LOG_printf(&logTarget, …);
}
----这样就完成了调试数据向主机的传送。在运行代码前,我们打开DSP/BIOS->MESSAGE
LOG,在打开的LOG窗口中,单击右键打开PROPERTY PAGE,选择Name为LogTarget.然后运行
代码,LOG.printf会将所需的信息打印到打开的LOG窗口中,这样能够在不影响系统运行的时候,观察变量,打印信息了.----另一个重要的用于实时调试的模块是STS,用于提供在程序运行中的各种统计数据,如运行时间,特定的变量等。在DSP中,STS将所要统计的数据放在一组32位的变量,同样在DSP进入IDLE时刻,将数据通过JTAG接口传送给主机中的64位变量进行统计,并清除DSP中的32位变量。.3 STS模块
(续致信网上一页内容)----下面介绍一下STS的使用
----在工程中打开DSP/CONFIGURATION TOOLS,并在STS模块下添加一个对象stsObj.----在程序里添加以下代码
#include
#include
extern far STS_Obj stsObj;
//通常有三种使用方法
//1。统计消耗的时钟数
func()
{
STS_set(&stsObj, CLK_gethtime());//设置一个起始时刻
“do algorithm”//运行算法
STS_delta(&stsObj, CLK_gethtime());//得到自上一个STS_set到目前的时钟数
}
//2。统计变化的变量
func()
{
STS_add(&stsObj, pitch);//将变量pitch在一段循环中的最大值,平均值及总和打印出来
}
//3。统计变量改变的差值
STS_set(&stsObj,targetValue);
“processing”
STS_delta(&stsObj,newValue);//将变量改变的差值统计出来
----在运行代码前,在CCS中打开TOOLS..DSP/BIOS..STATISTICS VIEW,在打开的STATISTICS窗口
中,单击右键打开PROPERTY PAGE,选择要显示的STS对象及要观察的统计数据,如平均值,总数,循环次数等.运行代码,所要观察的统计数据会出现在STATISTICS窗口中,这样我们能够在不影响系统运行的时候,获取有关的统计信息了.----上面我们介绍的STS模块提供了灵活的获取统计数据的方法。.4 RTDX模块
----下一个我们要提到的重要模块是RTDX(REALTIME DATA EXCHANGE),RTDX提供了实时连续探察
DSP内部处理的方法,我们可以在DSP全速运行的时候在主机和DSP间
进行数据的传输,用户可以在主机用OLE automation
client分析显示得到的数据.----RTDX包括主机部分和目标部分,目标DSP中程序调用RTDX目标库的API函数通过JTAG接口与主机交换数据,主机端客户程序通过OLE接口调用RTDX
HOST LIBRARY API与DSP交换数据。
目标DSP内输出管道的编程可以参照一下流程:
1)#include
2)RTDX_CreateOutputChannel(ochan);
声明一个全局的输出管道
3)RTDX_enableOutput(&ochan);
使能一个输出的管道
4)status = RTDX_write(&ochan, &data, sizeof(data));
将所要传出的数据data传递到管道
5)RTDX_disableOutput(&ochan);
关断管道
目标DSP内输入管道的编程与此类似
在主机端可以用VB,VC或者EXCEL编程
这里介绍一下VC环境下RTDX输入管道编程
1)输入RTDX支持库
#import
using namespace RTDXINTLib;
2)定义一个RTDX对象
IRtdxExpPtr rtdx;
3)初始化COM
::CoInitialize(NULL);
4)初始化COM对象
HRESULT hr = rtdx.CreateInstance(L“RTDX”);
5)打开一个管道
status = rtdx.Open(“ochan”, “R”)
6)从管道中读数据
status = rtdx.ReadI4(data)
7)关闭管道
status = rtdx.Close()
8)释放COM对象
rtdx.Release();
9)释放COM
::CoUninitialize();
主机端输出管道的编程与此类似.----如果安装有CCS,那么在C:tic6000examplesrtdxdisplays下的RTDX.EXE提供了一个通用的主机端接口程序,运行后,通过菜单配置,可以与DSP端RTDX管道建立连接,将接受的数据显示在表格中.