DSP控制器原理复习重点090607.docx
《DSP控制器原理复习重点090607.docx》由会员分享,可在线阅读,更多相关《DSP控制器原理复习重点090607.docx(37页珍藏版)》请在冰豆网上搜索。
![DSP控制器原理复习重点090607.docx](https://file1.bdocx.com/fileroot1/2023-4/23/f712a1f4-afa5-4e14-bd64-1653c542eb50/f712a1f4-afa5-4e14-bd64-1653c542eb501.gif)
DSP控制器原理复习重点090607
第1章DSP概述重点复习内容
1.1DSP控制器的特点
正确理解DSP控制器(即DSP芯片)的特点,它与单片机的主要区别是什么?
、DSP控制器主要特点是集成度高、低功耗、运算速度快、开发工具完善。
它与单片机的主要区别是存储器结构不同,DSP控制器采用哈佛结构,具有独立的程序和数据总线,而单片机采用冯.诺伊曼结构,程序地址、数据总线与数据地址、数据总线共用,不能同时存取指令代码和操作数,运算速度较慢。
涉及这些内容的本章习题如下:
1-1和单片机相比,DSP主要优势有哪些?
解:
速度快、有数字信号处理专用指令、运算精度高。
1-2简述DSP在数字信号处理中所起的作用是什么。
解:
实现数字信号处理中的常用算法,如FFT,FIR、IIR等。
1-3DSP数字信号处理系统的主要组成部分有哪些?
解:
低通滤波器、A/D转换器、DSP、D/A转换器、带通滤波器等组成。
1.2数值运算基础
前面讲过DSP控制器的主要优势之一是具有数字信号处理专用指令,所谓数字信号处理专用指令就包括对二进制定点数进行重定标的指令。
因此,学习DSP控制器原理,首先要理解几个重要概念:
(1)二进制定点数的定义是什么?
(2)二进制定点数补码的定义是是什么
(3)二进制定点数的定标含义是什么?
(4)2个定标的二进制定点数,在什么条件下可以直接加减运算?
(5)2个定标的二进制定点数,在什么条件下可以直接乘运算?
下面来解释这几个重要概念:
1.2.1二进制定点数的定义
二进制定点数是指对于长度为n的二进制数,人为默认小数点的位置,小数点左边的部分为整数部分,每位从最低位向左,按2的正整数次幂为权值开展;小数点右边的部分为小数部分,每位从最高位向右,按2的负整数次幂为权值开展。
例如,8位二进制定点数11000000B,人为规定小数点的位置在最高位与次高位之间,用小数点符号表示为:
1.1000000B,可见,这个二进制定点数有1位整数,7位小数,那么这个二进制定点数对应十进制数的真值(即带有正负号的数)是多少呢?
等于1.5吗?
不对!
为什么?
这涉及到二进制定点数补码的概念。
下面介绍二进制定点数补码的定义。
注意:
小数点的位置是人为默认的!
二进制定点数存放在内存单元中根本没有存放小数点的位!
也就是说,二进制定点数存放在内存单元中是被CPU当作整数进行存取并运算的!
1.2.2二进制定点数补码的定义
二进制定点数补码的定义在教材上讲的很清楚,这里不再赘述。
但是,总结出两句话作为经典:
(1)二进制定点数补码的最高位被人为看作为符号位,为1表示负号,为0表示正号,但是最高位实际上不是符号位,而是普通的二进制位,参与运算。
(2)当二进制定点数补码的最高位为1时,对该数“求反加1”,产生的结果按二进制定点数正数转换为十进制数,再人为在十进制数前面加一个负号,就是该二进制定点数补码数对应的十进制数的真值;当二进制定点数补码的最高位为0时,不要对该数“求反加1”,直接按二进制定点数正数转换为十进制数,再人为在十进制数前面加一个正号(通常正号省略),就是该二进制定点数补码数对应的十进制数的真值。
例如2.1节介绍的8位二进制定点数:
1.1000000B,其十进制真值用上述方法计算过程为:
因为最高位为1,故是负数,对1.1000000B求反加1为:
01000000B,注意:
人为默认小数点位置并没有变,所以01000000B对应的十进制数为0.5,再加一个负号变为0.5,即1.1000000B对应的十进制数的真值为0.5,而不是1.5!
涉及这些内容的本章习题如下:
1-18请将下列补码减法运算转换成加法算式:
(1)0001-0002H
(2)0010H-0020H
解:
(1)根据补码运算规则,[XY]补码=[X]补码+[Y]补码,因此
[0001H]补码=0001H,[0002H]补码=FFFEH
0001-0002H=0001H+[0002H]补码=0001H+FFFEH=FFFFH
(2)0010H-0020H=0010H+[0020H]补码=0010H+FFE0H=FFF0H
1-1916位二进制整数补码能表示的十进制数范围是多少?
指出下列二进制数运算是
否发生溢出。
(1)0068H+7E78H
(2)7F00H+FFF0H(3)8001H左移1位
(4)6000H右移一位(5)1234H-F000H(6)FFFFHFFFFH(无符号乘
法)
解:
16位二进制整数补码能表示的十进制数范围是32786(8000H)~+32767(7FFFH)。
(1)0068H+7E78H=7EE0H7FFFH,未溢出
(2)7F00H+FFF0H=17EF0H,C=1是进位,自然丢失,取7EF0H7FFFH,未溢出
如何判断C=1是自然丢失,不是溢出呢?
简易判断规则是,两个加数互为反号,和不会溢出。
同理,两个减数互为同号,差不会溢出。
1-20请分析下列算术运算指令影响进位标志C标志的结果(有进位或有借位时,则
C=1,否则C=0)。
(1)0001H-0002H
(2)0002H-0001H
解:
(1)有借位,则C=1。
(2)无借位,则C=0。
1.2.3二进制定点数的定标含义
人为默认小数点在定长二进制数的不同位置的标记方法,称为二进制定点数的定标。
通常采用Q定标法,即Q后面的数字表示小数部分的位长。
例如,16位二进制定点数的Q定标法共有16种定标值:
Q0~Q16。
Q0表示小数部分的位长为0,即16位二进制整数,十进制数范围从32786~+32767。
为什么是这个十进制数取值范围呢?
(提示:
用二进制定点数补码定义来理解和计算)Q16表示小数部分的位长为16,即16位二进制小数,没有符号位,是完全正小数(不存在负小数),十进制数范围为0~0.9999。
涉及这些内容的本章习题如下:
1-13请问单字Q12表示法有几位整数,有几位小数?
解:
单字是16位,Q12表示有4位整数,12位小数。
1-9请用1个字的Q10表示下列十进制数:
(1)-0.049067
(2)0.049067
解:
(1)0.049067×210=50.244608=>32H=>求补FFCEH
(2)32H
1-10请把1个字的Q10表示法转换成对应十进制数:
(1)400H
(2)FC00H
解:
(1)400H=>(把400H看成整数转换成十进制数)1024=>1024/210=1,即400H对应十进制数1。
(2)FC00H是负数,首先求补变为0400H,400H=>(把400H看成整数转换成十进制数)1024=>1024/210=1,再人为加一个负号,即FC00H对应十进制数-1。
1-6假设一种双字(即4个字节)定点数的小数点定标在这两个字的中间,请计算下列二进制数对应的十进制数为多少?
(1)00014000H
(2)FFFE8000H
解:
(1)00014000H整数0001转换成十进制整数为1,小数4000H转换成十进制小数为0.25,故为1.25
(2)FFFE8000H是负数,首先要求补变为正数00018000,整数0001转换成十进制整数为1,小数8000H转换成十进制小数为0.5,故为1.5。
1-21假设16位二进制数是Q14表示法,请回答下列问题:
(1)该数有多少位整数和多少位小数?
(2)Q14表示法表示的最小十进制负数为多少?
16位二进制数表示形式是什么?
(3)Q14表示法表示的最小十进制正数(用2的幂次方表示即可)为多少?
16位
二进制数表示形式是什么?
解:
(1)Q14有2位整数和14位小数。
(2)Q14表示法表示的最小十进制负数为2,16位二进制数表示形式是2000H
(3)Q14表示法表示的最小十进制正数是214,16位二进制数表示形式0001H
1.2.42个定标的二进制定点数,在什么条件下可以直接加减运算?
当2个定标的二进制定点数的Q定标值相等时,可以直接加减运算。
否则,不能直接加减运算,因为不同Q定标值的2个定点数直接加减运算的结果不正确。
必须先大Q值对齐小Q,再统一Q定标值的基础上进行加减运算。
涉及这些内容的本章习题如下:
1-250.625的单字Q15表示法数和0.75的单字Q14表示法数能否直接进行相加?
运算
规则是什么?
解:
不同Q值定标数不能直接进行相加,必须先统一Q,对Q规则为大Q对小Q,即大Q的数通过右移对准小Q,统一Q后,被加数和加数才能相加。
0.625的Q15表示法为0.625×215=20480=>5000H
0.75的Q14表示法为0.75×214=12288=>3000H
首先要将Q15表示5000H右移一位变为Q14:
2800H,再与Q14的3000H相加:
2800H+3000H=5800H=>22528/214=1.375(=0.625+0.75)
为什么不能小Q对齐大Q?
试分析原因?
(必做!
)
1.2.52个定标的二进制定点数,在什么条件下可以直接乘运算?
不论2个定标的二进制定点数的Q定标值是否相等,都可以直接相乘运算,乘积的位长是被乘数或乘数(注意:
被乘数和乘数位长是相等的)位长的2倍,而Q定标值是被乘数和乘数的Q定标值之和。
例如,2个16位二进制定点数Q定标值分别为Q14和Q12,则乘积为Q26,即32位乘积中有26位小数,6位整数,可见,乘积中的整数部分也是被乘数和乘数的整数部分位长之和。
涉及这些内容的本章习题如下:
1-16假设两个16位定点数相乘,被乘数为Q0,乘数为Q14,请问32位乘积小数点定
标属于Q多少?
解:
32位乘积为Q14,即整数部分占18位,小数部分占14位。
1.3二-十进制数转换方法
主要掌握二进制定点数与十进制实数之间的转换公式和二进制定点数转换为十进制实数的人工计算方法,至于二进制定点数转换为十进制实数的微机算法以及二进制浮点数转换十进制数不作为重点。
1.3.1二进制定点数转换成十进制实数
第1步:
将二进制定点数看成二进制整数(即看成Q0)转换成十进制整数;
第2步:
将该十进制整数除以2Q定标值产生的数,保留2~4位小数就是转换的十进制数。
涉及这些内容的本章习题如下:
1-14假设下列16位二进制数是用Q12表示法表示的,请转换成十进制数:
(1)4000H
(2)0DDBH
解:
(1)4000H=>(把4000H看成整数转换成十进制数)16384=>16384/212=4,即4000H对应十进制数4。
(2)0DDBH=>(把0DDBH看成整数转换成十进制数)3547=>3547/212=0.8659,即DDBH对应十进制数0.8659。
1.3.2十进制实数转换成二进制定点数
第1步:
将十进制实数绝对值乘以2Q定标值产生放大的十进制实数,既可以直接甩掉十进制小数部分或四舍五入转换成十进制整数;
第2步:
将该十进制整数转换的十六进制整数就是转换的二进制定点数。
若被转换的十进制实数原来是负数,则转换的二进制定点数还要求补码一次,才是要转换的二进制定点数。
涉及这些内容的本章习题如下:
1-8将下列十进制数转换成16位整数(高字)和16位小数(低字)的32位混合二进制数表
示形式。
(对于32位二进制数,此例为Q16表示法)
(1)88.0
(2)-32767.75
解:
(1)88.0216=5767168,转换成十六进制整数为00580000H
(2)-32767.75的绝对值为32767.75,乘以216=2147467264,转换成十六进制整数为7FFFC000H,因为原来十进制数是负数,故再对7FFFC000H求补:
80004000H,即-32767.75的双字Q16为80004000H。
1-9请用1个字的Q10表示下列十进制数:
(1)-0.049067
(2)0.049067
解:
(1)0.049067×210=50.244608=>32H=>求补FFCEH
(2)32H
1.4二进制定点数带符号扩展
推广到一般情况,n个字节补码想扩展成n+m个字节补码,则原来n个字节补码的最高位为1时,扩展的m个字节全填写1,否则全填写0。
涉及这些内容的本章习题如下:
1-17某个存储器单元中存放着一个字型数据为0203H,现在要把它拆成高字节和低字
节再存放到两个字单元中,请问存放到字单元后,高字节和低字节的数据形式是什么?
解:
0203H拆成高字节和低字节为02H、03H,再放到字单元中时,要进行符号扩展,02H扩展成字为0002H,03H扩展成字为0003H。
1-231字节补码FFH扩展成2字节补码的表示形式是多少?
解:
FFH的符号位为1,故扩展符号位为FFH,即FFH扩展成2字节补码为FFFFH。
第2章CPU结构和存储器配置重点复习内容
第2章主要掌握TMS320LF2407ADSP基本结构和寄存器
2.1TMS320LF2407A的引脚与内嵌外设
TMS320LF2407A的引脚可分为9大类:
(1)事件管理器A管理的引脚;
(2)事件管理器B管理的引脚;(3)ADC相关引脚;(4)CAN、SCI、SPI相关引脚;(5)外部中断、时钟引脚;(6)振荡器、PLL、FLASH等引脚;(7)仿真与测试引脚;(8)地址、数据、控制总线引脚;(9)数字系统与模拟系统电源引脚。
内嵌外设主要包括:
(1)片内集成32K×16位的FLASH程序存储器、2K×16位的单存取RAM(SARAM)、2.5K×16位的数据/程序可配置单存取RAM、544×16位双存取RAM(DARAM)。
(2)内嵌2个事件管理器:
EVA、EVB,管理以下内嵌外设:
16通道10位A/D转换器,2个16位通用定时器,3个捕获单元,8个16位脉宽调制输出(PWM),片内光电编码器接口电路;1个全双工异步串行通信接口(SCI),1个串行外设同步接口(SPI),一个控制器局域网通信接口(CAN)。
其中,16位的脉宽调制(PWM)通道能够实现:
三相反相器控制;PWM的对称和非对称波形;当外部引脚
出现低电平时快速关闭PWM通道;可编程的PWM死区控制以防止上下桥臂同时输出触发脉冲;事件管理器模块适用于控制交流感应电机、无刷直流电机、开关磁阻电机、步进电机、多级电机和逆变器。
(3)5个外部中断输入(2个驱动保护输入,2个外部中断请求,1个系统复位输入)。
(4)看门狗监视模块(WD)。
(5)低功耗电源管理,有3种低功耗工作模式。
涉及这些内容的本章习题如下:
2-2TMS320LF2407A芯片内部有几个双存取RAM块(DARAM)?
各有什么简称?
解:
有3个,分别为B0、B1、B2。
2-5C2xx系列DSP的累加器ACC长度为32位,而数据存储器单元长度为16位,则假
如输入数据定标移位器不移位将数据存储器单元内容读入ACC,则应读入ACC的低16位还是高16位?
如果想把数据存储器单元内容读入ACC的高16位,输入数据定标移位器应怎样移位?
移多少位?
解:
读入ACC的低16位。
左移16位。
2-6C2xx系列DSP的地址总线为多宽?
寻址空间为多大?
独立的程序存储器和数据存
储器空间哈佛结构给DSP带来的最大好处是什么?
解:
地址总线为16位,寻址空间为216=64K。
DSP存取代码与数据可以同时进行,加上采用流水线技术,指令执行速度更快。
2.2TMS320LF2407A的总线结构
DSP芯片最显著的特点之一是采用哈佛总线结构,即内部有6条16位总线,其中3条地址总线和3条数据总线,了解这6条总线的名称和功能。
(1)程序地址总线(PAB,ProgramAddressBus)用于寻址程序存储器存放的指令代码。
(2)数据读地址总线(DRAB,DataReadAddressBus)用于寻址数据存储器读操作的地址。
(3)数据写地址总线(DWAB,DataWriteAddressBus)用于寻址数据存储器写操作的地址。
(4)程序读数据总线(PRDB,ProgramReadBus)用于从程序存储器读取立即数和常数表。
(5)数据读数据总线(DRDB,DataReadDataBus)用于从数据存储器读取数据。
(6)数据写数据总线(DWEB,DataWriteBus)用于将数据写入数据存储器和程序存储器。
注意DSP芯片的外部总线并不是哈佛总线结构,仍然是冯.诺伊曼结构,即3条总线:
16位地址总线A0~A15,16位数据总线D0~D15,若干条控制总线。
但是,DSP的内部双存取RAM(DARAM,DualAccessRAM)、内部单存取RAM(SARAM,SingleAccessRAM)以及内部32K程序存储器FLASHROM从哈佛总线结构上获得高速存取的便利,即指令执行时,从内部程序存储器存取代码时,同时从独立的数据的地址总线、数据的数据总线存取操作数,加上流水线技术,使指令周期缩短为最小一个时钟周期。
涉及这些内容的练习题和思考题如下:
1.哈佛总线结构的基本特征是什么?
解:
基本特征包括:
独立的程序地址总线、独立的程序读数据总线,建立专用的读取指令代码总线,可以使读取程序代码和读写数据同时进行。
独立的数据读地址总线与独立的数据读数据总线配合,独立的数据写地址总线与独立的数据写数据总线配合,可以在一个指令周期中同时对同一的单元读写各一次,这种RAM成为双存取RAM。
2.为什么DSP的哈佛总线结构没有设置独立的程序写读数据总线?
解:
DSP运行固化在FALAHROM中指令代码时,只需要读取代码,故不需要独立的程序写读数据总线。
写代码是通过专用的烧写程序和外部程序地址总线和数据总线实现的。
3.C2xx系列DSP的外地址总线为多宽?
寻址空间为多大?
解:
16位。
寻址空间64K。
2.3TMS320LF2407A的CPU结构
TMS320C2xxDSP芯片的CPU内核(CPUcore)结构由8个部分组成:
(1)32位中央算术逻辑单元CALU(CentralArithmeticLogicUnit)
(2)32位累加器ACC(32-bitAccumulator)
(3)输入数据定标移位器(InputScalingShifter)
(4)输出数据定标移位器(OutputScalingShifter)
(5)16×16位硬件乘法器(Multiplier)
(6)乘积定标移位器(ProductScalingShifter)
(7)辅助寄存器算术单元ARAU(AuxiliaryRegisterArithmeticUnit)
(8)8个辅助寄存器AR(eightAuxiliaryRegisters)
涉及这些内容的练习题和思考题如下:
1.(2-10)内存单元存放有一个数为F001H,累加器(32位)与该单元数相加时,这个16位数据转换成32位数才与累加器相加,请问该16位数据是经过什么部件转换成32位数据的?
当SXM=“1”时,转换的数据为多少?
假设SXM=“0”时,转换的数据又为多少?
解:
通过输入移位器。
当SXM=“1”时,F001H转换成32位时,高16位进行符号扩展,变为FFFFF001H。
当SXM=“0”时,F001H转换成32位时,抑制高16位进行符号扩展,变为0000F001H。
2.C2xxDSP内核中的辅助寄存器有何功能?
试写出辅助寄存器AR0装载变量X值的
指令。
解:
用作间接寻址指针和计数器等。
LARAR0,#X
3.输出数据定标移位器有什么功能?
试举例说明。
解:
有2个基本功能:
(1)将32位累加器的数据拆成高16位和低16位,分别通过SACH和SACL指令(查阅这两条指令的语法说明)存储到16位内存单元,注意DSP的外部数据总线是16位,即数据存储器单元的长度是16位,32位累加器内容必须拆成高、低16位,分别存放到2个16位内存单元。
(2)将32位累加器的数据通过输出数据定标移位器左移一定位数,产生新的数据,再拆成高、低16位,分别通过SACH和SACL指令存放到2个16位内存单元。
输出数据定标移位器左移一定位数主要用于传送到32位累加器中的32位乘积需要重新定标转换成16位乘积的场合。
例如,16×16位硬件乘法器对两个Q14的定点数相乘产生32位的乘积为Q28,要压缩为16位的Q14,实际上就是将Q28的4位整数部分最高2位全0的位去掉,再把28位小数取高14位,损失低14位小数,相当于损失2-14的精度,这在工程应用中是容许的。
上述操作过程就等价于将32位乘积左移2位,再取高16位,存放到指定内存单元即可。
这个操作过程通过输出数据定标移位器左移2位再存取的指令就能轻松完成:
SACHx,2;x是直接寻址内存单元符号地址
注意:
SACH指令执行时隐含有控制32位累加器通过输出数据定标移位器输出的功能,指令中可选项“,左移次数”控制输出数据定标移位器左移2位输出,若省略可选项“,左移次数”控制输出数据定标移位器不移位输出。
4.16×16硬件乘法器对两个Qx值的定点数相乘产生32位的乘积为Qy,要压缩为16位的Qx的基本条件是什么?
解:
两个Qx值的定点数必须是小于1的数,相乘产生的乘积的整数部分才能多出可以左移去掉全0的位。
例如,16位定标Q12和Q14相乘,产生Q26的32位乘积,通过输出数据定标移位器左移4位,就可压缩成16位的Q12。
2.4当前AR(当前辅助寄存器)
状态寄存器ST0中有3位(D13~D15)定义为辅助寄存器指针ARP(ARPointer),它取值范围从000B~111B,当前ARP值对应AR0~AR7之一,称为当前AR(CurrentAR),也就是DSP指令系统中间接寻址符“*”所代表的当前AR作为间接寻址的基址寄存器。
涉及这些内容的练习题和思考题如下:
1.当前AR的含义是什么?
解:
ARP当前的值代表当前AR,
2.当前AR的表现形式是什么?
解:
间接寻址符“*”代表当前AR,作为间接寻址的基址寄存器指针。
3.请写出设置ARP(AR指针)指向当前AR1,并且AR1内容赋值地址值7103H的指令序列。
解:
MAR*,AR1;将ARP内容置为001B
LARAR1,#7103H
2.5状态寄存器ST0和ST1
TMS320C2xx共有2个16位状态寄存器ST0和ST1,用于记录每条指令执行后影响标志位的状态以及DSP操作所需的控制位。
应该正确理解下列控制位的含义:
(1)辅助寄存器指针ARP,占ST0的最高3位。
ARP的内容可通过指令MAR或LST修改。
ARP当前值使间接寻址符“*”代表当前AR。
(2)中断允许控制位INTM,占据ST0的1位。
=1,禁止DSP所有可屏蔽内核中断,=0;允许DSP所有可屏蔽内核中断。
INTM相当于DSP所有可屏蔽内核中断的总开关。
(3)数据存储器页指针DP,占据ST0的9位。
主要用于直接寻址方式的页面控制。
直接寻址方式的指令所寻址的物理地址由DP内容作为最高9位,直接寻址的地址变量的16位地址中的最低7位作为物理地址最低7位组成。
所以,直接寻址指令使用前,必须初始化DP指针,使DP等于直接寻址的地址变量所在的页号。
DSP的64K数据RAM分为512页,每页包含128的单元,即0000H~007FH为第0页,008H~00FFH为第0页,…,最后一个页号为511(=1FFH),地址范围是FF