DSP考试资料文档格式.docx

上传人:b****2 文档编号:4735964 上传时间:2023-05-04 格式:DOCX 页数:15 大小:27.55KB
下载 相关 举报
DSP考试资料文档格式.docx_第1页
第1页 / 共15页
DSP考试资料文档格式.docx_第2页
第2页 / 共15页
DSP考试资料文档格式.docx_第3页
第3页 / 共15页
DSP考试资料文档格式.docx_第4页
第4页 / 共15页
DSP考试资料文档格式.docx_第5页
第5页 / 共15页
DSP考试资料文档格式.docx_第6页
第6页 / 共15页
DSP考试资料文档格式.docx_第7页
第7页 / 共15页
DSP考试资料文档格式.docx_第8页
第8页 / 共15页
DSP考试资料文档格式.docx_第9页
第9页 / 共15页
DSP考试资料文档格式.docx_第10页
第10页 / 共15页
DSP考试资料文档格式.docx_第11页
第11页 / 共15页
DSP考试资料文档格式.docx_第12页
第12页 / 共15页
DSP考试资料文档格式.docx_第13页
第13页 / 共15页
DSP考试资料文档格式.docx_第14页
第14页 / 共15页
DSP考试资料文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP考试资料文档格式.docx

《DSP考试资料文档格式.docx》由会员分享,可在线阅读,更多相关《DSP考试资料文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

DSP考试资料文档格式.docx

AR30101

AR30100

0100h1500

数据存储器

二、简答(共40分)

1.TMS320C54x有多少条16位总线?

这些总线各有什么作用?

(6分)

答:

’C54x共有4组8条16位总线

1条程序总线(PB):

传送取自程序存储器的指令代码和立即操作数。

3条数据总线(CB、DB、EB):

CB和EB传送从数据存储器读出的操作数;

EB传送写到存储器中的数据。

4条地址总线(PAB、CAB、DAB、EAB)传送相应指令所学要的代码。

2.TMS320C54x片内存储器一般包括哪些种类?

如何控制存储器片内或片外的分配?

TMS320C54x的片内存储空间分为3个可选择的存储空间:

64K的程序空间,64K的数据空间和64K的I/O空间,所有TMS320C54x芯片都包括RAM、SARAM、DARAM。

程序空间:

MP/MC=14000H~FFFFH片外

MP/MC=04000H~EFFFH片外FF00H~FFFFH片内

OVLY=10000H~007FH保留0080H~007FH片内

OVLY=00000H~3FFFH片外

数据空间:

DROM=1F000H~FEFFH只读空间FF00H~FFFH保留

DROM=0F000H~FEFFH片外

3.当TMS320C54xCPU接收到可屏蔽的硬件中断时,满足哪些条件中断才能被响应?

(1)出现多个中断时,此中断的优先级最高

(2)INTM=0允许全局中断

(3)IMR中的响应相应位为1,开放此中断。

4.循环寻址中,如何确定循环缓冲的起始地址?

如果循环缓冲大小为17,其起始地址必须从什么地址开始?

BK初始化为多少?

(4分)

5.TMS320C54x硬件复位地址为多少?

如何确定中断向量地址?

计算INT0(IPTR=001H)的中断向量地址。

复位后,复位向量地址为:

0080H

确定地址方式:

IPTR+左移2位后的中断向量序列号

10H左移2位后成为40H,IPTR=001H,则中断向量地址为00C0H

6.若辅助寄存器AR0的值为0x0005H,AR3的值为0x030FH,请分别给出下列寻址方式修改后的辅助寄存器的值。

*AR3+;

AR3=0310H

*AR3+0;

AR3=0314H

*AR3(15);

AR3=0324H

7.分别解释以下指令的功能。

LD#80h,A;

把立即数80H装入累加器A

LD80h,A;

把80H为地址的数据装如累加器A

LD#80h,16,A;

把立即数80H左移16位后装如累加器A

三、程序填空(共22分,每空2分)

1.实现计算z=x+y-w的程序。

.title"

example1.asm"

.mmregs

STACK.usect"

STACK"

10h

.bssx,1

.bss      y,1

.bssw,1

.bssz,1

.defstart

.data

table:

.word10,26,23

.text

start:

STM#0,SWWSR

STM#STACK+10h,SP;

初始化堆栈指针SP

STM#x,AR1

RPT#2

MVPDtable,*AR1+;

数据从程序存储器传送到数据存储器

CALLSUMB

end:

Bend

SUMB:

LD@x,A

ADD@y,A

SUB@w,A;

实现减法运算

STLA,@z

RET

.end

2.实现对数组X[5]={1,2,3,4,5}的初始化,然后将数据存储器中的数组X[5]复制到数组Y[5]。

最后实现数组X和数组Y中对应元素相乘并累加,即z=1*1+2*2+3*3+4*4+5*5

.bssx,5

.bssy,5

.bssz,1

.word1,2,3,4,5

.text

STM#x,AR1

RPT4

MVPDtable,*AR1+;

从程序存储器传送到数据存储器数组X[5]

STM#x,AR2

STM#y,AR3

MVDD*AR1,*AR3;

从数据存储器数组X[5]传送到Y[5]

SSBXFRCT;

准备整数乘法

STM#x,AR2

STM#y,AR3

STM#z,AR4

RPTZ4

MAC*AR2+,*AR3+,A

STLA,*AR4

End:

四、分析程序回答问题(共8分)

.def_c_int00

  .mmregs

stack:

  .usect"

stack"

10h

 .bssa,4

 .bssx,4

 .bssy,1

table:

  .word1,2,4,3

  .word8,6,4,2

  .text

_c_int00:

STM#stack+10h,sp

  STM#a,AR1

  RPT#7

  MVPDtable,*AR1+

  CALLsum

end:

  Bend

sum:

  STM#a,AR3

   STM#x,AR4

   RPTZA,#3

   MAC*AR3+,*AR4+,A

   STLA,@y

   ret

   .end

(1)说明该程序的功能:

a1*x1=a2*x2+a3*x3+a4*x4

(2)说明以下各量的理论值(4分)

A:

2Aa1的地址:

81H内容:

1

AR1:

88HAR3:

84H

第二套

1.TI公司的定点DSP产品主要有TMS320C2000系列、TMS320C5000系列和TMS320C6000系列。

2.’C54xDSP中传送执行指令所需的地址需要用到PAB、CAB、DAB和EAB4条地址总线。

3.DSP的内部存储器类型可分为随机存取存储器(RAM)和只读存储器(ROM)。

其中RAM又可以分为两种类型:

单寻址RAM(SARAM)和双寻址RAM(DARAM)。

4.’C54xDSP的内部总存储空间为192K字,分成3个可选择的存储空间:

64K字的程序存储空间、64K字的数据存储空间和64K字的I/O空间。

5.从功能结构上,’C54XDSP的CPU可以划分成运算部件和控制部件两大部分。

6.’C54xDSP的寻址方式有七种,分别为立即寻址、绝对寻址、累加器寻址、直接寻址、间接寻址、存储器映象寄存器寻址、堆栈寻址。

7.在’C54xDSP寻址和指令系统中,Xmem和Ymem表示16位双寻址操作数,Dmad为16位立即数,表示数据存储器地址,Pmad为16位立即数,表示程序存储器地址。

8.程序计数器的值可以通过复位操作、顺序执行指令、分支转移,累加器转移,块重复,子程序调用,从累加器调用子程序,中断等操作改变。

9.’C54xDSP芯片采用了6级流水线的工作方式,即一条指令分为预取指、取指、译码、寻址、读数和执行6个阶段。

10.解决MMR写操作的流水线冲突时,一般可用采用推荐指令和插入空操作指令的方法。

11.’C54xDSP定时器由3个16位存储器映射寄存器组成:

定时器寄存器(TIM)、定时器周期寄存器(PRD)和定时器控制寄存器(TCR)。

12.主机接口(HPI,HostPortInterface)是TMS320C54x系列定点芯片内部具有的一种接口部件,主要用于DSP与其他总线或CPU进行通信。

13.’C54xDSP的指令系统有助记符指令和代数指令两种形式。

14.COFF目标文件中.text段通常包含可执行代码,.data段通常包含己初始化的数据,.bss段中通常为未初始化的数据保留空间。

15.DSP芯片的开发工具可以分为代码生成工具和代码调试工具两类。

1.BANZ2000h,*AR3-

2.CMPRGT,AR3

3.ADD*AR3+,14,A

4.SUBA,-8,B

5.MPY*AR3+,A

五、程序题(15分)

写出计算

的主要汇编程序,并给程序添加注释,画出程序的流程图。

解:

程序及注释:

.bssx,20;

给变量x分配20个字单元

.bssy,1;

给变量y分配1个字单元

STM#x,AR1;

取x地址

STM#19,AR2;

设置循环次数

LD#0,A;

累加器清零

loop:

ADD*AR1+,A;

累加x分量

BANZloop,*AR2-;

循环是否结束,没有结束则继续累加

STLA,@y;

把结果存入y

流程图:

第三套

1、用C55x汇编语言实现计算

的程序。

(10分)

mpym*AR0+,*AR1+,AC0

mpym*AR0+,*AR1+,AC1

addAC1,AC0

或者:

||rpt#2

macm*AR0+,*AR1+,AC0

2、用C55x汇编语言实现计算

的程序。

mpym*AR0+,*AR1+,AC3

masm*AR0+,*AR1+,AC3

3、以8点的FFT为例,用C55x的汇编语言实现FFT的算法,并且解释该算法的实现方法。

(20分)

.sect"

fft_code"

_fft:

aadd#(ARGS-Size+1),SP;

Adjuststackforlocalvars

movmmap(ST1_55),AR2;

SaveST1,ST3

movmmap(ST3_55),AR3

movAR2,fft.d_ST1

movAR3,fft.d_ST3

btst@#0,T1,TC1;

CheckSCALEflagset

mov#0x6340,mmap(ST1_55);

SetCPL,XF,SATD,SXAM,FRCT(SCALE=1)

mov#0x1f22,mmap(ST3_55);

Set:

HINT,SATA,SMUL

xccdo_scale,TC1

mov#0x6300,mmap(ST1_55);

SetCPL,XF,SATD,SXAM(SCALE=2)

do_scale

movT2,fft.d_T2;

SaveT2

||mov#1,AC0

movAC0,fft.d_L;

InitializeL=1

||sftsAC0,T0;

T0=EXP

movAC0,fft.d_N;

N=1<

<

EXP

movXAR1,XCDP;

CDP=pointertoU[]

movXSP,XAR4

add#fft.d_temp,AR4;

AR4=pointertotemp

movXAR0,XAR1;

AR1pointstosamplebuffer

movT0,T1

movXAR0,XAR5;

CopyexterndbitstoXAR5

outer_loop;

for(L=1;

L<

=EXP;

L++)

movfft.d_L,T0;

note:

Sincethebufferis

||mov#2,AC0;

arrangedinre,impairs

sftsAC0,T0;

theindextothebuffer

negT0;

isdoubled

||movfft.d_N,AC1;

Buttherepeatcoutners

sftlAC1,T0;

arenotdoubled

movAC0,T0;

LE=2<

L

||sftsAC0,#-1

movAC0,AR0;

LE1=LE>

>

sub#1,AC0;

Initmid_loopcounter

movmmap(AC0L),BRC0;

BRC0=LE1-1

sub#1,AC1;

Initinnerloopcounter

movmmap(AC1L),BRC1;

BRC1=(N>

L)-1

addAR1,AR0

mov#0,T2;

j=0

||rptblocalmid_loop-1;

for(j=0;

j<

LE1;

j++)

movT2,AR5;

AR5=id=i+LE1

movT2,AR3

addAR0,AR5;

AR5=pointertoX[id].re

add#1,AR5,AR2;

AR2=pointertoX[id].im

addAR1,AR3;

AR3=pointertoX[i].re

||rptblocalinner_loop-1;

for(i=j;

i<

N;

i+=LE)

mpy*AR5+,*CDP+,AC0;

AC0=(X[id].re*U.re

:

mpy*AR2-,*CDP+,AC1;

-X[id].im*U.im)/SCALE

masr*AR5-,*CDP-,AC0;

AC1=(X[id].im*U.re

macr*AR2+,*CDP-,AC1;

+X[id].re*U.im)/SCALE

movpair(hi(AC0)),dbl(*AR4);

AC0H=temp.reAC1H=temp.im

||movdbl(*AR3),AC2

xccscale,TC1

||movAC2>

#1,dual(*AR3);

ScaleX[i]by1/SCALE

movdbl(*AR3),AC2

scale

addT0,AR2

||subdual(*AR4),AC2,AC1;

X[id].re=X[i].re/SCALE-temp.re

movAC1,dbl(*(AR5+T0));

X[id].im=X[i].im/SCALE-temp.im

||adddual(*AR4),AC2;

X[i].re=X[i].re/SCALE+temp.re

movAC2,dbl(*(AR3+T0));

X[i].im=X[i].im/SCALE+temp.im

inner_loop;

Endofinnerloop

amar*CDP+

amar*CDP+;

UpdatekforpointertoU[k]

||add#2,T2;

Updatej

mid_loop;

Endofmid-loop

sub#1,T1

add#1,fft.d_L;

UpdateL

bccouter_loop,T1>

0;

Endofouter-loop

movfft.d_ST1,AR2;

RestoreST1,ST3,T2

movfft.d_ST3,AR3

movAR2,mmap(ST1_55)

movAR3,mmap(ST3_55)

movfft.d_T2,T2

aadd#(Size-ARGS-1),SP;

ResetSP

ret

.end

第四套

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2