湖南科技学院二○一三年上学期期末考试
通信工程 专业 2013 级 DSP原理及应用(实验) 试题
考试类型:开卷 试卷类型:A卷 考试时量:120分钟
题号 答案 1 A 2 A 3 A 4 C 5 C 6 A 7 A 8 B 9 D 10 B 题 号 得 分 阅卷人 复查人 一 二 三 四 五 总分 统分人 一、选择题 (本题共10小题,每小题2分,满分20分,答案填入下表)
1.实验课中,配置DSP工作在纯软件环境或硬件仿真环境的窗口名称是( )
A、Setup CCStudio v3.3 B、 CCStudio v3.3 C、emurst D、 Protel 99 SE 2. DSP实验箱附带的USB信号线连接ICETEK-5100SB仿真器和PC机后,ICETEK-5100SB仿真器上指示灯Power和Run灯点亮,可通过查看桌面上的图标名称( )查看初始化是否成功。
A、CCStudio v3.3 B、Setup CCStudio v3.3 C、Protel 99 SE D、emurst
3. CCS可以工作在纯软件仿真环境中,进入CCS设置窗口如(图一)所示,My System应该选择(图二)中的( )
(图一)
(图二)
A、C55xx Rev3.0 Functional Simulator B、C55xx Rev3.0 Cycle Accurate Simulator C、ICETEK USB 5100-C5510 V2.x Emulator D、ICETEK USB 5100-C5510 Emulator
第 1页
4. 实验中,单步调试的按键是( )
A、F5 B、F 6 C、F10 D、F11
5. 在程序中,观察某变量在运行过程的变化,可以选中该变量右键,选择( ) A、 Editor B 、Quick Watch C 、Add to Watch Window D 、Go to?
6. 实验中,要想查看寄存器值的变化,可通过“View”菜单中的( )项开启内存观察窗口。 A 、Memory B 、Disassembly C 、Register D 、Watch Window 7.实验中,直流电机调速改变占空比的方法是( )
A、定宽调频法 B、调宽调频法 C、定频调宽法 D、以上答案均不对 8. 下面几个选项中,不是C语言开发的优点的是( )
A、易于开发和维护 B、不容易发生流水线冲突 C、可移植性强 D、优化代码简单 9. 下面几个选项中,不是汇编语言开发的缺点的是( )
A、可读性差 B、代码量大 C、可移植性差 D、容易产生流水线冲突 10. C语言程序在执行时,先要调用C标准库中的初始化程序,入口标号为( )。 A、_c_init0 B、 _c_init00 C、start D、ioport
二 、填空题(每空2分,满分20分)
1. DSP的软件开发工具包括 汇编器 、 编译器 、 连接器 、调试器、代码模拟器、代码库及实时操作系统等。
2. ICETEK–VC5509-A实验箱上,用户可编程的指示灯有 4 个。
3. 从当前位置开始执行程序,直到遇到断点后停止的调试按钮是 run ;用来暂停正在执行的程序的调试按钮是 halt 。
4. DSP定时器实验中,将定时器timer_init( )函数里的“prd0 = 0x0ffff ”改成“prd0 = 0x0fff”,指示灯闪烁的频率变 快 (填快或慢),发生这种现象的原因是计数器采用 减1 (填减1或加1)计数的方式。
5. TMS320C55x DSP的中断可分为可屏蔽中断和不可屏蔽中断两种,软件中断是 不可屏蔽 中断,C5509可响应个 5 外中断。
三、简答题(每小题8分,共16分)
1. 怎样创建一个新的工程项目?
答:(1)在主菜单“project”中选择“new”选项
(2)在“Project Name”域中输入要创建的项目名,在“Location”域输入或选择将要
第 2页
创建的工程项目所处的目录,对于每个新建的工程项目最好建立不同的目录。 (3)在“project”下拉列表中选择将要 创建的工程项目的配置。
(4)在“Target”下拉列表中选择要创建的工程项目所对应的目标器件系列 (TMS320C54xx,TMS320C55xx等) (5)最后单机“finish”按钮。
2. 简述ICETEK-VC5509-A与PC机没有正常连接的常见原因。(假设设备是正常的,列出至少4
条以上)
答:1.USB线松弛没连接好 2.电源没开
3.软硬件模式没选对
4.ICETEK-VC5509-A等相关驱动没装好
五、程序题(共44分)
1. 给下面的程序添加注释。 (12分) void InitTimer() {
ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003;
*tcr0 = 0x04f0; // 设置定时器控制寄存器并且启动定时器 *tim0 = 0;
*prd0 = 15000; // 初始化定时器0周期寄存器 *prsc0 = 0x0f; // 设置4位定时器初值 16分频 *tcr0 = 0x00e0; // 关闭定时器0控制寄存器,定时器 }
第 3页
void InitCTR() {
CTRGR=0; CTRGR=0x80; CTRGR=0;
CTRLR=0; // 清屏
CTRLR=0x40; // 设置起始行 CTRLR=0x0c0;// 设置起始列 LCDCMD(LCDCMDTURNOFF); dbClearKey=CTRCLKEY;
LBDS=0; // 关闭显示器 }
2. 已知 AC0 = 00 EC00 0000H, AC1 = 0000000000H,TC2 = 1,AR1=0200H,(0200)=00FEH,(0201) = 0020H。
ADDSUBCC *AR1+ ,AC0, TC2, AC1;
执行上面指令之后,AC0、AR1和AC1的值分别是多少?要求用汇编代码写出完整的计算过程,包括各个参数的赋值。 (14分)
解:如果TC2=1,则AC1=AC0+(*AR1+)<<#16; 否则AC1=AC0–(*AR1+)<<#16,
这里TC2=1,所以AC1=AC0+(*AR1+)<<#16, AC1=00EC000000H+00FE0000H=00ECFE0000H, AR1=0201H,
AC0=00EC0000H
汇编代码:
MOV AC0,#EC000000H MOV AC1,#00000000H MOV TC2,#1 MOV AR1,0200H CMP 1,TC2 JNE NEXT LD (AR1),16, MOV AR2,(AR1) ADD AC0,AR2 MOV AC1,AC0 END NEXT:
SUB AC0,AR2 MOV AC1,AC0 END INC AR1
第 4页
3 试设计程序在液晶显示屏上显示计时时钟,精确到秒,形式为“时时:分分:秒秒”。数字0~9在ledkey[10][8]矩阵中(只写主程序即可)。 (18分) #define LCDDELAY 1 #include \
#include \#include \
main() {
int i,nCount=0,nBW=0; PLL_Init(20); SDRAM_init(); InitCTR();
TurnOnLCD(); // 打开显示 LCDCLS(); // 清除显示内存
CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行 Delay(LCDDELAY); CTRLCDCR=0;
Delay(LCDDELAY); for (;;) {
CTRLCDCMDR=LCDCMDPAGE; // 设置操作页=0 Delay(LCDDELAY); CTRLCDCR=0;
Delay(LCDDELAY);
CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0 Delay(LCDDELAY); CTRLCDCR=0;
Delay(LCDDELAY); for ( i=0;i<64;i++ )
{if(i<8)CTRLCDRCR=( nBW==0 )?(ledkey[a][i]):(~ledkey[a][i]); // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置)
else if(i<16)CTRLCDRCR=( nBW==0 )?(ledkey[b][i-8]):(~ledkey[b][i-8]); // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置)
else if(i<24)CTRLCDRCR=( nBW==0 )?(ledkey[10][i-16]):(~ledkey[c][i-16]); // 屏幕左侧第1至8行第i列赋值
else if(i<32)CTRLCDRCR=( nBW==0 )?(ledkey[c][i-24]):(~ledkey[d][i-24]); // 屏幕左侧第1至8行第i列赋值
else if(i<40)CTRLCDRCR=( nBW==0 )?(ledkey[d][i-32]):(~ledkey[e][i-32]); // 屏幕左侧第1至8行第i列赋值
else if(i<48)CTRLCDRCR=( nBW==0 )?(ledkey[10][i-32]):(~ledkey[e][i-32]);
第 5页
else if(i<56)CTRLCDRCR=( nBW==0 )?(ledkey[e][i-32]):(~ledkey[e][i-32]); else CTRLCDRCR=( nBW==0 )?(ledkey[nCount][i-40]):(~ledkey[nCount][i-40]); // 屏幕左侧第1至8行第i列赋值 port8002=0; // (赋值后当前操作列自动加1,所以不需设置) Delay(LCDDELAY); CTRLCDCR=0;
Delay(LCDDELAY); }
Delay(1024); nCount++;
if ( nCount==10 ) { e++;
if(e==6) { d++; e=0;
if(d==10) { c++; d=0; if(c==6) { b++; c=0;
if(b==10) {
a++; b=0;
if(a==2&&b==4) a=0; } } } }
nCount=0; //nBW=1-nBW; } }
LEDkey[10][8] ={0x0,0x0,0x0,0x66,0x66,0x0,0x0,0x0}
第 6页