DSP考试文档格式.docx
《DSP考试文档格式.docx》由会员分享,可在线阅读,更多相关《DSP考试文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
数据写总线(EB、FB):
2组,16位。
2、C55x的CPU组成
●指令缓冲单元(I单元)
●程序流单元(P单元)
●地址-数据流单元(A单元)
●数据运算单元(D单元)
●存储器接口单元(M单元)
3、
(a)179脚BGA封装(底视图)(b)144脚PGE封装(顶视图)
4、电源引脚
数字电源,+1.6V,专为CPU内核提供电源。
数字电源,+3.3V,为I/O引脚提供电源。
数字电源,+3.3V,专为USB模块的I/O引脚(DP,DN和PU)提供电源。
数字电源,+1.6V。
专为USBPLL提供电源。
数字电源,+3.3V。
专为RTC模块的I/O引脚提供电源。
数字电源,+1.6V。
专为RTC模块提供电源。
数字地
模拟电源,专为10位A/D模块提供电源
模拟地,10位A/D内核部分接地引脚
模拟数字地,10位A/D模块的数字部分接地引脚
数字地,用于USBPLL
1.6V是为了降低功耗
5、对于ST0_55、ST1_55和ST3_55,对于其中一个地址,所有的C55x位均可访问;
在另外一个地址(称为保护地址),某些保护位不能被修改。
保护地址是为了提供对C54x代码的支持,以便写入ST0、ST1以及PMST(C54x对应ST3_55)
6、每个累加器分为低字(ACxL)、高字(ACxH)和8个保护位(ACxG),用户可以使用访问存储器映射寄存器的寻址方式,分别访问这3部分
7、CPU包括4个16位通用T寄存器:
T0、T1、T2、T3
8、低字的作用:
用于AR间接寻址模式,以及双AR间接寻址模式。
提供7位数据页内的16位偏移量(形成一个23位地址);
存放位地址;
作为通用寄存器或计数器。
9、CPU可以连接这个寄存器形成一个扩展系数数据指针(XCDP)
高7位(CDPH)用于指定要访问数据空间的数据页
低字(CDP)用来作为16位偏移量与7位数据页形成一个23位地址
10、如果C54CM=0,C55xCPU不支持C54x代码
如果C54CM=1,C55x的CPU支持C54x编写的代码
在使用C54x代码时就必须置位该模式,所有C55xCPU的资源都可以使用
在移植代码时,可以利用C55x增加的特性优化代码
可用以下指令或伪指令来改变模式:
BCLRC54CM;
清零C54CM(运行时)
.C54CM_off;
告知汇编器C54CM=0
BSETC54CM;
置位C54CM(运行时)
.C54CM_on;
告知汇编器C54CM=1
11、如果M40=0,D单元的计算模式选择32位模式
如果M40=1,D单元的计算模式选择40位的带符号移位模式
12、MPNMC位使能或禁止片上ROM
MPNMC=0:
微计算机模式。
使能片上ROM,可以在程序空间寻址。
MPNMC=1:
微处理器模式。
禁止片上ROM,不映射在程序空间里。
13、数据类型
C55x指令集支持以下数据类型:
字节(B):
8位
字(W):
16位
长字(LW):
32
14、DSP处理中断的步骤
(1)接收中断请求。
(2)响应中断请求。
(3)准备进入中断服务子程序。
(4)执行中断服务子程序。
15、可屏蔽中断
所有的可屏蔽中断都是硬件中断。
无论硬件何时请求一个可屏蔽中断,在一个中断标志寄存器里就有相应的中断标志置位。
该标志一旦置位,相应的中断还必须使能,否则不会得到处理。
16、当CPU接收到一个不可屏蔽中断请求时,立即无条件响应,并很快跳转到相应的中断服务子程序(ISR)
第三章
1、C55x通过以下三种寻址方式访问数据空间、存储器映射寄存器、寄存器位和I/O空间:
绝对寻址方式通过在指令中指定一个常数地址完成寻址
直接寻址方式使用地址偏移量寻址
间接寻址方式使用指针完成寻址
2、
语法元素
含义
Smem
来自数据空间、I/O空间或存储器映射寄存器的16位数据
Lmem
来自数据空间或存储器映射寄存器的32位数据
Cmem
来自内部数据空间的16位数据
3、绝对寻址方式
绝对寻址方式
k16绝对寻址方式
该寻址方式使用7位的DPH和16位的无符号立即数组成一个23位的数据空间地址,可用于访问存储器空间和存储器映射寄存器
k23绝对寻址方式
该寻址方式使用23位的无符号立即数作为数据空间地址,可用于访问存储器空间和存储器映射寄存器
(片外)I/O绝对寻址方式
该寻址方式使用16位无符号立即数作为I/O空间地址,可用于寻址I/O空间
4、直接寻址方式
寻址方式
描述
DP直接寻址
该方式用DPH与DP合并的扩展数据页指针寻址存储空间和存储器映射寄存器
SP直接寻址
该方式用SPH与SP合并的扩展堆栈指针寻址存储空间中堆栈
寄存器位直接寻址
该模式用偏移地址指定一个位地址,用于寻址寄存器中的一个或相邻的两个位
PDP直接寻址
该模式使用PDP和一个偏移地址寻址I/O空间
5、DP直接寻址方式和SP直接寻址方式是相互排斥的,只能有一种方式存在。
通过设置ST1_55的CPL位选择
CPL
寻址模式的选择
DP直接寻址模式
1
SP直接寻址模式
6、计算偏移地址的方法
访问空间
偏移地址(Doffset)的计算
数据空间
Doffset=(Daddr-.dp)&
7Fh
Daddr是一个16位的局部地址,.dp指DP的值,“&
”表示与操作
存储器映射寄存器
Doffset=Daddr&
Daddr是一个16位的局部地址,“&
”表示与操作,需要使用mmap()指令
7、间接寻址方式(代表性即可)
AR间接寻址
该模式使用AR0~AR7中的任一个寄存器访问数据。
CPU使用辅助寄存器产生地址的方式取决于访问数据的来源:
数据空间、存储器映射寄存器、I/O空间或是独立的寄存器位
双AR间接寻址
该模式与单AR间接寻址相似,只是借助两个辅助寄存器,可以同时访问两个或更多的数据
CDP间接寻址
该模式使用系数数据指针(CDP)访问数据。
CPU使用CDP产生地址的方式取决于访问数据的来源:
系数间接寻址
该模式与CDP间接寻址方式相似,它可以在访问数据空间某区块的数据的同时,借助双AR间接寻址访问别的区块的两个数据
8、P81-85例题例3-17P89例3-1890、91例题P122例3-56P123例3-57
第四章
1、软件开发环境
集成开发环境CCS(CodeComposerStudio)
非集成开发环境
2、C/C++编译器
用来将C/C++语言源程序(.C或.CPP)自动编译为C55x的汇编语言源程序(.asm
汇编器
用来将汇编语言源文件(.asm)汇编成机器语言COFF目标文件(.obj)
链接器
将汇编生成的、可重新定位的COFF目标模块(.obj)组合成一个可执行的COFF目标模块(.out)
3、COFF目标文件通常包括3个默认段,即
.text段,通常包含可执行代码
.data段,通常包含初始化数据
.bss段,通常为未初始化变量保留存储空间
图4-2目标文件中的段与目标存储器的关系
4、段伪指令的使用
这是一个汇编语言程序经汇编后生成的.lst文件,每行包含4个区域:
Field1:
源代码行号
Field2:
段指针
Field3:
目标代码
Field4:
初始源代码
5、链接器有2条伪指令支持上述任务(通常放在链接器命令文件(.cmd)中执行,是命令文件的主要内容):
MEMORYSECTIONS
6、外部符号
可以用伪指令.def、.ref或.global来定义或引用
.def:
定义符号。
用来定义在当前模块中定义、可在别的模块中引用的符号
.ref:
引用符号。
在当前模块中引用在别的模块中定义的符号
.global:
定义全局符号。
可以是上面的任何一种情况
7、P145伪指令
8、P146宏定义仔细看
9、源语句格式
助记符指令源语句的每一行通常包含4个部分:
标号区、助记符区、操作数区和注释区
助记符指令语法格式:
[标号][:
]助记符[操作数][;
注释]
10、汇编程序中的符号用于标号、常数和替代字符。
由字母、数字以及下划线和美元符号(A~Z,a~z,0~9,_和$)等组成。
符号名最多可长达200个字符。
在符号中,第1位不能是数字,并且符号中不能含空格。
11、局部标号是一种特殊的标号,使用的范围和影响是临时性的
局部标号可以被取消定义,并可以再次被定义或自动产生
用$n来定义,n是0~9的十进制数
用NAME?
定义,NAME是任何一个合法的符号名
局部标号不能用伪指令来定义
12、在链接命令文件中,可使用MEMORY和SECTIONS伪指令,为实际应用指定存储器结构和地址的映射
MEMORY:
用来指定目标存储器结构
SECTIONS:
用来控制段的构成与地址
13、P163两个程序
第五章
1、软件仿真器模式(Simulator)
可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试
硬件在线编程模式(Emulator)
可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序
2、P176图5-10
3、断点的作用作业
暂停程序的运行,以便观察程序的状态,检查或修正变量,查看调用的堆栈、存储器和寄存器的内容等
断点可以设置在编辑窗口中源代码行上,也可以设置在反汇编窗口中的反汇编指令上
设置断点时应当避免以下两种情形:
将断点设置在属于分支或调用的语句上
将断点设置在块重复操作的倒数第一或第二条语句上
第六章
1、C/C++语言具有如下基本特点:
语言简洁、紧凑,使用方便、灵活
运算符丰富,表达式类型多样化
数据结构类型丰富
具有结构化的控制语句
语法限制不太严格,程序设计自由度大
C/C++语言允许访问物理地址,能进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作
2、P193数据类型表6-1
3、ioport类型限定词只能用于全局或静态变量。
局部变量不能用ioport限制,除非变量是个指针
C55xC编译器对标准C语言进行了扩展,增加了interrupt关键字,来指定某个函数为中断函数。
Onchip关键字声明一个特殊指针,该指针所指向的数据可用作双MAC指令的操作数。
在链接时这些数据必须被链接到DSP片上存储器,否则会导致总线错误。
volatile
在任何情况下,优化器会通过分析数据流来避免存储器访问。
如果程序依靠存储器访问,则必须使用volatile关键字来指明这些访问。
编译器将不会优化任何对volatile变量的引用
4、编译源代码有如下的模式:
NormalANSI模式
K&
RC模式
宽松ANSI模式
严格ANSI模式
5、编译器包括剖析器(parser)、优化器(optimizer)和代码产生器(codegenerator)
6、基本优化选项P206
–o0:
采取的主要优化措施有:
简化控制流程,把变量安排到寄存器,简化循环,忽略未用代码,简化语句和表达式,把调用函数扩展为内嵌函数等。
–o1:
在–o0级优化的基础上,进一步采取局部优化措施,如:
进行COPY扩展,删除未用分配,忽略局部公共表达式等。
–o2:
在–o1级优化的基础上,进一步采取全局部优化措施,如:
进行循环优化,删除全局公共子表达式,删除全局未用分配等。
–o3:
这是最大可能的优化级别。
在–o2级优化的基础上,进一步进行的主要优化措施包括:
对于从未调用的函数移除其代码,对于从未使用返回值的函数删除其返回代码,把小函数代码自动嵌入到程序中(参考-oi选项),重新安排函数声明的次序等。
-oi<
size>
:
当采用–o3级优化时,优化器自动嵌入被调用的小函数。
只有小于size的函数才能被嵌入。
程序级(Program-Level)优化选项
如果一个函数的特定参量的值不变,编译器就会用这个值替换函数中的这个参量。
如果一个函数的返回值从不使用,编译器就会删除该函数的返回代码。
如果一个函数从未被调用,编译器就会删除该函数。
7、嵌入函数有助于提高代码的运行效率,主要有以下两个优点:
省去了函数调用有关的操作;
优化器可以把嵌入函数代码和周围代码放在一起自由地进行优化。
但是,嵌入函数会大幅度地增加程序代码长度,适合于小函数和调用次数较少的场合。
嵌入函数有以下方法:
嵌入本征函数、自动嵌入小函数、利用inline关键字嵌入函数。
8、主要优化技术总结
优化技术
可能的性能提升
应用难度
使用频率
问题
生成高效循环代码
高
易
经常
降低可移植性
高效地使用MAC硬件
中等
使用本征函数
9、C和汇编语言混合编程概述
采用汇编语言编程能够针对所采用DSP芯片的具体特点,所编程序执行效率高。
但是,不同公司的DSP芯片所提供的汇编语言各不相同,即使是同一公司的芯片,由于芯片的类型不同,其汇编语言也不尽相同。
用汇编语言开发DSP产品周期很长,软件修改、升级、移植都非常困难。
采用C语言编程具有开发效率高的优点,有助于提高产品开发速度,程序修改、升级和移植也很方便。
但是,与汇编语言编写的程序相比,C语言的执行效率较低,通常不能满足实时性要求,且无法控制某些硬件。
10、混合使用C代码和汇编语言代码的主要方法有:
使用几个独立的汇编代码模块,并将它们与编译了的C模块进行链接,这是最通用的方法。
在C源代码中使用汇编语言变量和常数。
将汇编语言程序直接嵌入C源代码中。
在C源代码中使用本征函数直接调用汇编语言语句。
第七章
1、小数定标的概念
设定一个16位数的小数点处于该数中的哪一位
可以表示不同大小和不同精度的小数
Q表示法
表7-1列出了一个16位数的16种Q表示及它们所能表示的十进制数值范围
2、不同的Q所表示的数不仅范围不同,而且精度也不相同
Q越大,数值范围越小,但精度越高
Q越小,数值范围越大,但精度就越低
例如,
Q0的数值范围是-32768到+32767,其精度为1;
Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051
3、如果算术运算结果超出寄存器所能表示的最大数就会出现溢出
因为16位定点DSP的动态范围有限,所以在使用时必须注意动态范围以防溢出
溢出还与输入信号的特性和运算法则有关
4、C55x的溢出处理机制
C55x有以下几种硬件特性可以处理溢出:
保护位
C55x的每个累加器都有8个保护位(39~32位),允许连续256次乘加操作而累加器不溢出
溢出标志位
C55x的每个累加器都有相关的溢出标志位,当累加器操作结果出现溢出时,这个标志位就会置位
饱和方式位SATD和SATA
SATD控制D单元的操作,SATA控制A单元的操作。
如果SATD=1,当D单元发生溢出时,对D单元的结果进行饱和处理。
不管饱和方式位的值是什么,当累加器发生溢出时,相应的溢出标志位都会被置位
A单元没有溢出标志位,但如果SATA=1,发生溢出时,结果也会进行饱和处理
☼饱和处理是用最近的边界值代替溢出结果。
例如,16位寄存器的范围是8000h(最小负数)~7FFFh(最大正数),饱和处理就是用7FFFh代替比7FFFh大的结果;
用8000h代替比8000h小的结果。
5、溢出的处理方法
饱和。
饱和是一种处理溢出的方法,但是饱和会剪掉部分输出信号,可能会引起信号失真和引起系统非线性。
输入定标。
分析所要使用的系统,假定最坏的情况,然后对输入信号定标,以防止溢出。
但是这种方法会极大地降低输出信号的精确度。
固定定标。
假定最坏的情况,对中间结果定标。
这种方法可以防止溢出,同时增加了系统的信噪比。
动态定标。
可以监测中间结果的范围,只在需要的时候对中间结果定标。
这种方法可以防止溢出但会增加计算量。
6、在FIR滤波器中处理溢出的最好方法是设计时使滤波器的增益小于1,这样就不需要对输入信号定标。
这种方法和累加器的保护位结合起来,可以有效地防止溢出。
7、在FFT操作里,每次蝶形运算后数据平均增加一位。
输入定标需要移位(FFT长度为N),这会导致在计算FFT之前就衰减6dB。
在固定定标中,每级蝶形运算输出除以2,这是最常用的FFT定标方法,因为它简单而且有比较好的信噪比。
但是,对于大的FFT,这种定标可能会使信息丢失。
另一种方法是动态定标,即在输出溢出时再除以2。
在这种情况下,会在这个过程中指定一个变量,每定标一次变量的值加1,计算结束后根据变量的值把结果乘以一个系数。
动态定标的信噪比最好,但会增加FFT循环次数。
8、FIRP237-P239P249
第八章
1、时钟发生器有三种工作模式:
旁路模式(BYPASS)
锁定模式(LOCK)
Idle模式
2、如果PLLENABLE=0,PLL工作于旁路模式,PLL对输入时钟信号进行分频。
分频值由BYPASSDIV确定:
如果BYPASSDIV=00,输出时钟信号的频率与输入信号的频率相同,即1分频
如果BYPASSDIV=01,输出时钟信号的频率是输入信号的1/2,即2分频
如果BYPASSDIV=1x,输出时钟信号的频率是输入信号的1/4,即4分频
3、如果PLLENABLE=1,PLL工作于锁定模式,输出的时钟频率由下面公式确定:
4、为了降低功耗,可以加载Idle配置,使DSP的时钟发生器进入Idle模式
当时钟发生器处于Idle模式时,输出时钟停止,引脚被拉为高电平。
5、定时器由两部分组成:
预定标计数寄存器(PSC),4位
主计数器(TIM),16位
6、寄存器:
计数寄存器(PSC,TIM)
周期寄存器(TDDR,PRD):
在定时器初始化或定时值重新装入过程中,将周期寄存器的内容复制到计数寄存器中
7、定时器发送中断信号或同步事件信号的频率可用下式计算:
8、C55x提供了专门的通用输入输出引脚GPIO
每个引脚的方向可以由I/O方向寄存器IODIR独立配置
引脚上的输入/输出状态由I/O数据寄存器IODATA反映或设置
9、介绍TMS320VC5509A内部集成的10位的连续逼近式模数转换器(ADC)。
10、
下面的公式,表示ADC可编程时钟分频器之间的关系:
ADC时钟=(CPU时钟)/(CPUCLKDIV+1)
ADC转换时钟=(ADC时钟)/(2×
(CONVRATEDIV+1))(必须等于或小于2MHZ)
ADC采样保持时间=(1/(ADC时))/(2×
CONVRATEDIV+1+SAMPTIMEDIV))(必须大于等于40)。
ADC总转换时间=ADC采样保持时间+(13×
(1/(ADC转换时钟)))
11、下边给出一个设置ADC的例子,设DSP系统时钟为144MHz。
(1)首先对系统主时钟分频,产生ADC时钟,该时钟应尽量运行在较低频率下,以降低功率消耗,在本例中ADC时钟是通过对系统时钟36分频产生的,则此时ADC时钟=144MHz/36=4MHz,根据公式
ADC时钟=(CPU时钟)/(CPUCLKDIV+1)
得出CPUCLKDIV=35
(2)对ADC时钟分频产生ADC转换时钟,该时钟最大值为2MHz。
为了获得2MHz的ADC转换时钟,需要对ADC时钟2分频。
由
ADC转换时钟=ADC时钟/(2×
(CONVRATEDIV+1))
得出CONVRATEDIV=0,
以及
ADC转换时间=13×
1/(ADC转换时钟)=13×
(1/2MHz)=6.5us。
(3)对采样和保持时间进行设置,这个值必须大于40。
ADC采样保持时间
=(1/(ADC时钟))/(2×
(CONVRATEDIV+1+SAMPTIMEDIV))
=(1/(4MHZ))/(2×
(0+1+SAMPTIMEDIV))
=250NS×
(2×
SAMPTIMEDIV)=40
由此得出SampTimeDiv=79
(4)整个转换时间为:
40(采样保持时间)+6.5(转换时间)=46.5us,
采样率=1/46.5=21.5kHz。