dsp技术实验讲义Word格式.docx

上传人:b****1 文档编号:5761530 上传时间:2023-05-05 格式:DOCX 页数:57 大小:265.85KB
下载 相关 举报
dsp技术实验讲义Word格式.docx_第1页
第1页 / 共57页
dsp技术实验讲义Word格式.docx_第2页
第2页 / 共57页
dsp技术实验讲义Word格式.docx_第3页
第3页 / 共57页
dsp技术实验讲义Word格式.docx_第4页
第4页 / 共57页
dsp技术实验讲义Word格式.docx_第5页
第5页 / 共57页
dsp技术实验讲义Word格式.docx_第6页
第6页 / 共57页
dsp技术实验讲义Word格式.docx_第7页
第7页 / 共57页
dsp技术实验讲义Word格式.docx_第8页
第8页 / 共57页
dsp技术实验讲义Word格式.docx_第9页
第9页 / 共57页
dsp技术实验讲义Word格式.docx_第10页
第10页 / 共57页
dsp技术实验讲义Word格式.docx_第11页
第11页 / 共57页
dsp技术实验讲义Word格式.docx_第12页
第12页 / 共57页
dsp技术实验讲义Word格式.docx_第13页
第13页 / 共57页
dsp技术实验讲义Word格式.docx_第14页
第14页 / 共57页
dsp技术实验讲义Word格式.docx_第15页
第15页 / 共57页
dsp技术实验讲义Word格式.docx_第16页
第16页 / 共57页
dsp技术实验讲义Word格式.docx_第17页
第17页 / 共57页
dsp技术实验讲义Word格式.docx_第18页
第18页 / 共57页
dsp技术实验讲义Word格式.docx_第19页
第19页 / 共57页
dsp技术实验讲义Word格式.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

dsp技术实验讲义Word格式.docx

《dsp技术实验讲义Word格式.docx》由会员分享,可在线阅读,更多相关《dsp技术实验讲义Word格式.docx(57页珍藏版)》请在冰点文库上搜索。

dsp技术实验讲义Word格式.docx

实验成绩按照学校规定的比例计入该课程总成绩。

对于考核不及格的学生,必须重修。

课程简介:

“DSP原理及应用”实验课程是高等学校面向电子类专业开设的一门限选技术基础课。

通过本课程的各个教学环节的实践,通过实践,帮助学生理解DSP芯片的硬件结构和软件系统。

熟悉DSP芯片的内部结构和性能。

熟悉DSP软件开发环境及其开发工具。

在DSP实验板上进行编程及DSP芯片的加载调试过程。

熟悉TMS320C54x系列芯片的结构特点.工作原理.片内外设电路及应用场合;

掌握面向DSP芯片编程的方法和所采用的编程语言,以及CCS集成开发环境的使用,使学生初步具备面向DSP编程的能力。

为今后以DSP为核心的系统的使用和设计工作打下基础。

教学大纲要求总学时72,其中理论教学54学时.实验18学时,实验个数6个。

DSP原理及应用实验课实验项目一览表

序号

实验项目名称

实验类型及计划学时

开设学期

开出要求

演示

验证

综合

设计

1

DES综合外设试验

3

6

必修

2

C54x的基本算数运算

C54x的浮点数运算

4

用定时器实现数字振荡器

5

fir数字滤波器

快速傅立叶变换(fft)的实现

合计

18

实验一DES综合外设试验

实验目的:

1、学习外设的控制原理

2、学习在外设的控制程序中所使用的汇编和c混合编程

3、学习对C54x的中断、IO空间操作等基本DSP编程技巧

试验要求:

1、要求掌握和巩固DSP编程的基本方法

2、通过试验,能独立编写复杂的外设控制程序。

3、学习CCS开发环境

实验器材:

PC机,DSP54XX教学实验系统

实验原理:

(1).‘C54XX的IO空间读写

‘C54XX提供64K字的IO空间访问能力。

在汇编指令中分别提供了读和写命令:

portr和portw。

你也可以在C中实现该IO操作,方法如下:

首先定义IO空间变量,

如:

ioportunsignedportXXXX;

/*其中,XXXX代表具体IO口地址*/

然后,就可以象访问普通变量一样访问IO口。

portXXXX=0x55;

/*将0x55写到XXXX指定的IO口*/

(2).交通灯的控制

DES5402PP-U提供了16个LED,其控制地址为IO空间的0x0c000h。

该地址的D0-15

比特位分别对应这16个LED。

将1写入可以点亮LED,0则关闭。

请参考下面代码:

/*说明IO空间0x0c000h变量,以便用C实现IO空间操作*/

ioportunsignedportc000;

/*forLEDsshow*/

/*下面是LED控制代码*/

portc000=0;

/*关闭所有16个LED*/

/*该C语句等效于汇编指令portw#0,0c000h*/

mydelay();

/*使用空循环延时*/

portc000=0xffff;

/*点亮所有16个LED*/

/*下面依次逐个点亮LED(DS1-DS16)*/

led=1;

for(i=0;

i<

16;

i++)

{

portc000=led;

/*点亮一个LED*/

/*延时*/

/*关闭LED*/

led=led<

<

1;

}

(3).直流电机控制

DES5402PP-U实验系统配有一个小型直流电机,可以DSP编程完成直流电机的调速控

制。

其控制方法为:

当向0x0e000h(‘VC5402的IO空间)的D0比特位写入1时,电机

正向转动;

当写入0时,电机反向转动。

用户可以通过DO位1或0的持续时间(即D0

输出方波的占空比)控制电机的转速。

注意,使用直流电机时,应该先接通电机的电

源,方法如下:

向IO空间的0x8000地址的D0比特位写入1。

若要关闭电源,请写入

0。

当写入1或0时,你可以听到继电器动作的声音。

/*说明IO空间0x8000和0x0e000变量,以便用C实现IO空间操作*/

ioportunsignedport8000;

/*forCTRLword*/

ioportunsignedporte000;

/*forDCMOTORrun*/

/*下面是直流电机的控制代码*/

CtrlWord|=0x1;

/*设置D0=1*/

port8000=CtrlWord;

/*接通DCMOTOR的电源*/

/*下面代码使直流电机正向全速转动*/

porte000=1;

/*正向电压*/

/*下面代码使直流电机反向全速转动*/

porte000=0;

/*反向电压*/

/*下面代码使直流电机左右摆动*/

20;

i++)/*左右摆动20次*/

/*下面代码使直流电机慢转(通过DO输出方波的占空比控制)*/

for(k=0;

k<

4;

k++)/*控制转动持续时间*/

1000;

{porte000=1;

for(j=0;

j<

10000;

j++);

/*延时(长)*/

1300;

/*延时(短)*/

/*下面代码关闭电机电源*/

CtrlWord&

=0xfffe;

/*设置D0=0;

*/

(4).步进电机的控制

DES5402PP-U实验系统还配有一个步进电机。

IO空间的0x0f000h的D0,D1,D2,D3

四个比特位分别对应步进电机的四相驱动端。

依次向这四个比特位写入1,便可以控制步

进的转动。

请参考下面的代码:

/*下面代码控制步进电机反向转动5步*/

motor=1;

6;

j++)

portf000=motor;

/*senddriveplusetomotor*/

motor=motor<

1;

k++)/*delay*/

if(motor==0x10)/*只有低4位有效*/

/*下面代码控制步进电机正向转动5步(转动速度较快)*/

motor=0x8;

motor=motor>

>

2;

k++)/*延时,决定转动速度*/

if(motor==0x0)

/*只有低4位有效*/

(5).异步串口控制

‘VC5402本身并未提供异步串口,所以DES5402PP-U使用TLC16C550串口控制芯片

增加异步串口,以便与PC机RS232串口(DB9)直接通讯。

实验板上UART功能使用DSP

中断INT0,收与发都是同一中断,所以进入中断服务程序后应该判断是什么中断,然后

再做相应操作。

实验板上异步串口接口寄存器地址分配情况:

(IO空间)

0B000h:

发送与接受缓冲寄存器(线路控制寄存器D7=0);

波特率因子寄存器低字节(线路

控制寄存器D7=1)

0B001h:

中断允许寄存器(线路控制寄存器D7=0);

波特率因子寄存器高字节(线路控制寄

存器D7=1)

0B002h:

中断识别寄存器

0B003h:

线路控制寄存器

0B004h:

MODEM控制寄存器

0B005h:

线路状态寄存器

0B006h:

MODEM状态寄存器

0B007h:

Scratch寄存器

下面是初始化16C550的一段代码,串口通讯速率为9600波特率,8个数据位,1个停止

位,没有校验位:

;

/*PCUARTUSE15C550,itBASEADDRESSIS0B000h*/

uart_data.set0b000h;

uartRBR,THR(DLAB=0);

DLL(DLAB=1)registeraddress

uart_ier.set0b001h;

uartIER(DLAB=0);

DLM(DLAB=1)registeraddress

uart_iir.set0b002h;

uartIIR,FCRregisteraddress

uart_lcr.set0b003h;

uartLCRregisteraddress

uart_mcr.set0b004h;

uartMCRregisteraddress

uart_lsr.set0b005h;

uartLSRregisteraddress

uart_msr.set0b006h;

uartMSRregisteraddress

uart_scr.set0b007h;

uartSCRregisteraddress

(中间省略)

stm#08bh,temp

portwtemp,uart_lcr;

setLCR_D7=1tosetbaudrateregister

nop

stm#24,temp

portwtemp,uart_data;

setDLL=24(baudrate=9600,primaryF=3.6864M)

stm#0,temp

portwtemp,uart_iir;

setDLM=0(baudrate=9600,primaryF=3.6864M)

stm#03h,temp

setLCR_D7=0andlinecontrol

portruart_iir,temp;

tocleariir

portruart_lsr,temp;

toclearlsr

portwtemp,uart_ier;

enablereceive,sendints

有关异步串口与PC机的RS232通讯的操作请参阅TLC16C550的DATASHEET和系统配

套CD-ROM中的UART5402例程。

(6).数码管的控制

DES5402PP-U提供8个七段数码管,他们直接由系统的MCU(89C52)管理。

DSP部分

与MCU部分之间通过异步串口连接。

所以本实验系统提供另一片16C550串口管理芯片

(U17)。

MCU与DSP的异步串口通讯速率设置为9600波特率,8个数据位,1个停止

位,没有校验位。

该串口控制芯片(U17)占用DSP一个外部中断资源,即INT1。

串口通

讯格式总共14个Byte,如下所示:

0x550x77xxxxxxxxxxxxxxxxxxxx0x880x99

固定(2Byte)保留(2Byte)8Byte对应8个数码管,结束标志(2

Byte)

0x0-0x9显示数字0-9

例如,要在数码管上显示“85450520”8个数字,则需要将下面14Byte通过16C550发

往MCU,以便MCU正确显示。

这14Byte的内容为:

0x550x770xff0xff0x00x20x50x00x50x40x50x80x880x99

(7).液晶屏的控制

DES5402PP-U提供一个64X128的图形点阵液晶显示屏。

该液晶显示模块自带汉字字

库,每屏可以显示4行8列共32个汉字。

液晶屏也由MCU部分(89C52)管理。

与数码

管控制一样,DSP将需要显示的信息通过异步串口(串口管理芯片为U17)发送到MCU,

由MCU负责完成对液晶屏的具体操作。

液晶屏与数码管使用的是同一串口资源。

讯格式总共23个Byte组成,具体分配如下所示:

0x550x66xxxxxxxxxx…………………xxxx0x880x99

固定(2Byte)行列显示字固定16个Byte,每个汉字结束标志

号号符个数(ASIIC内码)占用2个Byte(2Byte)

若少于8个汉字,后面保留

注意,行号为1-4,列号为0-7。

液晶屏每行最多显示8个汉字,若超过,系统将丢弃多

余汉字。

另外,由于汉字内码为2个Byte,所以要显示ASIIC码的英文字母、数字、符

号(1个Byte)时,每次显示的字符个数必须是2的整倍数。

例如,在1行,0列显示两

个汉字“我们”,这数据格式为:

0x550x660x10x00x40xce0xd20c30xc7………0x000x000x880x99

固定开头行、列,共“我们”两个汉字内码,4Byte,然后结束标志

显示4个字符是12个Byte的0x0

再如,需要在第2行,第0列显示ASCII码的‘3’,格式为:

0x550x660x20x00x20x330x200x000x0………0x000x000x880x99

固定开头行、列,共‘3’的ASCII码和空格的ASCII码,然后结束标志

显示2个字符是14个Byte的0x0

(8).键盘的管理

DES5402PP-U系统提供了一个4X8共32个键的小键盘。

该键盘仍然由MCU

(89C52)部分管理。

DSP通过扩展的异步串口(U17)从MCU接收按键信息。

也就是

说,DSP通过该串口发送显示信息到数码管和液晶屏,并从该串口读取键盘按键。

键盘

通讯的格式如下:

‘E’‘K’‘Y’+键盘正码+键盘反码+0x0d

(EKY字母开头)结束标志

例如,当按下数字1键时,DSP接收到的数据为:

0x450x4b0x590x330xcc0x0d

实验内容:

在CCS环境中打开工程文件如图1所示,在该工程文件中,包括

存储器连接定位文件onchip.cmd,C的标准库文件以及用C和汇编编写的源程序。

整个

程序采用C做主程序,关键操作如中断服务程序,外设控制使用汇编的混合模式完成。

查看完整地代码段,设置断点,查看各个程序段的代码。

思考题:

1利用键盘控制直流电机的转速

2利用键盘控制步进电机的转动步数

3编写计算器程序

4编写募集交通灯控制程序

实验二C54x的基本算数运算

学习使用定点DSP实现16位定点加法、减法、乘法、除法运算的基本方法和编程技巧。

1、要求学生熟悉dsp中提供的大量指令。

2、通过试验,学生能独立编写实现定点加法、减法、乘法、除法运算的程序。

3、练习并掌TMS320C54X的汇编语言的汇编指令系统的使用方法。

4、练习并掌握用CCS调试程序的一些基本操作。

PC机,DSP54XX教学实验系统

实验原理

(1)定点DSP中数据表示方法

C54X是16位的定点DSP。

一个16位的二进制数既可以表示一个整数,也可以表

示一个小数。

当它表示一个整数时,其最低位(D0)表示20,D1位表示21,次高位

(D14)表示214。

如果表示一个有符号数时,最高位(D15)为符号位,0表示正数,1

表示负数。

例如,07FFFH表示最大的正数32767(十进制),而0FFFFH表示最大的负

数-1(负数用2的补码方式显示)。

当需要表示小数时,小数点的位置始终在最高位后,

而最高位(D15)表示符号位。

这样次高位(D14)表示2−1,然后是2−2,最低位

(D0)表示2−15。

所以04000H表示小数0.5,01000H表示小数2−3=0.125,而0001H

表示16位定点DSP能表示的最小的小数(有符号)2−15=0.000030517578125。

在后面的

实验中,除非有特别说明,我们指的都是有符号数。

在C54X中,将一个小数用16位定

点格式来表示的方法是用215乘以该小数,然后取整。

从上面的分析可以看出,在DSP中一个16进制的数可以表示不同的十进制数,或者

是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除

时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。

(2)实现16定点加法

加法运算:

ldtemp1,a;

将变量temp1装入寄存器A

addtemp2,a;

将变量temp2与寄存器A相加,结果放入A中

stla,add_result;

将结果(低16位)存入变量add_result中。

62

注意,这里完成计算temp3=temp1+temp2,我们没有特意考虑temp1和temp2是整数还是

小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。

(3)实现16位定点减法

减法运算:

stm#temp1,ar3;

将变量temp1的地址装入ar3寄存器

stm#temp3,ar2;

将变量temp3的地址装入ar3寄存器

sub*ar2+,*ar3,b;

将变量temp3左移16位同时变量temp1也左移16位,然后;

相减,结果放入寄存器B(高16位)中,同时ar2加1。

sthb,sub_result;

将相减的结果(高16位)存入变量sub_result。

(4)实现16定点整数乘法

数乘法运算:

rsbxFRCT;

清FRCT标志,准备整数乘

ldtemp1,T;

将变量temp1装入T寄存器

mpytemp2,a;

完成temp2*temp1,结果放入A寄存器(32位)

stha,mpy_I_h;

将结果(高16位)存入变量mpy_I_h

stla,mpy_I_l;

将结果(低16位)存入变量mpy_I_l

(5)实现16定点小数乘法

ssbxFRCT;

FRCT=1,准备小数乘法

ldtemp1,16,a;

将变量temp1装入寄存器A的高16位

mpyatemp2;

完成temp2乘寄存器A的高16位,结果在B中,同时;

将temp2装入T寄存器

sthb,mpy_f;

将乘积结果的高16位存入变量mpy_f

(6)实现16定点整数除法

将被除数装入T寄存器

mpytemp2,A;

除数与被除数相乘,结果放入A寄存器

ldtemp2,B;

将除数temp2装入B寄存器的低16位

absB;

求绝对值

stlB,temp2;

将B寄存器的低16位存回temp2

ldtemp1,B;

将被除数temp1装入B寄存器的低16位

rpt#15;

重复SUBC指令16次

subctemp2,b;

使用SUBC指令完成除法运算

bcddiv_end,agt;

延时跳转,先执行下面两条指令,然后判断A,若A>

0,

则;

跳转到标号div_end,结束除法运算

stlB,quot_i;

将商(B寄存器的低16位)存入变量quot_i

sthB,remain_i;

将余数(B寄存器的高16位)存入变量remain_i

xorB;

若两数相乘的结果为负,则商也应为负。

先将B寄存器清0

subquot_i,B;

将商反号

存回变量quot_i中

div_end:

(7)实现16定点小数除法

ldtemp1,16,B;

将被除数temp1装入B寄存器的高16位

and#0ffffh,B;

将B寄存器的高16位清为0。

这时余数被丢弃,仅保留商

延时跳转,先执行下面

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

当前位置:首页 > 医药卫生 > 基础医学

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

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