DSP技术复习资料完整版Word格式文档下载.docx
《DSP技术复习资料完整版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP技术复习资料完整版Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
执行一条指令所需的最短时间,数值等于主频的倒数;
常用ns(纳秒)。
3.简述C55x的存储器配置情况(P11~12)。
(1)C55x采用统一的存储空间和I/O空间;
(2)C55x的片内存储空间共有352KB(146K字),外部存储空间共有16MB(8M字);
(3)存储区支持的存储器类型有异步SRAM,异步EPROM、同步DRAM和同步突发SRAM;
(4)C55x的I/O空间与程序/地址空间分开;
(5)I/O空间的字地址为16位,能访问64K字地址;
(6)当CPU读/写I/O空间时,在16位地址前补0来扩展成24位地址。
4.TMS320C55x的寻址空间是多少?
当CPU访问程序空间和数据空间时,使用的地址是多少位(P51、P53~54)。
(1)C55x的寻址空间为16MB(24位地址,2^24=16777216B=16MB)
(2)CPU访问程序空间时,使用24位的地址;
(3)访问数据空间时,使用23位地址,使用时23位地址左移一位将地址总线上的最低有效位(LSB)置0。
5.VC5509A的PGELQFP封装芯片共有多少个引脚其中GPIO引脚有多少个并行地址总线引脚有多少个并行双向数据总线引脚有多少个(P13~15)
(1)引脚:
144个;
(2)GPIO引脚:
7个;
(注:
GPIO[7:
6,4:
0])
(3)并行总线引脚:
14个;
A[13:
(4)并行双向数据引脚:
16个;
D[15:
6.C55x的指令分为两个阶段,第一阶段为取指阶段,第二阶段为执行阶段;
7.C55x的CPU包含4个40位的累加器,辅助寄存器ARn有16位,
XARn有23位;
(P29、P31)
8.XF位是寄存器ST1_55中的第13位,它是一通用的输出位,能用软件处理且可输出至DSP引脚。
若要使该引脚输出高电平,可用指令BSETXF;
(P46)
9.CPL位是寄存器ST1_55中的第14位,指令BCLRCPL的功能是对CPL清零;
(P43)
10.INTM位是寄存器ST1_55中的第11位,该位能够使能或禁止可屏蔽中断,如果INTM=0,C55x使能所有可屏蔽中断。
(P44)
11.SATA位是寄存器ST3_55中的第5位,如果SATA=1,则执行A单元ALU的饱和模式;
(P50)
12.MPNMC位是寄存器ST3_55中的第6位,该位使能或禁止片上ROM,如果MPNMC=0,则为微计算机模式,使能片上ROM;
13.VC5509A拥有160K字的片内存储器资源,其中有128K字RAM和32K字ROM。
外部扩展存储空间由CE[3:
0]组成,其中CE0的首字地址为00002000H,CE1的首字地址为00200000H(P51~52)(P58~59)
14.C55x有32个中断向量,中断向量指针IVPD、IVPH应指向中断向量表的首地址;
15.IER0和IER1的功能是什么?
(P58)
(1)IER0:
中断使能寄存器0;
(2)IER1:
中断使能寄存器1;
(3)当寄存器某位的值为1时,开启该位所控制的中断,为0则关闭该位所控制的中断。
16.请写出允许定时器0中断的指令代码。
答:
IFR0=IFR0;
//清除IFR0中断标志
IFR1=IFR1;
//清除IFR1中断标志
IER0=0x00;
IER1=0x00;
//禁止所有可屏蔽中断
IER0|=0x0010;
//允许TIMER0中断
17.C55x的不可屏蔽中断有哪几种?
(P63)
有三种:
(1)硬件中断RESET;
(2)硬件中断NMI;
(3)软件中断。
18.C55x支持3种类型的寻址方式,分别是绝对寻址模式、直接寻址模式和间接寻址模式;
(P69)
19.什么是绝对寻址方式C55x有几种绝对寻址方式,分别是什么(P70)
绝对寻址方式:
通过在指令中指定一个常数地址完成寻址;
有三种绝对寻址方式:
(1)K16绝对寻址方式;
(2)K23绝对寻址方式;
(3)I/O绝对寻址方式。
20.什么是直接寻址方式C55x有几种直接寻址方式,分别是什么(P71)
直接寻址方式:
使用地址偏移量寻址;
有四种直接寻址方式:
(1)DP直接寻址;
(2)SP直接寻址;
(3)寄存器位直接寻址;
(4)PDP直接寻址。
21.什么是间接寻址方式C55x有几种间接寻址方式,分别是什么(P74)
间接寻址方式:
使用指针完成寻址;
有四种间接寻址方式:
(1)AR间接寻址;
(2)双AR间接寻址;
(3)CDP间接寻址;
(4)系数间接寻址。
22.指令MOV*abs16(#2002h),T2采用的是K16绝对寻址方式。
设DPH=03h,该指令的功能是#k16=2002H,CPU从032002H处读取数据装入T2;
(P81)
23.指令MOVport(@0),T2采用的是PDP直接寻址方式。
设PDP=511,该指令的功能是PDP:
Poffset=FF80H,CPU从FF80H读取数据进T2;
24.已知AC1=0200FC00H,AR3=0200H,(200)=3400H,
MOV*AR3+<
<
#16,AC1
执行上面指令后,AC1和AR3的值分别是多少?
指令功能是把AR3指向的地址里面的内容左移16位(二进制左移16位相当于十六进制左移四位,所以在右边补四个0),把AR3指向的地址里面的内容左移后的内容送进AC1,之后指针AC3自加一次。
所以AC1=34000000H,AR3=0201H。
说明:
其实AC0~AC3是40位,如果问AC1的内容,则AC1=0034000000H
25.已知AC0=EC000000H,AC1=00000000H,AR1=0200H,(200)=3300H,TC2=1,
ADDSUBCC*AR1,AC0,TC2,AC1
执行上面指令后,AC1、AR1和AC0的值分别是多少?
指令功能是:
如果TC2=1,则AC1=AC0+(*AR1)<
#16;
否则AC1=AC0–(*AR1)<
#16,这里TC2=1,所以AC1=AC0+(*AR1)<
#16,AC1=EC000000H+33000000H=11F000000H,AR1=0200H,AC0=EC000000H。
其实AC0~AC3是40位,AC0的内容是00EC000000H,AC1的内容是011F000000H
26.在.text、.data和.bss段,初始化段是.text和.data,未初始化段是.bss;
(P135)
27.利用.sect指令可创建已初始化段,利用.usect指令可创建未初始化段;
28.请指出汇编语言文件中的伪指令.def、.ref和.global的区别;
指在一个模块中定义,可以在另一个模块中引用的符号.可以用伪指令.def、.ref或.global来定义.
.def在当前模块中定义,可在别的模块中使用;
.ref在当前模块中使用,但在别的模块中定义;
.global全局符号变量。
29.DSP链接器命令文件中,MEMORY和SECTIONS伪指令的作用是什么?
(P160~161)
MEMORY伪指令用来表示实际存在的目标系统中可被使用的存储器范围,每个存储器范围都有名字、起始地址和长度。
SECTIONS伪指令的作用是:
描述输入段怎样被组合到输出段内;
在可执行程序内定义输出段;
规定在存储器内何处存放置输出段;
允许重命名输出段。
30.CCS有两种工作模式,分别是软件仿真器模式和硬件在线编程模式;
(P165)
31.在大存储模式下编译代码时,必须和rts55x.lib运行时间库链接;
32.给出函数intfn(longl1,longl2,longl3,int*p4,int*p5,int*p6,int*p7,int*p8,inti9,inti10)中传送参数所使用的寄存器;
所使用的寄存器分别为:
AC0,AC1,AC2,AR0,AR1,AR2,AR3,AR4,T0,T1
即是longl1存放在AC0,……对应下去。
33.以下的汇编语句实现两个整型数的饱和加法,请编写C语言程序调用该汇编函数,实现整数20000和30000的饱和加法,并在CCS中输出和的值;
(相关P209)
.def_sadd_asmfun
_sadd_asmfun:
BSETST3_SATA
ADDT1,T0
BCLRST3_SATA
RET
#include"
stdio.h"
intsadd_asmfun(inta,intb);
//声明函数
main()
{
intc=0;
c=sadd_asmfun(20000,30000);
printf("
c=%d"
c);
}
intsadd_asmfun(inta,intb)//定义函数
return_sadd_asmfun(a,b)
34.TMS320VC5509A系统的晶体振荡器频率为12MHz,试通过设置DPLL,使系统的时钟频率为144MHz;
(P255例8-1)
(1)使DPLL工作在锁定模式:
D4(PLLENABL)=1B(这里B表示二进制,不是11,下面的也是,D4表示时钟模式寄存器(CLKMD)的第5位,D0为第1位,下面D11~D5意思类似)
(2)根据题意有
144MHz=[PLLMULT/(PLLDIV+1)]×
12MHz(“/”表示除号)
解得PLLMULT/(PLLDIV+1)=12,取PLLDIV=0,PLLMULT=12,
即有:
D6D5(PLLDIV)=00B,D11~D7(PLLMULT)=01100B
(3)时钟模式寄存器(CLKMD)的其他未均取为0。
(时钟模式寄存器(CLKMD)共16位)
综合
(1)、
(2)、(3),得CLKMD=0000011000010000B或者CLKMD=0C10H
用汇编予以实现:
mov#0000011000010000B,port(#1c00h)
或者mov0610H,port(#1c00h)
;
1c00h是时钟模式寄存器(CLKMD)的地址(分号后是注释,不用理会)。
35.设DSP定时器输入时钟频率为100MHz,如果要求定时器发送中断信号的频率为1000次每秒,需要如何对定时器进行设置?
(相关P259)
根据公式
输入时钟频率为100MHz,TINT频率为1kHz,由于TDDR为4位,这里我们把TDDR设为9,即TDDR=0101B,则PRD为9999,PRD为16位,即PRD=0010011100001111B=270FH。
36.写出使C5509A的GPIO4、GPIO6和GPIO7引脚输出高电平的C语言代码。
(P261)
#defineIODIR(*(ioportunsignedint*)0x3400)
#defineIODATA(*(ioportunsignedint*)0x3401)
IODIR|=0xF0;
//IO方向设置
IODATA|=0xF0;
37.VC5509A有多少个外部中断,请写出允许外部中断0中断的指令代码。
有5个
Sys_Initial();
IFR0=IFR0;
IFR1=IFR1;
//清除中断标志
IER0=0;
IER1=1;
//禁止所有可屏蔽中断
IER0|=0x0004;
//使能外部中断0
38.VC5509APGE有2个10位A/D接口。
39.设VC5509A的A/D参考电压为3.3V,系统时钟为144MHz,模拟电压由通道0输入,请编写程序实现电压采集,采样率为21.5kHz。
(P287)
#include"
//头文件
#defineADCCTL(*(ioportunsignedint*)0x6800)//宏定义寄存器的地址
#defineADCDATA(*(ioportunsignedint*)0x6801)
#defineADCCLKDIV(*(ioportunsignedint*)0x6802)
#defineADCCLKCTL(*(ioportunsignedint*)0x6803)
longData[10];
//长整型数组
floatData_F;
//浮点数型
voidSysInit(void)//初始化设置
ADCCLKCTL=0x23;
//CPUCLKDIV=35;
(详细设置见课本P287)
ADCCLKDIV=0;
//CONVRATEDIV=0;
ADCCLKDIV=0x4F00;
//SAMPTIMEDIV=79;
ADCCTL=0;
//失能转换
intmain(void)//主函数
unsignedchari;
//局部变量
SysInit();
//初始化设置
while
(1)
{
for(i=0;
i<
10;
i++)//依次采集10次数据
{
ADCCTL|=0x8000;
//ADCSTART=1;
开始转换
while(ADCDATA&
0x8000);
//判断ADCBUSY是否为0,从1变为0转换结束
Data[i]=ADCDATA&
0x3FF;
//将ADCDATA低10位数据存于数组Data[]
Data_F+=Data[i];
//累加10次的数据
}
Data_F=Data_F/10;
//取平均值
Data_F=Data_F*3.3/1024;
//转换为电压
printf("
V=%f\n"
Data_F);
//在CCS软件中打印数据
Data_F=0;
//清零,为下一次转换做准备
}