[信息与通信]2812实验箱实验指导书
DSP(TMS320F2812)
合肥工业大学
电气与自动化工程学院
DSP实验室
1
目录
前言 .................................................................................................................................3 第一部分 实验设备软、硬件说明及安装 ..........................................................................4 第二部分 实验 ..................................................................................................................9 实验1 CODE COMPOSER使用教程 ...................................................................................9 实验2 编写一个以C语言为基础的DSP程序 ............................................................. 17 实验3 编写一个以汇编语言(ASM)为基础的DSP程序 ........................................... 23 实验4 编写一个汇编和C混合的DSP程序 ................................................................. 28 实验5 拨码开关与数字I/O口实验 .............................................................................. 32 实验6 SPI接口与EEPROM存储器读写实验 ............................................................... 34 实验7 液晶显示器控制显示 ........................................................................................ 39 实验8 键盘输入与数码管显示 ..................................................................................... 43 实验9 DSP的定时器实验 ............................................................................................ 46 实验10 存储器实验 ..................................................................................................... 52 实验11 AD模数转换实验 ............................................................................................ 56 实验12 温度测量实验 ................................................................................................. 59 实验13 PWM输出实验 ................................................................................................ 61 实验14 频率测量实验 ................................................................................................. 63 实验15 有限冲击响应滤波器(FIR)滤波实验 ........................................................... 67 实验16 快速傅立叶变换(FFT)频谱分析实验 ........................................................... 74 实验17 SCI串行接口实验 ........................................................................................... 81 实验18 CAN接口通讯自检测实验 ............................................................................... 84 实验19 MCBSP与数模转换实验 .................................................................................. 88 实验20 直流电机调速实验 .......................................................................................... 90 实验21 步进电机调速实验 .......................................................................................... 94 实验22 USB通信模块实验 .......................................................................................... 98 参考文献 ....................................................................................................................... 105
2
前 言
电气与自动化工程学院为本科生和研究生开设了DSP原理及应用课程、DSP技术及其应用综合实验。根据我们学院所设置专业的特点,选择TI公司C2000系列DSP芯片作为主要学习内容,该课程的实践性很强,即实验是该课程的主要内容。我们针对TI公司C2000系列DSP芯片的工作原理、体系结构、指令系统和应用开发了一套实验平台――TMS320F2812实验箱,该实验箱内容丰富,易于扩展,特别适合综合实验。为了方便实验教学,我们编写了实验箱的实验指导书。
本实验指导书共分为两部分。第一部分分是实验设备软、硬件说明及安装。第二部分介绍在TMS320F2812的实验箱平台上进行的22个实验。
在电气与自动化工程学院DSP实验室的建设中,得到了美国TI公司大学
的捐赠;得到合肥工业大学实验室自制设备项目的资助;学院领导给予了很大的重视和支持,DSP实验室的研究生们也做了大量的工作。在此一并表示感谢。
本实验指导书针对DSP实验室研制的DSP(TMS320F2812)实验箱,由实验室的老师和研究生编写,全书由徐科军教授审阅。陈佳臻编写了实验11、12和17;姜鹏编写了实验14;单开编写了实验10和22;周全编写了实验6、9和18;张然编写了实验15和16;其余11个实验由王海欣编写。在实验指导书的编写过程中,参考了一些公司的资料和专家的书籍。由于编者水平有限,书中肯定存在不妥之处,敬请批评指正。
编者
2009年5月10日
3
第一部分 实验设备软、硬件说明及安装 一(开发环境
开发TMS320C28xx应用系统一般需要以下设备和软件调试工具:
1( PC机一台,安装Windows2000 或WindowsXP操作系统及常用软件。
2(TMS320C2812实验箱。
3(DSP仿真器一台及相关连线。如:ICETEK-5100USB仿真器。
4(TI的DSP开发集成环境Code Composer Studio。如:CCS3.3 for ’C2000。
5(仿真器驱动程序(见配套光盘)。
6(实验程序及文档。
二(实验箱的硬件连接
将电源线的一端插入实验箱外侧箱壁上的电源插孔中。确认实验箱面板上电源总开关处于“关”的位置,连接电源线的另一端至220V交流供电插座上,保证稳固连接。 三(构造DSP开发软件环境
1(安装CCS软件(此文档假定将CCS安装在默认目录C:\CCStudio_v3.3中,建议使用默认安装目录)。
(1)插入实验箱附带的教学光盘打开教学光盘的“CCS开发软件”目录。
(2)双击“Setup.exe”,进入安装程序。使用默认路径” C:\CCStudio_v3.3”。
(3)选择“Code Composer Studio”,按照安装提示进行安装,并重新启动计算机。
(4)安装完毕,桌面上出现两个新的图标。
2(安装DSP仿真器需要安装两部分:
(1)仿真器的Windows 驱动程序(并口无需,usb 口要安装);
(2)仿真器在CCS环境中的驱动程序。
3(安装实验程序
将实验箱对应的“2812projects”目录中的子目录复制到C:\CCStudio_v3.3\MyProjects上,并将目录中所有文件(包含子目录中的文件)的只读属性去除。
4(安装初始化仿真器程序
安装ICETEK-5100 USB2.0 仿真器
四(设置CCS
1(设置CCS工作在软件仿真环境
CCS可以工作在纯软件仿真环境中,就是由软件在PC机内存中构造一个虚拟的DSP环境,可以调试、运行程序。但一般软件无法构造DSP中的外设,所以软件仿真通常用于调试纯软件的算法和进行效率分析等。在使用软件仿真方式工作时,无需连接板卡和仿真器等硬件。
(1) 单击桌面上图标:进入CCS设置窗口。
(2) 在出现的窗口中按标号顺序进行如下设置:
4
图1-1 ccs设置驱动界面
接着在下面出现的窗口中选择“否(N)”。此时CCS已经被设置成Simulator 方式(软件
仿真TMS320F2812器件的方式),如果一直使用这一方式就不需要重新进行以下设置操作了。 2(设置CCS通过ICETEK-5100USB仿真器连接2812硬件环境进行软件调试和开发。 (1) 单击桌面上图标:进入CCS设置窗口。
(2) 在出现的窗口中按标号顺序进行如下设置:
图1-2 import 设置界面
(3) 接着在下面的窗口中按标号顺序进行如下选择:
5
图1-3 设置gel文件 (4) 在出现的窗口按标号顺序进行如下设置
图1-4 加入gel文件 (5) 在出现的窗口按标号顺序进行如下设置:
6
图1-5 退出CCS界面设置
以上设置完成后,CCS已经被设置成Emulator 的方式(用仿真器连接硬件板卡的方式),并且指定通过ICETEK-5100USB仿真器连接F2812实验箱。
五(启动CCS
1(启动Simulator 方式 (确认已按照上面说明设置为软仿真方式了。) 双击桌面上图标:
2(启动Emulator 方式
(1) 首先将实验箱电源关闭。连接实验箱的外接电源线。
(2) 检查ICETEK-5100USB仿真器的黑色JTAG插头是否正确连接到F2812板的插头上。注:仿真器的插头中有一个孔加入了封针,保证不会插错。
(3) 检查是否已经用电源连接线连接了F2812板上的插座。
(4) 检查其他连线是否符合实验要求。
(5) 用实验箱附带的USB信号线连接ICETEK-5100USB仿真器和PC机后面的USB插座,注意ICETEK-5100USB仿真器上指示灯Power 和Run灯点亮。
(6) 打开实验箱上电源开关。
(7) 双击桌面上仿真器初始化图标:如果出现下面提示窗口,表示初始化成功,
7
图1-6 仿真器复位
按一下空格键进入下一步操作。
如果窗口中没有出现“按任意键继续„”,请关闭窗口,关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(5)步重试。
如果窗口中出现“The adapter returned an error.”,并提示“按任意键继续„”,表示初始化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第(5)步重试。
(8)双击桌面上图标:启动CCS3.3。
(9)如果进入CCS提示错误,先选“Abort”,然后用“初始化ICETEK-5100 USB2.0仿真器”初始化仿真器,如提示出错,可多做几次。如仍然出错,拔掉仿真器上USB接头,连接USB接头,再做“初始化ICETEK-5100 USB2.0 仿真器”。
(10)如果遇到反复不能连接或复位仿真器、进入CCS报错,请打开Windows 的“任务管理器”,在“进程”卡片上的“映像名称”栏中查找是否有“cc_app.exe”,将它结束再试。
六(退出CCS
选择File菜单File->Exit,退出CCS。
8
第二部分 实验
实验1 Code Composer使用教程
一(实验目的
1(掌握Code Composer Studio 3.3的安装和配置步骤过程。
2(了解DSP开发系统和计算机与目标系统的连接方法。
3(了解Code Composer Studio 3.3软件的操作环境和基本功能,了解TMS320C28xx软件开发过程。
(1)学习创建工程和管理工程的方法。
(2)了解基本的编译和调试功能。
(3)学习使用观察窗口。
(4)了解图形功能的使用。
二(实验原理
1、开发TMS320F2xxx应用系统一般需要以下几个调试工具来完成:
-软件集成开发环境(Code Composer Studio 3.3):完成系统的软件开发,进行软件和硬件仿真调试。它也是硬件调试的辅助手段。
-开发系统(ICETEK 5100 USB):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。
-开发模块(F2812实验板):提供软件运行和调试的平台和用户系统开发的参照。
2、Code Composer Studio 3.3主要完成系统的软件开发和调试。它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C语言程序编译连接生成COFF (公共目标文件)格式的可执行文件,并能将程序下载到目标DSP上运行调试。
3、用户系统的软件部分可以由CCS建立的工程文件进行管理,一般包含以下几种文件:
-源程序文件:C语言或汇编语言文件(*.ASM 或*.C)
-头文件(*.H)
-命令文件(*.CMD)
-库文件(*.LIB)
三(实验设备
1(PC兼容机一台。
2(DSP 2812实验箱一台。
3(USB连接电缆一条。
四(实验内容与步骤
1(启动Code Composer Studio 3.3,成功地启动了CCS后会出现如下窗口(图1-1)。选择菜单Debug?Connect。
9
图1-1 CCS软件界面
2(创建工程
(1)创建新的工程文件:选择菜单“Project”的“New„”项,如图1-2所示
图1-2 创建工程文件
如下图1-3,按编号顺序操作建立volume.pjt工程文件。注:工程所在目录(步骤
?)可以自己选择,这里目录可设置为:C:\CCStudio_v3.3\MyProjects\volume。
图1-3 新建工程
10
展开主窗口左侧工程管理窗口中“Projects”下新建立的“volume.pjt”,其各项均为空。
(2)在工程文件中添加程序文件:
选择菜单“Project”的“Add Files to Project„”项;在“Add Files to Project对话框中选择文件目录为C:\CCStudio_v3.3\MyProjects\volume,改变文件类型为“C Source Files(*.c;*.ccc)”,选择显示出来的文件“volum.c”;重复上述各步骤,添加
C:\CCStudio_v3.3\MyProjects\volume目录下的DSP281x_Headers_nonBIOS.cmd和F2812_EzDSP_RAM_lnk.cmd文件到volum工程中;添加C:\ti\c2000\cgtools\lib
\rts2800_ml.lib。
(3)编译连接工程:
选择菜单“Project”的“Rebuild All”项,或单击工具条中的按钮;注意编译过 程中CCS主窗口下部“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。
3(编辑修改工程中的文件
(1)查看工程文件
展开CCS主窗口左侧工程管理窗中的工程各分支,可以看到“volume.pjt”工程中包含 “volume.h”、“rts2800.lib”、“volume.c”和“DSP281x_Headers_nonBIOS.cmd”“F2812_EzDSP_RAM_lnk.cmd”文件,其中头文件(*.h)为程序在编译时根据程序中的“include”语句自动加入的。
(2)查看源文件
*双击工程管理窗中的“volume.c”文件,可以查看程序内容。可以看到,用
C语 言编制的程序,大致分成几个功能块:
-头文件。描述标准库程序的调用规则和用户自定义数据、函数头、数据类型等。具体包含哪一个头文件,需要根据程序中使用了哪些函数或数据而定。比如:如果程序中使用了printf函数,它是个标准C提供的输入/输出库函数,选中“printf”关键字,按Shift+F1会启动关于此关键字的帮助,在帮助信息中可发现其头函数为stdio.h,那么在此部分程序中需要增加一条语句:#include “stdio.h”。
-工作变量定义。定义全局变量。
-子程序调用规则。这部分描述用户编制的子程序的调用规则。也可以写到用户自己编制的.h文件中去。
-主程序。即main()函数。它可分为两部分:变量定义和初始化部分、主循环部分。主循环部分完成程序的主要功能。
-用户自定义函数。
这个程序是一个音频信号采集、处理输出的程序。程序的主循环中调用自定义的函数read_signals来获得音频数据并存入输入缓存inp_buffer数组;再调用自定义函数write_buffer来处理音频数据并存入输出缓存;output_signals将输出缓冲区的数据送输出设备;最后调用标准C的显示信息的函数printf显示进度提示信息。整个系统可以完成将输入的音频数据扩大volume倍后再输出的功能。
read_signal子程序中首先应有从外接AD 设备获得音频数据的程序
,但此例中由
11
于未采用实际AD 设备,就未写相应控制程序。此例打算用读文件的方式获得数据,模拟代替实际的AD 输入信号数据。
write_buffer 子程序中首先将输入缓冲区的数据进行放大处理,即乘以系数volume,然后放入输出缓冲区。
output_signals函数完成将处理后的设备输出的功能,由于此例未具体操作硬件输出设备,所以函数中未写具体操作语句。
*双击工程管理窗中的“volume.h”文件,打开此文件显示,可以看到其中有主程序中要用到的一些宏定义如“BUF_SIZE”等。
*volume.cmd 文件定义程序所放置的位置,此例中描述了存储器资源,指定了程序和数据在内存中的位置。
(3)编辑修改源文件及编译程序
打开“volume.c”,找到“main()”主函数,将语句“input=inp_buffer;”最后的分号去掉,这样程序中就出现了一个语法错误;重新编译连接工程,可以发现编译信息窗口出现发现错误的提示;双击红色错误提示,CCS自动转到程序中出错的地方;将语句修改正确(将语句末尾的分号加上);重新编译;注意:重新编译时修改过的文件被CCS自动保存。
(4)修改工程文件的设置,如图1-4所示。
图1-4 修改工程文件
通过以上设置操作,重新编译后,程序中的用户堆栈的尺寸被设置成1024个字。
4(基本调试功能
(1)下载程序:执行File Load Program ,在随后打开的对话框中选择刚建立的文件:
12
C:\CCStudio_v3.3\MyProjects\volume\Debug\volume.out
(2)设置软件调试断点:在项目浏览窗口中,双击volume.c激活这个文件,移动光标到main()行上,单击鼠标右键选择Toggle Breakpoint 或按F9 设置断点(另外,双击此行左边的灰色控制条也可以设置或删除断点标记)。
(3)利用断点调试程序:选择Debug Run或按F5 运行程序,程序会自动停在main()函数上。
?按F10 执行到write_buffer()函数。
?再按F8,程序将转到write_buffer 函数中运行。
?此时,为了返回主函数,按shift-F7 完成write_buffer 函数的执行。
?再次执行到write_buffer 一行,按F10 执行程序,对比与F8 执行的不同。
5(使用观察窗口
(1)执行View Watch Window打开观察窗口。
(2)在volume.c中,用鼠标双击一个变量(比如num),再单击鼠标右键,选择“Quick Watch”,CCS将打开Quick Watch窗口并显示选中的变量。
(3)在volume.c中,选中变量num,单击鼠标右键,选择“Add to Watch Window”,CCS将把变量添加到观察窗口并显示选中的变量值。
(4)在观察窗口中双击变量,则弹出修改变量窗口。此时,可以在这个窗口中改变变量的值。
(5)把str 变量加到观察窗口中,点击变量左边的”+”,观察窗口可以展开结构变量,并且显示结构变量的每个元素的值。
(6)把str 变量加到观察窗口中;执行程序进入write_buffer 函数,此时num变量超出了作用范围,可以利用Call Stack窗口察看在其他函数中的变量:
?选择菜单View Call Stack打开堆栈窗口。
?双击堆栈窗口的main()选项,此时可以察看num变量的值。
6(文件输入/输出
Code Composer Studio的Probe 断点允许用户在指定位置提取/注入数据。Probe断点可以设置在程序的任何位置,.当程序运行到Probe断点时,与Probe断点相关的事件将会被触发,当事件结束后,程序会继续执行。Probe断点触发的事件是:从PC机存储的数据文件中的一段数据加载到DSP的缓冲区中。
(1)在真实的系统中,read_signals函数用于读取A/D模块的数据并放到DSP缓冲区中。在这里,代替A/D 模块完成这个工作的是Probe断点。当执行到函数read_signals时,软件断点完成这个工作。在程序行read_signals(input);上单击鼠标右键选择“Toggle Software Breakpoint”,设置软件断点。
(2)执行图1-5 的操作。此时,已经配置好了Probe断点和与之关联的事件。进一步的结果在下面实验中显示。注:数据文件所在路径:
C:\CCStudio_v3.3\MyProjects\volume\sine2.dat。
13
图1-5 设置file io文件
7(图形功能简介
下面我们使用CCS的图形功能检验上一节的结果。首先进行下面设置操作(如图1-6所
示):
14
图1-6 设置图形显示功能 -在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。 -按F12 运行程序,观察input 窗口的内容。
8(选择菜单File?workspace?save workspacs As„,输入文件名SY.wks 。 9(退出CCS 。
五(预习要求
1(熟悉DSP系统的软硬件安装连接方法。
2(要求熟悉Code Composer Studio 3.3的操作环境和基本功能。
15
六(注意事项
在执行C语言的程序时,为了快速的运行到主函数调试自己的代码,可以使用Debug->Go
main命令,本实验中的使用的是较为繁琐的一种方法。
七(思考题
通过对工程文件“volume”的编译、执行,得到的结果是什么图形, 八(实验报告要求
1.硬软件的安装及创建查看文件的掌握与体会。
2.基本调试功能的掌握与心得。
16
实验2 编写一个以C语言为基础的DSP程序
一(实验目的
1(学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。
2(学习编制连接命令文件,并用来控制代码的连接。
3(学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。
4(熟悉使用软件仿真方式调试程序。
二(实验原理
1( 标准C语言程序
CCS支持使用标准C语言开发DSP应用程序。当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c(如:volume.c)。CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP的可执行代码。最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。所以用户工程中需要注明使用C的支持库。
2(命令文件的作用
命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。命令文件也为链接程序提供了DSP外扩存储器的描述。在程序中使用CMD文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是要说明的存储区必须是存在的和可用的。
3(内存映射(map)文件的作用
一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP代码的确切信息。当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。另外,通过观察map文件,可以掌握DSP存储器的使用和利用情况,以便进行存储器方面的优化工作。
4(程序设计流程(图2-1)
开始
定义三个整形变
量x,y,z
赋初值:x=1 y=2
计算x+y
输出结果到z
图2-1程序设计流程
17
三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(建立新的工程文件
(1)双击桌面上图标,启动Code Composer Studio3.3。选择菜单Debug?Connect。
(2) 在C:\CCStudio_v3.3\MyProjects\CProgram文件夹中建立工程CProgram.pjt
设置步骤如图2-2。注:工程所在目录(步骤?)可以自己选择,这里目录可设置为:
C:\CCStudio_v3.3\MyProjects\CProgram。
图2-2 建立CProgram.pjt 2(编辑输入源程序
(1)C语言程序
-先新建源程序窗口,如图2-3所示:
图2-3 建立新的源程序 -输入源程序:
int x,y,z;
main()
{ x=1;
y=2;
while ( 1 )
{ z=x+y;
}
}
18
-保存源程序为CProgram.c:
-将源程序加入工程CProgram.pjt,如图2-4所示。
图2-4 源程序加入工程
(2)连接命令文件
-如同第(1)步操作,建立新程序窗口。
-输入连接命令文件内容:
-l rts2800_ml.lib
-stack 400h
-heap 100
MEMORY
{
PAGE 0 :
/* For this example, H0 is split between PAGE 0 and PAGE 1 */
/* BEGIN is used for the "boot to HO" bootloader mode */
/* RESET is loaded with the reset vector only if */
/* the boot is from XINTF Zone 7. Otherwise reset vector */
/* is fetched from boot ROM. See .reset section below */
RAMM0 : origin = 0x000000, length = 0x000400
BEGIN : origin = 0x3F8000, length = 0x000002
PRAMH0 : origin = 0x3F8002, length = 0x000FFE
RESET : origin = 0x3FFFC0, length = 0x000002 PAGE 1 :
/* For this example, H0 is split between PAGE 0 and PAGE 1 */
RAMM1 : origin = 0x000400, length = 0x000400
DRAMH0 : origin = 0x3f9000, length = 0x001000
SARAMDATA : origin = 0x100000, length = 0x010000 }
SECTIONS
{ /* Setup for "boot to H0" mode:
19
The codestart section (found in DSP28_CodeStartBranch.asm)
re-directs execution to the start of user code.
Place this section at the start of H0 */
codestart : > BEGIN, PAGE = 0
ramfuncs : > PRAMH0 PAGE = 0
.text : > PRAMH0, PAGE = 0
.cinit : > PRAMH0, PAGE = 0
.pinit : > PRAMH0, PAGE = 0
.switch : > RAMM0, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1
.ebss : > SARAMDATA, PAGE = 1
.econst : > SARAMDATA, PAGE = 1
.esysmem : > DRAMH0, PAGE = 1
}-l rts2800_ml.lib
-如同第(1)步操作,将文件存为:
C:\CCStudio_v3.3\MyProjects\CProgram\CProgram.cmd
-将上述编辑的程序加入工程CProgram.pjt。
3(编译源文件、下载可执行程序
(1) 单击菜单“Project”、“Rebuild All”。
(2) 执行File Load Program ,在随后打开的对话框中选择刚刚建立的
C:\CCStudio_v3.3\MyProjects\CProgram \debug\CProgram.out 文件。完成后,系统自动打开一个反汇编窗口“Disassembly”,并在其中指示程序的入口地址为“_c_int00”。(若没有自动打开可:Debug-Restart后再load)
4(打开观察窗口
开启CPU寄存器观察窗口:单击菜单View->watch window。
5(观察程序运行结果
这时,在“Disassembly”代表程序运行位置的绿色箭头指向程序的入口地址,程序将
从此开始执行。
(1) 选择菜单中Debug->Go Main,CCS自动打开CProgram.c,程序会停在用户主程序入口main上,这从反汇编窗口和CProgram.c窗口中的指示箭头位置可以看出。
(2) 将变量x、y、z分别加入观察窗口:
在源程序中双击变量名,再单击鼠标右键,选择“Add to Watch Window”。这时,这3个变量还未作初始化。
(3) 单步运行2次,在观察窗中观察到变量x、y被赋值。变化的值被显示成红色。同时在“Memory”窗口中也能观察到x和y值的改变。
(4) 再单步运行,可观察到z 的值被计算出来。双击观察窗口中变量x、y在“Value”栏中的取值并修改成其他取值,单步运行后观察结果。
20
(5) 双击观察窗口中变量x、y在“Value”栏中的取值,并修改成0;选择菜单Debug->Restart,返回程序起点。
(6) 重新单步运行程序
6(内存映像文件
(1) 选择菜单Project->Build Options„,启动“Build Options”工程设置对话框。
(2) 单击“Linker”属性页,在“Map Filename”项中观察生成的map文件名和路径。
(3) 单击“取消”退出。
7(对照观察map文件和cmd文件的内容
(1) 选择菜单File->Open„,将找到
C:\CCStudio_v3.3\MyProjects\CProgram\Debug目录,将文件类型改为“Memory Map Files”,选择CProgram.map文件、打开。
(2) 打开CProgram.cmd 文件。
(3) 程序的入口地址:map文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(_c_int00)。
(4) 内存使用情况:
-map文件中“MEMORY CONFIGURATION”标明了程序占用RAM 的使用情况,共占用b2H 个存储单元。
-观察map文件中的“SECTION ALLOCATION MAP”段,可以看出CProgram.obj的入口地址为0x3f80aa,这也是main函数的入口地址。
-用户堆栈段从400H 开始,程序运行到main函数中后,变量x、y、z 均开设在栈中。
-还能看出程序运行都需要调用rts2800 _ml.lib 中的哪些模块。
8(改变内存分配
修改cmd文件中的
DRAMH0 : origin = 0x3f9000, length = 0x001000 改为
DRAMH0 : origin = 0x3f8000, length = 0x001000
重新编译工程,观察map文件中有何变化。
9(退出CCS
五(预习要求
1(熟悉C语言,了解常用的C语言程序设计方法。
2(了解DSP内存的分配情况。
六(注意事项
在重新单步运行程序,注意观察在CPU寄存器窗口中,各寄存器使用情况,观察哪个寄存器参与了运算。View->Registers。
七(思考题
修改程序完成计算sin(2.3π)+cos(1.7π)的值。
八( 实验报告要求
1(通过实验可以发现,修改cmd文件可以安排程序和数据在DSP内存资源中的分配和位置;map文件中描述了程序和数据所占用的实际尺寸和地址。
21
2(C语言编制的程序,在经过编译器编译后,需要连接若干C标准程序辅助运行。以下是运行流程:
(1)程序入口为_c_int00,执行标准C库中的程序,负责初始化C环境、申请堆栈、初始化有初始值的变量等。
(2)程序最终转到用户编制的主函数运行。
(3)程序在主函数中的无限循环中持续运行。
22
实验3 编写一个以汇编语言(ASM)为基础的DSP程序 一. 实验目的
1(学习用汇编语言编制程序;了解汇编语言程序与C语言程序的区别和在设置上的不同。
2(了解TMS320C28x汇编语言程序结果和一些简单的汇编语句用法。
3(学习在CCS环境中调试汇编代码。
二. 实验原理
1(汇编语言程序
汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C语言编制的程序也稍有不同。其区别为:
(1)汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C语言程序在执行时,先要调用C标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
言,在编制汇编语言程序时,需要设置链接参数,(2)由于CCS的代码链接器默认支持C语
选择非自动初始化,注明汇编程序的入口地址。
2(程序设计要求
程序框图如图3-1所示。
开始
定义三个整形变
量x,y,z
赋初值:x=1 y=2
计算x+y
输出结果到z
图3-1 程序流程图
三. 实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(建立新的工程文件
(1)双击桌面上图标,启动Code Composer Studio 3.3。选择菜单Debug?Connect。
(2)进行以下设置(如图3-2所示):
注:工程所在目录(步骤?)可以自己选择,这里目录可设置为:
C:\CCStudio_v3.3\MyProjects\TASM。
23
图3-2 建立TASM.PJT 2(设置工程文件(如图3-3所示)
图3-3 设置工程文件 3(编辑输入源程序
(1)汇编语言程序,如图3-4所示。
图3-4 新建源程序 先新建源程序窗口:
24
-输入源程序:
.global start
start:
MOV @AR1,#9000 ;给ar1寄存器赋值
LOOP:
ADDB SP,#3 ;此时sp指针为403h地址
MOV *-SP[1],#10 ;把立即数10 放到402地址上
MOV *-SP[2],#1 ;把立即数1放到401地址上
MOV AL,*-SP[2] ;把401 地址上数据读出放到AL寄存器中
ADD AL,*-SP[1] ;把401 和402地址中数据做加法运算,把结果放到AL寄存器
MOV *-SP[3],AL ;把AL中值放到400h地址中
nop ;空指令
nop
SUBB SP,#3 ;设置sp指针为400h地址
BANZ LOOP,AR1-- ;有条件跳转,只要ar1中的值不为0
.end
-保存源程序为TASM.asm。
(2)连接命令文件
-如同第(1)步操作,建立空的源程序窗口。
-输入连接命令文件内容:
-stack 400h
-heap 100
MEMORY
{
PAGE 0 :
/* For this example, H0 is split between PAGE 0 and PAGE 1 */
/* BEGIN is used for the "boot to HO" bootloader mode */
/* RESET is loaded with the reset vector only if */
/* the boot is from XINTF Zone 7. Otherwise reset vector */
/* is fetched from boot ROM. See .reset section below */
RAMM0 : origin = 0x000000, length = 0x000400
BEGIN : origin = 0x3F8000, length = 0x000002
PRAMH0 : origin = 0x3F8002, length = 0x000FFE
RESET : origin = 0x3FFFC0, length = 0x000002 PAGE 1 :
/* For this example, H0 is split between PAGE 0 and PAGE 1 */
RAMM1 : origin = 0x000400, length = 0x000400
DRAMH0 : origin = 0x3f9000, length = 0x001000
25
SARAMDATA : origin = 0x100000, length = 0x010000 }
SECTIONS
{ /* Setup for "boot to H0" mode:
The codestart section (found in DSP28_CodeStartBranch.asm)
re-directs execution to the start of user code.
Place this section at the start of H0 */
codestart : > BEGIN, PAGE = 0
ramfuncs : > PRAMH0 PAGE = 0
.text : > PRAMH0, PAGE = 0
.cinit : > PRAMH0, PAGE = 0
.pinit : > PRAMH0, PAGE = 0
.switch : > RAMM0, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1
.ebss : > SARAMDATA, PAGE = 1
.econst : > SARAMDATA, PAGE = 1
.esysmem : > DRAMH0, PAGE = 1 }
-将文件存为C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\TASM.cmd
(3)将上述编译的源程序加入工程TASM.pjt。
4(编译源文件、下载可执行程序
(1)选择菜单Project->Rebuild All。
(2)执行FileàLoad Program,在随后打开的对话框中选择刚刚建立的
C:\CCStudio_v3.3\MyProjects\TASM\Debug\TASM.out 文件。完成后,系统自动打开
TASM.asm源程序窗口,并在其中指示程序的入口地址为标号“start”后的语句。(若没有,
Debut-Restart)
5(打开观察窗口
(1)选择菜单View->Disassembly。注意程序运行指针停留的位置。
(2)开启CPU寄存器观察窗口:单击菜单View->Registers-> CPURegisters。看PC指针
取值与当前程序运行地址对应。此处为0X3F8002。
(3)打开观察窗口。看AL寄存器,此时应为0。如果AL寄存器的值不为0,请点击
Debug->Reset Cpu, 对2812 芯片进行复位。
(4)开启内存观察窗口:
选择“View”菜单中“Memory„”项,在“Memroy Window Options”窗口中的“Adress”
项中输入0x400,单击“OK”完成设置。
6(观察程序运行结果
(1)单步运行1次(按F10 快捷键即可),在观察窗中观察到AR1 寄存器被赋值0x2328。
26
(2)再单步运行3 次,将看到内存窗口中0x402 被赋值0x10,0x401地址被赋值0x1。
(3)再单步运行3 次,可观察0x400 地址中的值变为0xb,此数据就是把0x402 和0x401 地址中数据相加得到的。可以修改下面两句语句的立即数值,重新编译,然后单步运行观察结果。
MOV *-SP[1],#10 ;把立即数10 放到402 地址上
MOV *-SP[2],#1 ;把立即数1放到401 地址上
7(对照观察map文件和cmd文件的内容
(1)选择菜单File->Open„,将找到C:\CCStudio_v3.3\MyProjects\TASM\Debug目录,将文件类型改为“Memory Map Files”,选择TASM.map文件、打开。
(2)打开TASM.cmd文件。
(3)程序的入口地址:map文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(start)。
(4)内存使用情况:
-map文件中“MEMORY CONFIGURATION”标明了程序占用RAM 的使用情况,共占用fH 个存储单元。比较一下,这比用C编制的程序占用的要小得多。
-观察map文件中的“SECTION ALLOCATION MAP”段,可以看出TASM.obj的入口地址为3F8002H,这也是程序的入口地址。
8(退出CCS
五(预习要求
1(熟悉汇编语言,了解常用的汇编语言程序设计方法。
2(了解DSP内存的分配情况。
六(注意事项
1(在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开始。
2(由于本实验的主程序为汇编语言,所以要把它设置为汇编模式才能正常工作。 七(思考题
1(使用C语言开发应用程序的优缺点
八(实验报告要求
1(汇编语言程序从指定位置开始运行,但汇编程序需要对运行环境的初始化工作。
2(实验中的程序有堆栈操作,所以初始化堆栈指针。
3(编译后,各寄存器和内存窗口的变化
27
实验4 编写一个汇编和C混合的DSP程序
一(实验目的
1(在了解纯C语言程序工程和汇编语言程序工程结构的基础上,学习在工程中加入汇编程序的混合编程方法。
2(了解混合编程的注意事项。
3(理解混合编程的必要性和在什么情况下要采用混合编程。 二(实验原理
1(使用C语言开发应用程序的优缺点
*优点:
-易于开发和维护。由于用C语言书写接近自然语言,其可读性强、利于理解,在编制、修改、实现算法方面比用汇编语言开发容易。
-可移植性强。
-不容易发生流水线冲突。编译器能提供完善的解决流水线冲突的结果。
-有大量现存的算法可利用。
-适用于人机界面的开发。
*缺点:
-代码量大。
-程序效率较低。
-优化代码存在一定困难。
综上所述,我们一般用C语言设计应用程序的总体框架、解决人机接口和对速度效率要 求不太高的复杂算法。
2(使用汇编语言开发应用程序的优缺点
*优点:
-更能发挥系统特点。由于汇编语言掌控系统硬件的能力强于C语言,设计出来的程序更加贴近硬件特性,往往能将硬件效能发挥到极致。
-代码精练,效率高。用汇编语言设计的程序,代码短、不容易产生冗余。
-代码量小。
*缺点:
-可读性差。不利于复杂算法的开发和实现。
-可移植性差。
-容易产生流水线冲突。由于排除冲突需要靠人来辅助完成,这要求编程人员有较为丰富的开发经验和对硬件工作机制的深刻理解。
3(如何混合编程
(1)混合工程:在工程中可以同时包含C语言程序和汇编语言程序,无需更改编译选项。一般地,我们使用C程序为主,加入汇编语言程序模块。
(2)使用模块技术:在应用程序中划分出比较清晰的模块,不同模块可采用不同语言设计。强调效率和速度的模块采用汇编设计。尽量少用汇编语言设计程序。
(3)如何找出需要用汇编程序设计的模块:
28
-用C语言完成设计后,运用CCS的软件仿真功能,充分测试程序,找到程序运行中的瓶颈(速度方面的和空间方面的)。
-再使用分块仿真技术尽可能缩小模块。
-找到的模块单独写成子程序,存入独立的文件中。
-由于CCS编译器能产生C语言程序到汇编程序的中间文件,观察需要优化的模块的汇编结果,进行人工优化。
-最后运用人工优化后形成的汇编程序模块,代替原来需要优化的C语言模块,进行编译。
-程序中可使用内嵌汇编。编译器可直接使用内嵌的汇编语句生成最终代码。但需要语句中双引号中为合法的汇编语句。
4(何时使用混合编程技术
-当程序中需要操作与硬件密切相关的设备,而用C语言较难实现时。比如:在中断程序设计时需要设置中断向量表,向量表中空间有限,用C语言语句有困难,且需向量表要在内存中精确定位,这时可将设置中断向量表的部分用汇编语言代替。
-当需要绕开C编译器的规定,进行特殊操作时。比如:C语言规定,程序不能访问程序代码区,而系统功能需要进行类似访问时可采用限制较小的汇编语言程序设计。
-当需要提高模块的效率(包括空间上和时间上两方面的),而C语言程序无法达到要求时。
5(实验程序解释
实验程序提供了一个使用C与汇编程序混合编程的实例,是一个用汇编语言模块优化自 己编制的应用程序的实例。首先是一个纯用C语言开发的工程,再根据假设,需要将其中一个模块改造成用汇编语言模块优化的模块。通过实验过程,用户可充分了解混合编程可以采取的步骤和方法。
三. 实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(建立新的工程文件
(1)双击桌面上图标,启动Code Composer Studio 3.3。选择菜单Debug?Connect。
(2)打开工程:选择菜单Project->Open„,选择打开工程文件
C:\CCStudio_v3.3\MyProjects\CASM\CASM.pjt
(3)展开工程管理窗口中CASM工程,双击Source下的CProgram.c项,打开CProgram.c源程序窗口。可以看到,程序完成了一个简单的运算,它先开设了三个全局变量x、y、z,然后分别给x 和y赋初值,再在循环中计算x+y,结果赋值给z。
(4)编译并下载程序
此设置完成在每次编译完成后将程序自动下载到DSP上。
选择菜单Project->Build All,编译、连接和下载程序。
(5)运行程序,观察结果:观察变量z 的结果值。
2(修改程序
29
(1)修改算法部分成单独子程序:假设在循环中进行的运算是需要用汇编语言程序模块优化的部分。首先将“z=x+y;”语句修改成“z=add(x,y);”,在程序头上,变量定义之前加上行“int add(int a,int b);”,在程序末尾,添加如下子程序:
int add(int a,int b)
{
return(a+b);
}
如此,将算法搬移到一个C语言的子程序模块中实现。修改完成后,可以编译、下载、运行到断点,观察运行结果,判断是否子程序能完全与原程序一样完成算法。
(2)将子程序移入add.c:打开一个新的空的源文件窗口,将main函数后的子程序复制到窗口中;注释main函数后面的子程序(在子程序前一行加“/*”,在子程序结尾行后加“*/”);将新窗口中的内容保存为文件add.c。
(3)将add.c加入工程,编译、下载、运行,检查结果,保证运算无误。
(4)选择菜单Project->Build Options„,进行如下设置(如图4-1所示):
图4-1 参数设置
(5)重新编译工程;打开C:\CCStudio_v3.3\MyProjects\CASM\add.asm;在其中的“.line2”行、“.line3”行、“.line 4”行头上分别加分号,即注释这3 个语句。
(6)将工程中的add.c换成add.asm:在工程管理窗口中用鼠标右键单击add.c,选择“Remove from Project”;用鼠标右键单击CASM.pjt,选择“Add Files to Project„”,选择C:\CCStudio_v3.3\MyProjects\CASM\add.asm。
(7)重新编译、下载、运行程序并观察结果。由于add.asm是CCS编译器从add.c编译得来的,下面要做的就是手工调整add.asm中的汇编代码,从而实现优化处理。
30
3(退出CCS
五(预习要求
1(了解纯C语言程序工程和汇编语言程序工程结构
2(了解混合编程的方法。
六(注意事项
1(在汇编程序中使用其他C语言模块中定义的变量或函数名称时,需要在引用的名称前加一下划线。如:C中定义的变量为x,在汇编中引用时要用_x。
2(汇编语言写的子程序需要符合C语言的调用规则,尤其是在默认的辅助寄存器使用上和栈的使用上要求兼容。
3(在汇编语言模块中,需要编程者自己消除流水线冲突。
4(在使用内嵌汇编技术时,需要考虑以下内容:
a. 要非常小心地处理,以免破坏C语言操作环境。编译器在遇到内嵌汇编语句时,不会对其中的汇编语句进行分析处理。
b(避免从内嵌汇编语句跳转到C语言模块中,那将极容易造成寄存器使用上的混乱,从而产生难以预料的结果。
c(不要在内嵌汇编语句中改变C语言模块中变量的值,但可以安全地读取它们的值。
d(在汇编程序中不要使用内嵌汇编。
七(思考题
使用混合编程法完成计算sin(2.3π)+cos(1.7π)的值。
八(实验报告要求
1(说明修改程序的方法和前后顺序
2(说明重新编译的方法和结果的观察情况
31
实验5 拨码开关与数字I/O口实验
一(实验目的
1(通过实验学习使用2812 DSP的通用输入/输出管脚直接控制外围设备的方法。
2(了解发光二极管的控制编程方法。
二(实验原理
1(TMS320f2812 的通用输入/输出管脚
TMS320f2812 DSP有最多56 个专门的通用输入输出管脚。这些通用输入输出管脚
通过专用寄存器可以由软件控制,比如指定输入或输出等。
2(指示灯的控制
GPIO 控制指示灯如图5-1所示。GPIO 与被控指示灯的通过拨码开关相连。四个管脚分别属于DSP的SCITXDA、SCIRXDA、XINT1_XBIO以及CAP6_QEPI2,可以设置成通用输入/输出管脚使用。
SW1D101SCITXDA81SCIRXDA723.3VR40D102XINT1_XBIO631CAP6_QEPI2542
D1033
4
D1045
330
图5-1 GPIO指示灯控制原理图
如果要点亮发光二极管,需要在GPIO上输出低电平,如果输出高电平则指示灯熄灭。如果定时使GPIO上的输出改变,指示灯将会闪烁。
三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(启动Code Composer Studio 3.3. 选择菜单Debug?Connect。
2(打开工程文件工程目录:C:\CCStudio_v3.3\MyProjects \dip 浏览DSP281x_Device.c 文件的内容,理解各语句作用。
3(编译、下载程序。
4(运行程序观察结果
5(结束程序运行,退出CCS。
五(预习要求
1(了解2812 DSP的通用输入/输出管脚
2(了解控制外围设备的方法
3(了解发光二极管的控制编程方法。
六(注意事项
将拨码开关拨动到“ON”的位置,指示灯电路连通,否则指示灯不能点亮。
32
七(思考题
1(GPIO的高低电平变化对发光二极管有何影响,
2(考虑如何改变发光二极管定时闪烁的时间间隔, 八(实验报告要求
1(说明观察到的结果现象,并记录
2(说明GPIO的高低电平变化对发光二极管有何影响,
3(画出主程序流程图。
33
实验6 SPI接口与EEPROM存储器读写实验
一(实验目的
1(使用TMS320F2812中的SPI接口的基本原理和使用方法
2(EEPROM(AT25040)的使用方法
二(实验内容
1(DSP的初始化配置
2(SPI串行接口的初始化
3(四线接口的EEPROM的读写
三(硬件连接
DSP实验箱中F2812的SPI接口与4Kbit(512个字节)的EEPROM AT25040相接。硬件原理图如图6-1所示。
图6-1 EEPROM与SPI接口电路硬件原理图 四(实验原理
1)SPI接口特性
串行外设接口(SPI)是一个高速、同步串行I/O口,它允许长度可编程的串行位流(1到16位)以可编程的位传输率移入或移出器件。通常SPI用于DSP控制器和外设或另一个处理器之间的通信。典型的应用包括外设I/O或通过如移位寄存器、显示驱动器或模数转换器等器件所做的外设扩展。通过双缓冲发送和双缓冲接收,此串行外设接口具有16位发送和接收能力。所有数据寄存器是16位。需要特别注意的:写传输数据到串联数据寄存器SPIDAT时必须左对齐。
, 4个外部接口
, SPISOMI:SPI从输出/主输入引脚(图6-1中标号:SPIIN)
, SPISIMO:SPI从输入/主输出引脚(图6-1中标号:SPIOUT)
, SPISTE:SPI从模式使能引脚(图6-1中标号:SPICS)
, SPICLK:SPI串行时钟引脚,(图6-1中标号:SPICLK)
, 2种控制模式:主控模式和从动模式
, 波特率:可编程的125个波特率
, 数据长度:1到16位
34
, 4个时钟模式
, 无延时的下降沿
, 有延时的下降沿
, 无延时的上升沿
, 有延时的上升沿
, 同步接收与传输操作
, 12个SPI单元控制寄存器
SPI加强特性:
, 发送/接收16级缓冲的先进先出(SPIFIFO)功能
, 滞后传输控制
2)时钟选择
SPI中的时钟极性位CLOCK POLARITY(SPICCR.6)和时钟相位位CLOCK PHASE(SPICTL.3)控制着引脚SPICLK上的四种不同的时钟数据格式。CLOCK POLARITY位选择时钟有效沿为上升沿还是下降沿。CLOCK PHASE位则选择时钟的1/2周期延时。四种不同的时钟设计:
1)无延时的下降沿;2)有延时的下降沿;3)无延时的上升沿;4)有延时的上升沿。
根据移位寄存器的时序要求,本实验选用无延时的上升沿方式传送,即串行外设接口在SPICLK信号的上升沿时发送数据,而在SPICLK信号的下降沿接收数据。
3) AT25040(EEPROM)介绍
四线接口的EEPROM是一种最常用的非易失存储器,具有最高达3MHz的时钟速率,
2而且无需像IC总线接口进行主从器件之间的应答,因此具有极高的传输速率。同时四线接口相当于同步串行接口SPI来说,具有灵活的字符长度,因此可以方便的使用软件进行模拟。AT25040(EEPROM)控制指令格式如表6-1所示。
表6-1 AT25040(EEPROM)控制指令格式
指令 指令格式 操作
WREN,0000 X110 写使能
WRDI,0000 X100 使写不能
RDSR,0000 X101 读EEPROM状态寄存器
WRSR,0000 X001 写EEPROM状态寄存器
READ,0000 A011 读数据
WRITE,0000 A010 写数据
时序图如图6-2、6-3、6-4、6-5、6-6、6-7所示。
35
图6-2 写使能时序
图6-3使写不能时序
图6-4读EEPROM状态寄存器时序
图6-5写EEPROM状态寄存器时序
36
图6-6 读数据区时序
图6-7 写数据区时序
AT25040(EEPROM)有512个字节,存储的地址范围为000H-1FFH
五(软件流程
软件流程如图6-8所示。
开始
DSP初始化
向EEPROM指定起始
地址写入一段数据
从指定地址
读出写入数据
结束
图6-8 EEPROM实验软件流程
37
六(实验步骤
1(启动Code Composer Studio 3.3. 选择菜单Debug?Connect。
2(打开菜单“Project”的“Open”项;选择
C:\CCStudio_v3.3\MyProjects\spi_eeprom\Example_281xSpi_FFDLB.pjt并打开该工程。在项目浏览器中,双击spi_write_read.c,激活spi_write_read.c 文件,浏览该文件的内容,理解各语句作用。,
3(编译、下载程序。
4(通过改变write_data的数值,写不同的数据,或者通过改变addr的数值,对不同的地址发送数据,观察数码管的显示。
八(预习要求
1. 了解TMS320F2812片内的SPI模块的控制。
2. 了解SPI电路的控制方法。
3. 掌握SPI如何发送数据和接收数据。
4. 掌握AT25040(EEPROM)如何发送和接收数据。
九(思考题
1. 修改程序,对EEPROM的512个字节单元分别做读写操作,并指出不能读写的单
元。
十(实验报告要求
1(写出实验结果。
2(写出SPI读EEPROM写EEPROM的程序流程图。,
38
实验7 液晶显示器控制显示
一(实验目的
1(通过实验学习使用2812DSP的扩展I/O 端口控制外围设备的方法
2(了解液晶显示器的显示控制原理及编程方法。
二(实验原理
1(液晶显示控制方法
液晶显示器件(LCD)独具的低压、微功耗特性使它在嵌入式系统中得到了广泛的应用。常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块。其中图形液晶模块在我国应用较为广泛,因为汉字不能像西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。
使用图形液晶可以显示汉字和图形。大多数图形液晶都以横向8个点为1个字节数据,即一个单位,每个单位在显示缓冲区内有对应的地址。在图形液晶上汉字用点阵来显示,二进制为0的对应的点暗,二进制为1的对应的点亮。最常用的是16×16的汉字,一个16×16的汉字由32个字节表示,这32个字节存放方式如下所示:
1 17
2 18
? ?
? ?
? ?
16 32
通常的做法是通过字模提取软件获得要显示的汉字点阵数据,以“合”字为例,其16×16的点阵数据由下列32个字节组成。
0x01,0x01,0x02,0x04,0x08,0x10,0x2F,0xC0,
0x00,0x1F,0x10,0x10,0x10,0x10,0x1F,0x10,
0x00,0x00,0x80,0x40,0x20,0x10,0xEE,0x04,
0x10,0xF8,0x10,0x10,0x10,0x10,0xF0,0x10
按其排列顺序在要显示的位置纵向依次写入前16个字节,再在要显示的位置横向右移一个单位,纵向依次写入后16个字节,即可在指定的液晶屏幕上显示出“合”字。
2(液晶显示器与DSP的连接(如下图7-1所示):
实验箱采用DG12864(128*64)液晶模块,其内置的液晶显示驱动控制器为日本东芝公司的T6963C。T6963C液晶显示控制器常被装配在中小规模图形液晶显示模块上,以内置控制器型图形液晶显示模块的形式出现。内置T6963C 的液晶显示模块已经把T6963C 液晶显示控制器、行列驱动器、显示缓冲区集成在一起。液晶显示模块对外提供标准数据和控制接口以及控制器指令,使用时只要对液晶显示控制器编程即可实现各种形式的显示功能。
T6963的特点:T6963C 是点阵式液晶图形显示控制器;T6963C 可以图形方式显示,文本方式显示,图形和文本合成方式进行显示以及文本方式下的特征显示等等;T6963C 管
39
理64K显示缓冲区及字符发生器CGRAM;并允许MPU 随时访问显示缓冲区。
TMS320F2812芯片的是3.3V电源器件,而液晶显示控制器T6963C工作电压为5V,为了确保其安全工作,本系统使用芯片实现电平转换。74ALVC164245可实现16路信号的电平转换,这16路信号分成2组,每8路信号可分别控制。本设计中第一组电平转换的方向1DIR接DSP的XRD,可实现双向转换与时序匹配;第二组电平转换的方向2DIR接3.3V高电平,实现由3.3V到5V的单方向转换。如图7-1所示。
图7-1 DSP与液晶显示模块的硬件接口电路
DSP的读写控制信号线XRD、XWE经电平转换接LCD的RD、WR。DSP的数据线XD[0]~XD[7] 与LCD 的数据口D[0]~D[7] 相连。地址线XA[0]与液晶控制口的C/D相连。当XA[0]为低时液晶控制器接收数据,XA[0]为高时液晶控制器接收命令码。
液晶的背光通过开关K1来控制。K1闭合,液晶的LEDA脚接通5V背光点亮,反之背光灭。液晶对比度的调节可以通过调节电位器RP来实现。
D715RAM_CSXA[16]114USB_CSJ2XA[17]213XA[18]35124411XZCS6AND7531082DGND9613.3V7LCD_CS16HEADER 5C7874hct138104
DGND
图7-2 译码电路
译码器采用74HCT138(图7-2所示)。选取DSP的XA[16]、XA[17]、XA[18]三根地址线来译码。译码所得的地址LCD_CS经电平转换后作为为液晶的片选信号(LCE)。译码
40
地址为0x170000。因地址线XA[0]与液晶控制口的C/D相连,所以液晶数据端口地址为
0x170000,液晶命令端口为0x170001。
3(数据信号的传送
由于液晶显示模块相对运行在150MHz 主频下的DSP属于较为慢速设备,连接时需要考
虑数据线上信号的等待问题。
字模提取:利用字模提取软件可以得到相应汉字的点阵。
4(实验程序流程如图7-3所示。
开始
DSP初始化
液晶初始化
液晶显示
图7-3 液晶显示流程图 三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(启动Code Composer Studio3.3。选择菜单Debug?Connect。
2(打开工程文件
工程目录:C:\CCStudio_v3.3\MyProjects \lcd\lcd.pjt,浏览LCD.c文件的内容,
理解各语句作用。
3(编译、下载程序。
4(运行程序观察结果
5(利用字模提取软件得到“液晶显示控制实验”等汉字的点阵,并在液晶上显示出来。
6(更改程序中对页、列的设置,实现不同位置的显示。
7(自己设计一些控制语句,实现不同显示效果。
8(结束程序运行,退出CCS。
五(预习要求
1(了解2812ADSP的扩展I/O 端口控制外围设备
2(了解液晶显示器的显示控制原理及编程方法。 六(注意事项
使用汉字点阵提取工具时注意点阵方向和字节方式的选择。 七(思考题
试设计程序在液晶显示屏上显示计时时钟,精确到秒,形式为“时时:分分:秒秒”。
八(实验报告要求
1(观察液晶界面的变化。
41
2(当使用点阵图形显示时需要在DSP存储器中如何设置,
42
实验8 键盘输入与数码管显示
一(实验目的
1(通过实验学习使用2812 DSP的通用输入/输出管脚直接控制外围设备的方法
2(了解键盘的使用原理及编程方法。
3(了解数码管的使用原理及编程方法
二(实验原理
1(数码管显示
如图8-1所示:数据线的低八位通过锁存器SN74HC273推动数码管显示成为所需要的代
CLK6码。锁存器在1脚为高、11脚(CLK)有一个上升沿的跳变时将数据锁存。锁存数据来自对片外存储单元0x160000写操作所得。
DGNDcomdpcomdpcomdpcomdpcomdpcomdp5535555ggggggdp10dp10dp10dp10dp10dp10ffffffd9d9d9d9d9d9eeeeeecececececece111111ddddddDS1DS2DS3DS4DS5DS6222222ggggggccccccbfbfbfbfbfbf444444CLK5bbbbbba6a6a6a6a6a6comacomacomacomacomacoma777777
CLK4
0.1u3.3V3.3V3.3V3.3V 20120120120120110111011101110111011D24D25D26D27D28D2919181918191819181918161716171617161716171514151415141514151412131213121312131213CLK39898989898SN74HC273SN74HC273SN74HC273SN74HC273SN74HC273SN74HC273676767676754545454542323232323
CLK2
XD[7]XD[6]3.3VXD[5]XD[4]XD[3]XD[2] 201XD[1] 1011CLK1XD[0]
1918161715141213 986754图8-1 数码管硬件原理图 23
2(键盘连接原理
键盘接线如图8-2所示。S1—S8 8个键通过8个GPIO口接至DSP。通过读GPIO口状态判读是否有键按下。键盘未按下,输入口是高电平,键盘按下,输入口变为低电平。 经过软件消抖后,数码管作相应的显示。比如:S1按下,数码管显示1并闪烁;S2按下,数码管显示2并闪烁;依次类推。
43
9
8
7
6
10k5
R84
3
2
13.3V
K1S1 Enter K2S2 EscK3S3 AddK4S4 SubK5S5 UpK6S6 DownK7S7 RightK8S8 Left
DGND
图8-2键盘硬件原理图
3(实验程序流程图如图8-3所示。
IO初始化DSP内核和
N有键按下?
Y
N采样值与
上次值相等,
Y
并转有效按键输入,
去相应操作函数
显示键盘控制的数值
图8-3键盘输入与数码管显示软件流程图
三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(启动Code Composer Studio 3.3。选择菜单Debug?Connect。
44
2(打开工程文件
工程目录:C:\CCStudio_v3.3\MyProjects\SMG\SMG.pjt。
3(编译、下载程序。
4(运行程序观察结果
运行程序后按键,可以看到发光二极管显示相应的数字并闪烁。
5(结束程序运行,退出CCS。
五(预习要求
1(通过实验学习使用2812 DSP的通用输入/输出管脚直接控制外围设备的方法
2(了解键盘的使用原理及编程方法。
3(了解数码管的使用原理及编程方法
六(注意事项
有时键盘控制不是非常灵敏,这是因为程序采用了查询方式读键盘输入的结果,可以多按几次按键或适当延长按键时间。
七(思考题
试将按键的查询输入程序改为定时扫描程序。
八(实验报告要求
1(观察发光二极管阵列所显示的键盘输入字符。
2(分析为什么要对按键作去抖处理,
3. 多建同时按下,程序如何响应,
45
实验9 DSP的定时器实验
一(实验目的
1(通过实验熟悉TMS320F2812中的CPU内部定时器和事件管理器的定时器
2(掌握TMS320F2812的CPU内部定时器和事件管理器定时器的控制方法
3(掌握TMS320F2812的中断结构和中断服务的流程
二(实验内容
1(DSP的初始化配置
2(CPU内部定时器的初始化
3(事件管理器模块的定时器的初始化
4(用数码管显示电子时钟
三(实验原理
1(CPU内部定时器介绍
TMS320F2812内部有三个32 位通用定时器(TIMER0/1/2),这3个定时器具有完全相同的控制结构。其中,CPU定时器1和2 被保留给DSPBIOS或实时操作系统(RTOS),只有定时器0可以提供给用户使用。CPU定时器的定时与系统时钟SYSCLKOUT同步。如图9-1所示。
复位
定时器重
新装载
16位定时器分频32位周期寄存器TDDRH:TDDRPRDH:PRD
SYSCLKOUT16位预定标计数器PSCH:PSC32位计数器TIMH:TIMTCR.4
INT
借位
图9-1 CPU定时器与系统时钟同步图
若处理器采用30MHz的外部时钟,经过锁相环10/2倍频后,系统的时钟工作在150MHz。一旦定时器被使能,定时器时钟通过预定标计数器(PSCH:PSC)递减计数,预定标计数器产生下溢后向定时器的32位计数器(TIMH:TIM)借位。最后当定时器计数器(TIMH:TIM)产生溢出使定时器向CPU发送中断。定时器中断结构如图9-2所示。
46
PIE单元
INTMT1NT0
INT1.7中断INT1
IER
INT13IFRTINT1/XINT1328x
内核
TINT2INT14
图9-2 定时器中断结构图
2(事件管理器的通用定时器介绍
事件管理器EVA使用定时器GP1和GP2,事件管理器EVB使用定时器GP3和GP4。每个通用定时器都可以独立使用,也可以多个定时器彼此同步使用。通用定时器为事件管理器的每个子模块提供基准时钟。
定时器的时钟源可以取自外部输入信号(TCLKIN),QEP单元或者内部时钟。选择内部时钟时,定时器采用高速外设时钟预定标(HSPCLK)作为输入,计算定时器的周期时必须考虑高速外设时钟预定标寄存器的设置。
通用定时器的计数模式:
a) 停止/保持模式
在这种模式下,通用定时器停止计数并保持在当前的状态,定时器的计数器、比较输出和预定标计数器都保持不变。
b) 连续递增计数模式
工作时,定时器将按照预定标的输入时钟计数,在定时器的计数器值和周期寄存器值匹配后的下一个输入时钟的上升沿复位为0,并启动下一个计数周期。
通用定时器的值变为0一个时钟周期后,定时器的下溢中断标志位置位。如果该位未被屏蔽,则产生一个外设中断请求。或者,在TxCNT的值与0xFFFF匹配一个时钟周期后,上溢中断标志位置位,如果该位未被屏蔽,则产生一个外设中断请求。
除第一个计时周期外,定时器周期的时间为(TxPR+1)个定标后的时钟输入周期。如果定时器的计数器开始计数时为0,则第一个周期也和以后的周期相同。
通用定时器的初值可以是0000H~0FFFFH中的任意值。如果计数器的初始值大于周期寄存器的值,定时器的计数器将计数到0Xffff,清零后继续计数操作,同初始值为0一样。当计数器的初始值等于周期寄存器的值时,定时产生周期中断标志,计数器清零,置位下溢中断标志而后继续向上计数。如果定时器的初始值在0和周期寄存器的值之间,定时器就计数到周期寄存器的值完成该计数周期,其他情况同初始计数器值与周期寄存器的值相同。
c) 定向递增/递减计数模式
定时器根据定标后的时钟或计数方向(TDIRA/B)引脚的输入进行递增或递减计数。
47
当TDIRA/B引脚保持高电平时,通用定时器递增计数到计数值等于周期寄存器的值。当TDIRA/B为低电平时,通用定时器计数器采用递减计数方式,直到等于0,然后定时重新载入周期寄存器中的值并继续递减计数。
d) 连续增/减计数模式
当计数器的值达到周期寄存器的值,定时器的计数方向从递增计数变为递减计数;当定时器清零时,定时器的方向从递减计数变为递增计数。
四(寄存器介绍
, CPU定时器
1(定时器计数器寄存器(TIMER0TIM)
32位寄存器。每一个时钟周期,TIM减1。当TIMH:TIM减到0时,TIMH:TIM重装定时器周期值PRDH:PRD,同时产生定时器中断(TINT)。
2( 定时器周期寄存器(TIMER0PRD)
32位寄存器。当TIM减到0时,TIM将重装周期寄存器内的值。或者当定时器控制寄存器复位的时候,也将周期寄存器的数值装入TIM。
3( 定时器控制寄存器(TIMER0TCR)
16位寄存器。TIF(TCR[15]):定时器中断标志位。TIE(TCR[14]):定时器中断使能位。TRB(TCR[5]):定时器重装位。TSS(TCR[4]):定时器停止状态位。置TSS为1,停止定时器。置TSS为0,启动或者重启定时器。在复位时,TSS清0并且定时器立即启动。
4( 定时器预定标计数器
定时器预定标计数器低位PSC,定时器预定标计数器高位PSCH。定时器分频值低位TDDR,定时器分频值高位TDDRH。
, EVA定时器
1(通用定时器计数寄存器(T1CNT)
描述定时器1的当前计数值
2(通用定时器周期寄存器(T1PR)
定时器1计数的周期值
3(通用定时器控制寄存器(T1CON)
TMODE1:TMODE0(T1CON[12]:T1CON[11])计数模式选择
= 00 ,停止/保持。= 01 连续增/减计数。= 10 连续递增计数。= 11 双向递增/递减计数
TP2:TP1:TP0(T1CON[10]:T1CON[9]:T1CON[8])定时器时钟预定标(X=HSPCLK)
[000]: X/1 , [001]:X/2 ,[010]:X/4 ,[011]:X/8,[100]:
X/16,[101]:X/32,[110]:X/64,[111] :X/128
公式:定时器输出脉冲=(1/外部时钟频率)x 1 / PLL x HISPCP x 定时器预定标系数
17067us=(1/30MHz) x 1 / 5 x 2 x 128
100ms/17067us=58593
因此可设置周期寄存器T1PR的值58593,此时定时器的输出脉冲即为100ms
48
TENALBE(T1CON[6])定时器使能位
0:禁止定时器操作,定时器被置为保持状态且预定标计数器复位
1:使能定时操作
TCLKS1:TCLKS0,时钟源选择
00:内部时钟,01:外部时钟,11:QEP电路
五(软件流程
CPU内部定时器流程图如图9-3所示。
开始
DSP初始化
CPU定时器初始化
NT1CNT=T1PR?T1CNT=TICNT-1
Y
产生定时中断
数码管显示
T1CNT=0
9-3 CPU内部定时器流程图
EVA通用定时器GP1流程图如图9-4所示
49
开始
DSP初始化
CPU定时器初始化
N定时器计数器为0?定时器计数器减1
Y
产生定时中断
数码管显示
装载周期寄存器值
图 9-4 EVA通用定时器GP1流程图
六(程序说明
1)实验利用查询方式来访问I/O的输入,即键盘的输入。
2)数码管的显示需要一定的延时来进行数据刷新。
3)CPU定时器程序中,语句CpuTimer0Regs.TCR.bit.TSS = 1或者0,用来控制CPU定时器的启动或停止。
4)事件管理器通用定时器程序中,通过EvaRegs.T1CON.all == 0x1702或者0x1742,控制定时器的启动或停止,即改变TENALBE(T1CON[6])定时器使能位置位或复位 七(实验步骤
1(启动CCS。选择菜单Debug?Connect。
2(打开工程文件(打开菜单“Project”的“Open”项):
C:\CCStudio_v3.3\MyProjects\EVA Timer\Example_281xEvTimerPeriod.pjt,在项目浏览器中,双击Example_281xEvTimerPeriod.c,浏览该文件的内容,理解各语句作用。,,
3(译、下载程序。
4(观察数码管的显示,利用实验箱上的键盘设置数码管,使其显示正确的时间。
5(找到函数init_eva_timer1(void),改变EvaRegs.T1PR 的值。重新编译下载,观察数码管显示的变化。改变计时速率
6(打开Source中,文件DSP_281x_SysCtrl.c文件,修改函数InitPll(0x2);的数值0x2,输入的数据范围是0x0000~0x000F
7(在DSP_281x_SysCtrl.c中,分别修改SysCtrlRegs.HISPCP.all 和SysCtrlRegs.LOSPCP.all 的数值(范围都是0x0000~0x0007),分别观察数码管的显示变化。
8(在Code Composer Studio中打开工程文件(打开菜单“Project”的“Open”项);选
50
择C:\CCStudio_v3.3\MyProjects\CPU Timer\Example_281xCpuTimer.pjt,在项目浏览器中,双击Example_281xCpuTimer.c,浏览该文件的内容,理解各语句作用。,,
9(编译、下载程序。
10(观察数码管的显示,利用实验箱上的键盘设置数码管,使其显示正确的时间。
11(找到函数InitCpuTimer0(void),改变CpuTimer0Regs.PRD.all或CpuTimer0Regs.TPR.all 或CpuTimer0Regs.TPRH.all的值。重新编译下载,分别观察数码管显示变化
13(打开Source中,文件DSP_281x_SysCtrl.c文件,修改函数InitPll(0x2);的数值0x2,输入的数据范围是0x0000~0x000F
14(在DSP_281x_SysCtrl.c中,分别修改SysCtrlRegs.HISPCP.all 和SysCtrlRegs.LOSPCP.all 的数值(范围都是0x0000~0x0007),分别观察数码管的显示变化。
八(预习要求
1(了解CPU内部定时器和事件管理器通用定时器
2(了解CPU内部定时器和事件管理器通用定时器控制寄存器,数据记录的方式,数据装载的方式
3(了解中断的处理方法
九(思考题
1(影响CPU内部定时器和事件管理器通用定时器计数速率的因素有那些,(2个以上)
2(外部时钟频率为30MHz,定时器预定标系数为64,PLL取为2,HISPCP等于2,如何设置周期寄存器的值,使定时器的输出为10ms,
十(实验报告要求
1(写出实验结果。
2(完成思考题。
51
实验10 存储器实验
一(实验目的
1(了解TMS320F2812A的内部存储器空间的分配及指令寻址方式。
2(了解扩展存储器空间寻址方法,及其应用。
3(学习用Code Composer Studio修改、填充DSP内存单元的方法。
5(学习操作TMS32028xx内存空间的指令。
二(实验原理
TMS32028xx DSP内部存储器资源介绍:
TMS32028xx 系列DSP基于增强的哈佛结构,可以通过三组并行总线访问多个存储空间。
它们分别是:程序地址总线(PAB)、数据读地址总线(DRAB)和数据写地址总线(DWAB)。
由于总线工作是独立的,所以可以同时访问程序和数据空间。
软件流程图如图10-1、10-2和10-3所示。
开始
函数入口系统初始化
写指定存储区
已写入的字节数是否等于
存储器容量读指定存储区
NY判断是否有错误显示Err将测试码写入存储器Y
N
延时显示Good
结束结束
图10-1 主程序流程图 图10-2 写存储器函数流程图
52
函数入口
已读取的字节数是否等
于存储器容量
N
读取存储器内容
延时
Y将读出数据与测试码对
比,是否相同
NY
Correct标志位加1Err标志位加1
结束
图10-3 读存储器函数流程图
三. 实验设备
计算机,实验箱。
四.实验内容与步骤
1(实验准备
连接实验设备。
2(启动Code Composer Studio 3.3。选择菜单Debug?Reset CPU。 3(打开工程文件
工程文件为:
C:\CCStudio_v3.3\MyProjects\memorytest\memorytest.pjt
4(编译、下载程序。
5(运行程序,观察结果。
(1)分别在变量“ReadBack”、“Correct”、“ERR”上单击右键,选择“Add To Watch
Window”,在Watch Window中左键单击“Radix”将其修改为“hex”。如图10-4所示。
53
图10-4 添加观察窗口
(2)打开Debug 选项,选择Run 选项或按F5 运行程序,程序开始时数码管显示“StArt”,约数秒钟后会根据测试结果显示“Good”或者“Err”。
(3)观察Watch Window,从“Value”一栏中分别可以看到存储器的读出值、存储器的字数、错误的字数,均为16进制。
(4)在CCS中点击“View”-“Memory”,将Address栏修改为L0或者L1的首地址,点击“OK”可以观察存储区的内容,可以看到全部被写为了Test Code的值。如图10-5所示。
54
图10-5 观察存储区内容
(5)打开Debug 选项,选择Halt 选项或按Shift-F5,终止实验结果。 五(预习要求
了解TMS320F2812A的内部存储器空间的分配及指令寻址方式。 六(思考题
为什么写入存储器的数据选择0x5555和0xaaaa? 七(实验报告要求
说明TMS320F2812的内部存储器空间的分配方式。
55
实验11 AD模数转换实验
一(实验目的
1(掌握TMS320F2812中ADC转换模块的功能与使用
2(掌握TMS320F2812中定时器模块的功能与使用
3(掌握TMS320F2812的中断使用与中断子程序的编写
二(实验内容
1(ADC的初始化
2(定时器的初始化与使用
3(AD采样中断子程序的编写与调试
三(TMS320F2812中ADC转换模块的介绍
TMS320F2812具有内置双采样和保持器(S/H)的12位ADC;快速转换时间(运行于25MHz的ADC时钟时为12.5MSPS);一共具有16个模拟输入通道(ADCIN0,ACDIN15);模拟输入范围0~3V。
AD的转换可以采用多个触发源可以启动转换(SOC),包括:软件立即启动(用SOC SEQn位);事件管理器A(在EVA中有多个事件源可以启动转换)或者事件管理器B(在EVB中有多个事件源可以启动转换),也可以使用外部ADCSOC引脚启动。
芯片具有输入通道的自动排序能力,一次最多可执行16个通道的自动转换,可以通过编程来选择16个输入通道中的一个。排序器可以作为两个独立8状态排序器或者一个16状态排序器(即双级联8状态排序器) AD3.3VAD3.3V转换结果存储在可单独访问的16个结果寄存器用来存放转换结果(RESULT0,RESULT15)。
采样保持时间可以独立设置,用于适应不同内阻的信号源。
R109R110ADC的详细介绍和使用请参阅芯片的使用手册。
1k1k四(硬件连接
RP1 10kRP2 10k温度给定鼓风机调速给定
AD5AD4
C68C69
103103
图11-1 AD电位器给定输入电路硬件原理图
56
AD3.3V
R3820kC310uF+
AD7
C61+AD5VC315R231D131020.1uXS11BAT54S20k842D21A123R2273C41100AC SIGNALR31+21AD3.3V
10KLM35810uF
R23220K
图11-2 AD采样电路硬件原理图 AD4通道:电位器给定输入,测量直流信号。硬件连接如图11-1所示。 AD7通道:测量交流信号。硬件连接如图11-2所示。
五(软件流程
基本流程:AD采样由定时器1来软件触发,定时器周期设为0.1ms。故每0.1ms采样一
次,在AD中断服务程序中,把采样结果保存到内存中去。 软件流程图如图11-3所示:
开始
中断服务
程序入口初始化DSP
保存采样结果AD定时器初始化1
清除中断标志AD模块初始化ADC
开总中断开启定时器1
中断返回
无穷循环
图11-3 软件流程图
57
图11-4 通道设置
六(实验步骤
1(打开工程C:\CCStudio_v3.3\MyProjects\ADC7\ADC7.pjt。
2(编译、链接,检查并修正错误,下载程序到目标系统中。
3(用信号发生器产生幅度为0,2V,频率为1000HZ的正弦波作为A/D的输入,运行程序。
4(运行程序一会之后,把程序停止(halt)。打开View选项,选择Time/Frequency,用CCS自带的图形绘制窗口绘制曲线。在弹出的“Graph Property Dialog”窗口中设置参数(如上图):复制程序中的adcInput1粘贴到Start Address中,Acquisition Buffer Size和Display Data Size设置为1024,Sampling Rate设置为1000,Data Type设置为16-bit unsigned integer。如图11-4所示。
5(记录波形。
6(打开工程C:\CCStudio_v3.3\MyProjects\ADC4\ADC4.pjt。步骤同上面步骤2、4、5,观察通过AD4实现的直流量的采样波形。
七(注意事项
输入信号的幅度不要超过3V,以免烧坏2812芯片。
八(思考题
1(在源程序中如何改变采样的AD通道。
2(改变电位器的值,波形有何变化。
3(若采样周期改为0.2ms,如何修改程序。
58
实验12 温度测量实验
一(实验目的
1(掌握TMS320F2812中ADC转换模块的功能与使用
2(掌握TMS320F2812中定时器模块的功能与使用
3(掌握TMS320F2812的中断使用与中断子程序的编写
4(掌握数码管显示的方法与调用
二(实验内容
1(ADC的初始化
2(定时器的初始化与使用
3(采样与转换中断子程序的编写与调试
三(硬件连接
C79+AD5V
XS9D16B840.1uf1D16A5Temp12OPA233537316
2LM35DZR36温度传感器R2510kR228AD010k
100C65
103
图12-1 温度测量部分硬件原理图
实验箱选用的温度传感器芯片是LM35,该系列芯片的输出电压与温度成线性比例,
10mV/?。并且放大两倍后送入AD采样。如图12-1所示。 四(软件流程
软件流程如图12-2所示。
59
中断服务程序入口开始
AD采样,将采样结果送DSP初始化入循环采样数组
模块初始化ADC
采样满64次,否
是配置ADC
计算平均值
配置EVA
转化为对应温度值设置定时器1
采样计数值清零
数码管显示
清除中断标志并开总中断AD
中断返回
图12-2 软件流程图
五(实验步骤
1(打开工程C:\CCStudio_v3.3\MyProjects\Tsensor\Tsensor.pjt 2(编译、链接,检查并修正错误,下载程序到目标系统中。 3(运行程序,可以看到数码管实时显示当前室温。
六(思考题
理想情况下,ADC输入的模拟电压值对应的数字值与传感器上电压的关系。
60
实验13 PWM输出实验
一(实验目的
1. 了解TMS320F2812A DSP片内事件管理器模块的脉宽调制电路PWM的特性参数;
2. 掌握PWM电路的控制方法;
3. 学会用程序控制产生不同占空比的PWM波形。
二(实验原理
1(脉宽调制电路PWM的特性
每个事件管理器模块(TMS320F2812A DSP片内有两个)可同时产生多达8 路的PWM波形输出。由3个带可编程死区控制的比较单元产生独立的3 对(即6 个输出),以及由通用定时器比较产生的2 个独立的PWM 输出。
PWM的特性如下:
-16 位寄存器;
-有从0到16μs的可编程死区发生器控制PWM输出对;
-最小的死区宽度为1 个CPU时钟周期;
-对PWM频率的变动可根据需要改变PWM的载波频率;
-在每个PWM周期内和以后可根据需要改变PWM脉冲的宽度;
-外部可屏蔽的功率驱动保护中断;
-脉冲形式发生器电路,用于可编程对称、非对称以及4 个空间矢量PWM波形产生;
-自动重装载的比较和周期存器使CPU的负荷最小。
2(PWM电路的设置
在电机控制和运动控制的应用中,PWM电路被设计为减少产生PWM波形的CPU开销和减少用户的工作量。与比较单元相关的PWM电路其PWM波形的产生由以下器存器控制:
对于EVA 模块,T1CON、COMCONA、ACTRA和DBTCONA;对于EVB模块,T3CON、COMCONB、ACTRB和DBTCONB。
产生PWM 的寄存器设置:
-设置和装载ACTRx 寄存器;
-如果使能死区,则设置和装载DBTCONx寄存器;
-设置和装载T1PR或T3PR寄存器,即规定PWM波形的周期;
-初始化CMPRX 寄存器;
-设置和装载COMCONx寄存器;
-设置和装载T1CON 或T3CON寄存器,来启动比较操作;
-更新CMPRx 寄存器的值,使输出的PWM波形的占空比发生变化。
3(实验程序流程图(如下图13-1所示)
61
开始
DSP初始化
EVA初始化
PWM输出
图13-1 PWM输出流程图
4(硬件电路
PWM5、PWM6直接从DSP的对应管脚引出。
三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(启动Code Composer Studio 3.3。选择菜单Debug?Connect。
2(打开工程文件打开菜单“Project”的“Open”项;选择C:\CCStudio_v3.3\MyProjects\Tsensor\PWM5AND6目录中的“pwm.pjt”。
3(编译、下载程序。
4(连接示波器:连接示波器探头的地线与实验箱DGND 相连,探头与测试点PWM5
或者PWM6相连。
5(运行并观察结果-单击“Debug”菜单,“Run”项,运行程序;观察示波器上的波
形。
6( 结束运行退出Code Composer studio。
五(预习要求
1(了解TMS320F2812A DSP片内事件管理器模块的脉宽调制电路PWM的特性参数;
2(了解PWM电路的控制方法;
六(注意事项
1(注意示波器探头的连接。
2(使用探头请勿在实验箱上造成短路。
七(思考题
改变这两路PWM输出的载波频率和占空比
八(实验报告要求
1(记录下示波器在不同占空比下的PWM输出波形。
2(说明其载波频率、占空比与程序中的什么设置相关,
62
实验14 频率测量实验
一(实验目的
1(掌握TMS320LF2812PGFA内部事件管理器模块的通用定时/计数器的功能与使用
2(掌握TMS320LF2812PGFA内部事件管理器模块的捕获单元的功能与使用
3(掌握使用定时器和捕获单元配合使用测量信号频率的基本原理和方法
4(了解频率测量的一般方法
二(实验内容
1(系统初始化,事件管理器初始化
2(定时器T3溢出中断
3(查询CAP4INT中断标志位,配合T3计数的方法测量信号频率
4(数据处理
5(数据在数码管上显示
三(TMS320F2812PGFA事件管理器模块测量频率方法
利用事件管理器(EVB)模块的一个通用(GP)定时器/计数器作为计数器使用,对内部CPU高频时钟进行计数。整形后的信号送入DSP2812的CAP单元引脚,设置该捕获单元上升沿捕获,在每次捕获到时读取保存在CAPFIFO内的相应定时器的计数值。通过计算得到一个信号周期T内高频脉冲的个数,然后再经过计算求得被测信号频率。
DSP中的通用定时器有4种可选的操作模式:
(1)停止/保持模式;(2)连续递增计数模式;(3)定向的增/减计数模式;(4)连续增/减计数模式。
相应的定时器控制寄存器TxCON中的位模式决定了通用定时器的计数模式。当定时器使能时,定时器将按照寄存器TxCON中的其他位(TxCON[12-11])设定的计数模式开始计数。
本实验通用定时器选择T3,将T3配置为连续递增计数模式,T3PR设置为0xFFFF,在定时器T3的溢出中断中对T3溢出次数进行统计。捕获单元选择CAP4,通过查询方式配合T3计数值测量信号频率。该实验具体测量原理如下:
设置CAP4为上升沿捕获,CAP4FIFO状态寄存器设置为已有一个数值入栈,定时器3选择内部CPU时钟,配置为150MHz,并开启定时器3,使能CAP4捕获中断,等待,当信号上升沿被CAP4捕获到,定时器T3的计数值T3CNT保存在两级堆栈CAP4FIFO中,
Ny4读取CAP4FBOT内T3CNT的值,设为,禁止CAP4捕获中断,清定时器T3溢出次数。然后再次使能CAP4捕获中断,等待,当信号上升沿被CAP4捕获到,读取此时CAP4FBOT
Ny5内T3CNT的值,设为,假设两次捕获中断之间定时器T3的溢出次数为N,则可以根
FR据这三个值计算出信号频率
6150,10FR, Ny5-Ny4,65536,N
四(信号整形电路
信号整形电路如图14-1所示。
63
R321M
C90C74+AD5VAD3.3VC72+AD5V84XS14C71D30A5OPA2690D323D31A1R303100k212R230472CAP2+AD5V3TL30161001kR112SN74LVC1G14C753546
R301C7333-AD5V
C915.1kR300
R111-AD5V
1k
图14-1频率测量输入电路
五(频率测量实现方法和程序流程
程序流程如图14-2所示。
64
开始中断入口
系统初始化,模块初始化EVB溢出次数加T31设置上升沿捕获CAP4CAP4FIFO=1
清标志位T3OFINT
清中断标志位CAP4INT开捕获中断CAP4
中断返回
NCAP4INT=1
Y
读CAP4FBOT溢出次数清零T3关捕获中断CAP4
清中断标志位CAP4INT开捕获中断CAP4
NCAP4INT=1
Y
读CAP4FBOT关捕获中断CAP4
计算频率
数据处理
图14-2 频率测量软件流程图
六(实验步骤
1(将信号发生器输出的交流信号(方波)接入实验箱的频率测量端子,信号幅值为0.4Vpp(峰峰值)至5Vpp,频率为0.5Hz至800KHz。
2(启动Code Composer Studio 3.3。
3(打开工程文件 C:\CCStudio_v3.3\MyProjects\freqency\frequency.pjt;
4(编译、链接,检查并修正错误。
5(下载到实验箱,运行。可以看到数码管上的显示所接入的信号频率,与信号发生器本身所带的信号频率计所测得的值进行比较。
七(注意
1(由于该
选择的是测量一个信号周期内的高频脉冲数,所以本实验在测量低频信号时精度较高,测量高频信号时精度将受到限制,另外不断的开中断、关中断在高频信号时来不及响应也是造成高频范围受限的一个重要原因。
65
2(频率在数码管上显示时,当频率大于等于100Hz时,以KHz为单位,当频率小于100Hz时,以Hz为单位进行显示。
八(思考题
1(高频时增加数组FR0[]的长度,排序后取最中间的几个值平均,观察有什么效果。
2(编写CAP4中断服务程序,在CAP4中断内完成CAP4FBOT读数和频率计算。
66
实验15 有限冲击响应滤波器(FIR)滤波实验
一(实验目的
1(掌握如何用窗函数法实现数字信号滤波器;
2(掌握TMS320LF2812的基本软件的编写;
3(掌握CCS开发环境平台。
二(实验内容
1(DSP的初始化配置;
2(FIR滤波器的软件及参数设计;
3(使用CCS开发环境平台观察实验结果。
三(实验原理
1(滤波基本原理
假定输入信号x(n)中的有用成分和希望除去的成分各自占不同的频带,当x(n)通过一个滤波器(设为线性系统)后可将欲去除的成分有效去除。对于滤波器,其时域的输入、输出关系为
y (n) = x (n) * h (n)
若x (n),y (n)的傅里叶变换存在,则输入、输出的频域关系为
jωjωjωY,,,,,,e,ΧeΗe
j,j,,,再假定,e 如图(a),图(b)所示为理想滤波器的幅频特性,e,根据上式,,,
j,,,,e 如图(c)所示。
图15-1 滤波基本原理
,, 这样,x (n) 通过滤波器h (n),其输出y (n) 中不再含有>的频率成分,而c
j,,,He“不失真”地保留<的成分。因此,设计出不同形状的,可以得到不同的滤,,c
波结果。
若滤波器的输入、输出都是离散时间信号,那么,该滤波器的冲激响应也必然是离散的,即单位采样响应h (n) 。我们称这样的滤波器为数字滤波器。当用硬件实现时,所需的元件是延迟器、乘法器和加法器。当在计算机上用软件实现时,它就是一段线性卷积的程序。
2(FIR滤波器的基本结构
67
设输入信号为x(n),h(n)(n=0,1,2,…N-1)为滤波器的冲激响应,则FIR滤波器就是要实现下列差分方程:
N,1
ynhkxnk()()(),,,k,0
展开后就是:
ynhxnhxnhNxnN()(0)()(1)(1)(1)[(1)],,,,,,,,…
其单位脉冲响应h(n)是一个有限长序列。由此可知,FIR滤波的算法是一种乘法累加运算,采样输入信号,送入x(n),同时不断的经延时做乘法累加,然后输出滤波后结果y(n)。其结构图如图15-2所示:
,1,1xxzz
(n) x(n) x(n) (n)
hhhhh
(1) (2) (0) (N-1) (N-2)
y
(n)
图15-2 FIR滤波器结构图
实验程序中采用循环寻址的方式来实现这种乘法累加运算,在存储器中建立一个数据缓冲区value_buf,其长度为N,示意图如15-3所示:
图15-3存储器中循环寻址
使用count指针(即数组的下标)将新采样进来的数据从低地址到高地址循环放入缓冲区内。在每次计算y(n)时将count赋给p,p从高地址向低地址循环移动,取出缓冲区的值依次与h数组进行乘法累加运算。这样count始终指向最新采样时刻的值,实现了FIR滤波器的差分方程计算。
3(FIR滤波器在DSP中的实现
要设计一个FIR滤波器就是要求出它的冲击响应系数h(n),而理想滤波器的单位脉冲响应hd(n)是无限长的序列,这在实际中是不可能实现的,因此要对hd(n)进行截断,可以用一个有限长度的窗函数序列w(n)与之相乘,即
68
hnhnn()()(),, d
常用的窗函数如下所示,其对滤波器的特性产生的影响不同。
(1) 矩形窗
11, 0,,,nN, ,()n,,0, 其他,
(2) 巴特利特(Bartlett)窗(三角形窗)
2n ,,,,,,,, 0()111nnN,N1(3) 汉宁(Hanning)窗
12,,,n,, ()1cos1nnN,,,,,, 0,,,,,21N,,,,,
(4) 哈明(Hamming)窗
,,2,n,, ()0.540.46cos1nnN,,,,,, 0,,,,,N,1,,,,
(5) 布莱克曼(Blackman)窗
,,24,,nn,,,, ()0.420.5cos0.08cos1nnN,,,,,,, 0,,,,,,,NN,,11,,,,,,
滤波器的冲击响应序列计算如下:
(1) 低通滤波器:
,其频率响应如下所示,α为时延,为截至频率 c
,j,,,e,,, ,,cj,() He,,d0,,,, ,,,c,
,
,,, cc0 ,,0 ,0
图15-4低通滤波器频率响应
于是
,,sin(()),,n,11cjjnjjn,,,,,,c hnHeedeednN(),0,1,,,,,,,,,,,dd,,,,,,c22()n,,,,,
(2) 高通滤波器:
69
,高通滤波器的频谱相当于全通滤波器的频谱(低通滤波器中的,)减去低通滤波器,c
的频谱
sin(()),,n,sin(()),,n,c hnnN()0,1,,,,, ,,d()()nn,,,,,,
(3) 带通滤波器:
,,,带通滤波器的频谱相当于高通滤波器的频谱(,)减去高通滤波器的频谱(,ccL
,) H
sin(())sin(()),,,,nn,,HL hnnN()0,1,,,,, ,,d()()nn,,,,,,
4(实验程序说明
程序使用C语言编写,输入为20Hz、80Hz和200Hz的正弦信号的叠加,低通滤波器截至频率为50Hz,高通滤波器截至频率为150Hz,带通滤波器截至频率在二者之间。选取不同的滤波器和窗函数类型进行FIR滤波后观察其滤波效果。流程如图15-5所示:
开始
DSP初始化配置
产生输入信号
数字滤波
结束
图15-5 FIR滤波软件流程图
四(实验步骤
1(在桌面的 CCStudio 图标上双击,打开CCS开发环境平台;选择菜单Debug?Connect。
2(打开“Project”选项,选择Open,选择实验目录下C:\CCStudio_v3.3\MyProjects\FIR\
FIR_final.pjt,打开实验工程项目文件;
3(打开“Project”选项,选择“Rebuild All”选项,CCS重新编译和链接这个工程项目,整个处理过程在屏幕下方的“Message”窗口中返回信息,当改变了设置后必须重新编译所有的文件;
4(编译链接无误后,打开“File”选项,选择“Load Program”选项, 在打开的对话框中选择该项目所在文件夹\debug目录下的FIR_final.out文件,此时,CCS将把这个目标文件装载到2812实验箱系统中,同时,CCS打开反汇编窗口显示被加载程序的汇编指令码;
5(在FIR_final.c文件中的asm(“ nop”)语句处设置断点,然后打开“Debug”选项,选
70
择“Run”运行程序。程序运行到断点处停止后,打开“View”选项,选择Graph下的Time/Frequency选项;
6(在打开的的Graph Property对话框中,设置参数如图15-6所示:
图15-6 观察滤波前后的时域信号
即可在“Input & Output”显示窗口的上半窗口中看到待滤波的输入信号,在下半窗口中看到滤波后的时域输出信号。
7(重复上述步骤,打开Graph Property对话框,设置参数分别如图15-7、15-8、15-9所示:
图15-7 观察输入信号的频谱
71
j,He()图15-8 观察滤波器的冲激响应频谱
图15-9 观察滤波后信号的频谱
即可分别看到滤波前输入信号、滤波器冲击响应及滤波后信号的频谱波形,分析是否达到了预设的滤波效果;
8(在FIR_final.c文件中的main()函数中修改滤波器和窗函数的类型(实验中有3种滤波器类型,从1到3分别是低通、高通和带通滤波器;用到5种窗函数,从1到5分别为:矩形窗、三角形窗、汉宁窗、哈明窗和布莱克曼窗),然后重新编译链接载入程序,重复上述实验步骤,观察不同滤波器和窗函数下的滤波结果;
()n,9(利用图形窗口分别观察滤波器的冲击响应h(n),窗函数和加窗前的冲击响应hn()。 d
72
五(实验思考
1(比较使用不同窗函数时的滤波效果;
2(分析FIR滤波器的阶数与滤波效果的关系;
3(分析并在程序中加入代码以实现带阻滤波器的功能。(提示:其频谱相当于全通滤
波器频谱减去带通滤波器频谱)
73
实验16 快速傅立叶变换(FFT)频谱分析实验
一.实验目的
1(掌握使用TMS320F2812实现FFT频谱分析功能;
2(掌握TMS320F2812的基本软件的编写;
3(掌握CCS开发环境平台。
二(实验内容
1(DSP的初始化配置;
2(FFT分析参数的设置;
3(使用CCS开发环境平台观察实验结果。
三(实验原理
1(FFT基本原理
傅立叶变换是实现信号从时域变换到频域的工具,其定义为:
,,jt,, Xxtedt()(),, (16.1) ,,,
xn()对于采样信号,采用离散傅立叶变换(DFT),将其变换到频域。
N,1kn (16.2) XkxnW()(),,Nn,0
2,,jkn2knNN式中,。要完成一次DFT,需要进行次复数乘法和N(N-1)次复数加法。We,N
如果采样点数N较大的话,DFT的计算量相当大。为此,J.W.Cooley和T.W.Tukey于1965年提出实现DFT的快速算法,即FFT。其实质是将信号序列分级分组,通过短序列的DFT,实现整个序列的DFT,这样可将DFT的计算量减小至一到二个数量级。
knW具有对称性和周期性,如下所示: N
,knkn,,W,,WNN (16.3)
knk(n,N)W,WNN (16.4)
knW快速傅立叶变换FFT正是运用的对称和周期性,将长序列变短,推导如下: N
MN,2xn()nN,,0,1,2,,1?设采样信号序列,,采样点为N,假设,M为正整数,,,
因此可将信号序列x(n)按奇偶分成两组,令偶数组n=2r,及奇数组n=2r+1,rN,,0,1,,/21?,上式可变换为:
NN/21/21,,2(21)rkrk, XkxrWxrW()(2)(21),,,,,NNrr,,00
NN/21/21,,rkkrk (16.5) ,,,xrWWxrW(2)(21),,NNN/2/2rr,,00
74
N/21,N/21,2rk(21)rk,令, AkxrW()(2),BkxrW()(21),,,,N/2N/2r,0r,0
即A(k)、B(k)分别是偶数组、奇数组的傅立叶变换,结合式(16.3)和式(16.4),式(16.5)变成:
kX(k),A(k),WB(k)k,0,1,2,?,N/2,1N (16.6)
kX(k,N/2),A(k),WB(k)k,0,1,2,?,N/2,1N (16.7)
这就是FFT的核心公式。以N=8为例,这个过程如图16-1所示。
A(0)X(0)
A(1)X(1)
A(2)X(2)
A(3)X(3)
B(0)X(4)0W,18B(1)X(5)1,1W8B(2)X(6)2,1W8B(4)X(7)3,1W8
图16-1 FFT算法分组实现原理图
依次类推,x(n)分组后得到奇数组和偶数组,可继续按其位置序号进行类似的分组,直到得到最简单的蝶形单元,每组只有两个元素,即不能再分组,仍以N=8为例,实现过程如图16-2所示。
C(0)A(0)x(0)X(0)C(1)A(1)x(4)X(1),1D(0)A(2)x(2)X(2)0,1WD(1)A(3)8x(6)X(3)2,1,1WE(0)B(0)8x(1)X(4)0,1WE(1)B(1)8x(5)X(5)1,1,1WF(0)B(2)8x(3)X(6)20,1,1WWF(1)B(3)88x(7)X(7)32,1,1,1WW88
图16-2 8点FFT算法实现原理图
2(FFT频谱分析在DSP中的实现
首先,按照“码位倒置”的规律对信号进行重新排序。因为FFT算法需要对信号序列不断进行奇偶分组,信号重排正好符合“码位倒置”的规律。如N,8,序号用二进制数可n()nnnn,1n,0n用表示,第一次分组时,为偶数组,为奇数组;第二次分组则按划210001
n分,同样第三次分组则按划分。N,8时只需要三次分组,最终的排列顺序正好为原来2
()nnn码位的倒置形式即,整个信号序列重排的过程如图16-3所示。图中,I代表顺码,012
J代表倒码,如果I=J,则不需调换;如果I不等于J,则需要调换;若I小于J时进行调换,
75
而I大于J时已经完成调换,不需再调换了。
开开
开开N
NV2=N/2
MN=N-1
YI>=J?
N
T=A(J)
A(J)=A(I)
A(I)=T
K=NV2
J=J-KNK>=J?K=K/2Y
J=J+K
I=I+1
NI>MN1?
Y
开开
图16-3 码位倒置流程图
信号序列经过序列重排之后,通过“分级”和“分组”,蝶形运算,完成FFT。按照
iiN/2MN,logFFT的实现原理,整个运算分成M级(),每级里分成组,代表级数,每2
组组成一个蝶形单元,根据式(16.6)和(16.7)完成蝶形运算。如图16-2,图中N=8,分成3级,第一级中分成4组,每组组成最简单的蝶形运算单元;在第二级中,有2组;第三级则为1组。“级”和“组”组成快速算法中的两个循环,FFT算法实现流程图如图16-4所示。图中,{A(I)}为采样数组重排之后的序列,M为FFT算法要求进行的级数,LE为每组的长度。
76
开开
开开N,M,A(I)开开开开
L=1
LLLELE,,22
LE1=LE/2
U=1
,,j1LEWe,
J=0
I=J
IP=I+LE1T=A(IP)*UA(IP)=A(I)-T
A(I)=A(I)+TI=I+LE
NI>N?
Y
U+U*W
J=J+1
NJ>LE1?
Y
L=L+1
NL>M?
Y
开开
图16-4 FFT算法实现流程图
3(FFT结果的物理意义
77
设FFT点数为N,则经过FFT之后,就可以得到N个点的FFT结果。为了便于进行FFT运算,通常N取2的整数次幂。
假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。因此每一个点对应一个频率,第一个点表示直流分量(0Hz),最后一点对应的频率为Fs,这之间被平均分成N等份,每个点的频率依次增加。即某个点n所表示的频率为:Fn=n*Fs/N。由上式可知,Fn能分辨到的频率为Fs/N,如果采样频率Fs为1024Hz,FFT点数为1024点,则可以分辨到1Hz。
每个点的对应的复数的模值,就是该频率下的幅度特性。假设原始信号的幅值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而直流分量的模值是它的N倍。
由于FFT结果的对称性,通常我们只取前半部分的结果,即小于采样频率一半的结果。
4(实验程序说明
程序使用C语言编写,输入为不同幅值和频率的正弦信号的叠加,进行FFT观察其功率谱。流程如图16-5、16-6所示:
开开
DSP开开开开开
开开开开开开开
开开开开开开开开开开开
开开FFT开开开
开开
图16-5 主程序流程图
FFT
开开开开开开开开开IBR(,)
开x(n)开开开开
开开开开开开开FFT
开开开开开
开开开开
开开
图16-6 FFT子程序流程图
78
四(实验步骤
1(在桌面的 CCStudio 图标上双击,打开CCS开发环境平台;选择菜单Debug?Connect。
2(打开“Project”选项,选择Open,选择实验目录下C:\CCStudio_v3.3\MyProjects\FFT\
FFT_final.pjt,打开实验工程项目文件;
3(打开“Project”选项,选择“Rebuild All”选项,CCS重新编译和链接这个工程项目,整个处理过程在屏幕下方的“Message”窗口中返回信息,当改变了设置后必须重新编译所有的文件;
4(编译链接无误后,打开“File”选项,选择“Load Program”选项, 在打开的对话框中选择该项目所在文件夹debug目录下的FFT_final.out文件,此时,CCS将把这个目标文件装载到2812实验箱系统中,同时,CCS打开反汇编窗口显示被加载程序的汇编指令码;
5(在FFT.c文件中的asm(“ nop”)语句处设置断点,然后打开“Debug”选项,选择“Run”运行程序。程序运行到断点处停止后,打开“View”选项,选择Graph下的Time/Frequency选项;
6(在打开的的Graph Property对话框中,设置参数如图16-7、16-8所示:
图16-7 用CCS提供的工具观察输入信号的FFT
79
图16-8 观察用C语言计算得到的FFT
即可在“IN FFT by CCS”和“IN FFT by C”显示窗口中看到用CCS提供的工具和使用C语言程序计算出的FFT结果,比较二者是否一致;
7(打开“View”选项,选择Watch Window选项,在打开的观察窗口中添加如下变量:max、Nf,观察经过频谱校正后的最大功率点处的幅值和对应的频率,与上一步骤图形中计算出的最大功率点处的比较,看校正后是否更准确;
8(在FFT.c文件中的Create_Signal()子函数中修改输入信号的幅值和频率或叠加上其他交流信号(注意采样频率的修改),然后重新编译链接载入程序,重复上述实验步骤,观察得到的结果是否与预设的一致;
9(在FFT.c文件中修改Sample_Num和M来改变FFT点数,重新编译链接载入程序,重复上述实验步骤,观察运算结果。
五(实验思考
1(分析FFT运算结果的物理意义。
2(如何提高FFT的频率分辨率,
3(了解频谱校正的作用。
80
实验17 SCI串行接口实验
一(实验目的
1(掌握使用TMS320F2812中的SCI接口的基本原理和使用方法
2(掌握使用TMS320F2812的中断系统基本原理和使用方法
3(掌握CCS开发环境平台
二(实验内容
1(DSP的初始化配置
2(SCI串行接口的初始化
3(SCI串行接口的自我收发实验
三(TMS320F2812中SCI模块的介绍
TMS320F2812上的串行通信接口(SCI)是一个两线制异步串行接口。SCI模块支持CPU与其他异步外设之间使用标准非归零码(NRZ)进行数字通信。SCI的接收器和发送器各自具有一个16级深度的FIFO,以减少CPU开销,它们有各自独立的使能位和中断位。两者可以独立进行半双工通讯或同时进行全双工通信。28x系列的DSP中的SCI模块还增加了240xA中没有的增强功能。
SCI模块的需要编程设置的主要功能包括:
(1)串行时钟的波特率
(2)数据字的格式,包括起始位、数据字长度、可选择进行奇偶校验或者不进行、
停止位
(3)四个错误检测标志:奇偶校验、溢出、帧和间断检测
(4)两种多处理器唤醒模式:空闲线、地址位
(5)半双工或全双工操作
(6)增强功能
四(硬件连接
F2812 中有两个SCI接口,这里采用SCI-B口。为了能有效地抑制系统噪声、消除接地回路的干扰,DSP的SCI接收数据引脚(SCIRXDB)和SCI发送数据引脚(SCITXDB)通过高速光耦(6N137)隔离后,连接到RS232转换芯片MAX202,通过9针串行接口连接到其他的RS232串行设备。6N137是高速光耦,对F2812进行光电隔离,以降低由于不同节点的高共模电压引起的串扰甚至对器件的损坏,提高系统的可靠性,其通信速率可高达10Mbit/s,完全能满足SCI通信的需要。如图17-1所示。
81
D20XS13TXD_2321114TIN1TO1DB91071TIN2TO26V11RXD_23212132RO1RIN19871+5VRO2RIN232DGND148+5_2GND3C1+C2+C3744+5_2C36 1049CON4104355C1-C2-C3962+5_2GNDC3C41516+5_2GNDGNDVCC+5_2104C38 104MAX202
+5V+5_2R2363.3V+5_2
510VD3R237R23588R238VD4D22 6N137D23 6N137510330510FR107
FR1072727TXD_232SCIRXDB66RXD_232SCITXDB3355
DGND+5_2GND
图17-1 SCI驱动及接口电路硬件原理图
作为实验,可以简单的将9针插座的数据引脚2、3短接,进行自我收发。 五(软件流程
利用WINDOWS XP自带的串口调试助手(如图17-2所示)实现上位机与DSP实验箱的SCI通讯。通过串口调试助手的发送窗口发送数据到下位机;下位机接收成功,再把这些数据发送给串口调试助手,显示在串口调试助手的接收窗口。
图17-2 串口调试助手
82
下位机与上位机程序中关于串口、数据格式要设置一致。SCI初始化程序对串口通信的引脚进行功能配置,设置波特率、通讯控制(每帧包含的数据位长度,停止位长度,奇偶校验方式以及数据流控制等)、状态选择等。F2812串口通信支持状态查询和中断两种方式进行操作,在状态查询方式下主要通过检测发送寄存器的状态标志是否清零来判断发送器的工作状态。这里采用状态查询方式来进行通讯。软件设计流程如图17-3所示。
初始化系统
和片内SCI外设
N发送缓冲器准备好接收新数据
Y
向发送缓冲器
写入发送数据
N接收缓冲接收到的新数据准备被读出
Y
从接收缓冲寄存
器读取数据
所有数据N
发送完毕
Y
结束
图17-3 SCI通信实验的软件流程
六(实验步骤
1(在桌面的 CCStudio 图标上双击,打开CCS开发环境平台;选择菜单Debug?Connect。
2(打开“Project”选项,选择Open,选择实验目录下C:\CCStudio_v3.3\MyProjects\SCI
\shiyanxiangSCI.pjt,打开实验工程项目文件;
3(编译、链接,检查并修正错误。
4(下载到实验箱,将RS232接口与PC机的COM1连接,运行。在“串口调试工具”中选择波特率为600,在发送框中输入发送数据,点击自动发送,在显示窗口观察接收数组中的内容是否和发送数组中的相同。改变发送的初始值,再重复上述过程。 七(思考题
1(解释SCI接收发送数据的过程。
2(改变上位机通信程序的波特率,下位机程序应如何修改方能正确通信,
83
实验18 CAN接口通讯自检测实验
一(实验目的
1(了解TMS320F2812 片内CAN 模块的控制; 2(掌握CAN接口的自检测的模式;
3(学会用CAN接口的邮箱寄存器发送数据,并从接收邮箱中检测数据的正确性。
二(实验内容
1(DSP的初始化
2(CAN模块的初始化
3(CAN发送邮箱和接收邮箱的配置
三(实验原理
1)CAN 模块的特性
与CAN(2.0B)
完全兼容;
支持高达1Mbps 的传输速率;
具有32 个邮箱,每个邮箱都具有以下特性:
*可配置为接收或发送
*可用标准的或扩展的标识符进行配置
*具有可编程的接收过滤屏蔽
*支持数据桢和远程桢
*支持0-8字节的数据
*在接收和发送的信息中使用一个32位的时间标志
*阻止旧消息被新消息覆盖的保护措施
*允许对发送消息优先级的动态编程
*使用一种具有两个中断级别的可编程中断方案
*对发送和接收的超时现象使用一种可编程的中断操作
低功耗模式;
总线活动的可编程唤醒;
远端请求消息的自动应答;
某桢在缺少仲裁和发送错误下的自动重传; 由一个特殊消息(与16 号邮箱关联)同步的32 位时间标志计数器;
自检模式。
2)硬件原理如图18-1所示。
84
图18-1 CAN外部的引脚连接
四(软件编写与软件流程
软件流程如图18-2所示。
初始化系统
模块初始Ecan
化
自检测功Ecan
能开启
发送邮箱发送
数据到对应接
受邮箱
N 发送数据和接收
数据相等,
记录错误邮箱Y 个数
结束
图18-2 CAN自检测实验软件流程
五(程序注释
CAN接口的邮箱对应关系是由寄存器ECanaMboxes.MBOX1.MSGID.all里的数据来决
定的,即数据发送的校验码,改变校验码就改变邮箱的对应关系(重要)。 ECanaMboxes.MBOX15.MSGCTRL.bit.DLC是表示15号邮箱发送数据的长度; ECanaMboxes.MBOX10.MSGCTRL.bit.RTR是表示是否远程应答; ECanaMboxes.MBOX0.MDL.all 是表示0号邮箱发送/接收数据的低位;
85
ECanaMboxes.MBOX0.MDH.all是表示0号发送/接收数据的高位;
ECanaShadow.CANMC.bit.STM = 1表明自检测模式激活;
ECanaRegs.CANTRS.all发送数据准备;
ECanaRegs.CANTA.all发送数据成功或失败都会置位;
函数void mailbox_read(int16 MBXnbr)读邮箱数据;
初始时候0-15号邮箱是发送邮箱,16-31号邮箱是接收邮箱。
六(实验步骤
1(在Code Composer Studio中打开工程文件:
C:\CCStudio_v3.3\MyProjects\ecan_back2\ Example_281xECanBack2Back.pjt,在项目浏览器中,双击Example_281xECanBack2Back.c,激活Example_281xECanBack2Back.c 文件,浏览该文件的内容,理解各语句作用。
2(编译、下载程序。
3(运行并观察结果
-在Example_281xECanBack2Back.c中,选中变量errorcount,右击鼠标,选择“Add to watch window”,CCS将把变量添加到观察窗口并显示选中的变量值。
-单击“Debug”菜单,“Run”项,运行程序。
-程序运行一会儿停止后,观察CAN 邮箱中显示的数据,查看右下脚的errorcount变量值如果邮箱的数据传输没有任何错误,这个值应为0。
4(改动程序
,改动发送的数据
-发送与接收邮箱是对应的,0-15号发送邮箱发送数据到对应16-31号接收邮箱。
-改变程序中,例如:0号发送邮箱ECanaMboxes.MBOX0.MDL.all后面的数值(任意选择发送邮箱MBOX0-MBOX15)。
-编译rebuild源文件,下载程序。
-单击“Debug”菜单,“Run”项,运行程序。
-程序结束后,在CCS编程环境中,GEL里面的ECAN,找到wacth ecan register里的mail register,选择要观察的32个邮箱寄存器,重点观察MDL和MDH里面的数据。
,改动邮箱的校验码
-修改发送邮箱(0号邮箱-15号邮箱)的校验码,例如1号发送邮箱ECanaMboxes.MBOX1.MSGID.all后面的数值。
-修改接收邮箱(16号邮箱-31号邮箱)的校验码,例如17号接收邮箱ECanaMboxes.MBOX17.MSGID.all后面的数值,使其等于1号发送邮箱的数值。这样的配置就使得1号发送邮箱与17号接收邮箱对应。
-编译rebuild源文件,下载程序。
-单击“Debug”菜单,“Run”项,运行程序。
-在CCS编程环境中,GEL里面的ECAN,找到wacth ecan register里的mail register,选择要观察的32个邮箱寄存器,重点观察MDL和MDH里面的数据,例如1号邮箱的MDL,MDH数据与17号邮箱的MDL,MDH数据。
86
七(预习要求
1(了解TMS320F2812片内CAN 模块的控制;
2(了解CAN 电路的控制方法,和一些寄存器的含义。
八(思考题
1(如何配置发送邮箱和接收邮箱,使得一个发送邮箱对应多个接收邮箱,
2(如何配置发送邮箱和接收邮箱,使得多个发送邮箱对应一个接收邮箱, 九(实验报告要求
1(写出实验结果
2(该程序主要完成的CAN 接口的邮箱的何种功能,
87
实验19 McBSP与数模转换实验
一(实验目的
1(掌握使用TMS320F2812中的McBSP接口的基本原理和使用方法。
2(了解DAC7512的应用。
二(实验内容
1(DSP的初始化配置
2(McBSP的初始化
3(McBSP驱动数模转换芯片显示波形
三(TMS320F2812中的McBSP模块的介绍
多通道缓冲串口(McBSP)是一个能与其他设备直接连接的串行数据接口,可提供8/16/32位串行数据的同步发送和接收。McBSP提供的主要特性有:全双工通信方式;发送和接收具有独立的时钟和帧结构;有128个发送和接收通道;多通道选择模式可以允许或者阻止每个通道的传输;DMA被两个16级的32位FIFO代替;支持外部时钟信号和帧同步信号的产生;一个可编程的采样率发生器,可用于采样内部生成的时钟并控制帧同步信号;可编程内部时钟和帧发生器以及帧同步和数据时钟的极性;支持SPI设备;数据长度的选择范围:8、12、16、20、24、32位;数据传输时可选择先发送/接收高8位或低8位。 四(硬件连接
XS5DGNDD5
16MFSRA2VoutSYNCC1725MCLKRA1GNDSCLK10434MDXAVDDDinDGNDDAC7512
3.3V
图19-1 DAC7512引脚连接原理图
如图19-1所示:实验箱上配置的是一个三线12位串行输入的DA转换器DAC7512,电压型输出.。输出电压公式:Vout=VDD*D/4096,D=输入的二进制转换为10进制的值
McBSP的MDXA连接DAC7512的数据输入管脚Din; MCLKXA(发送时钟引脚)和MCLKRA(接收时钟引脚)共同接DAC7512的串行时钟输入管脚SCLK; MFSXA(发送帧同步引脚)和MFSRA(接收帧同步引脚)共同接DAC7512的电平触发输入控制管脚/SYNC。
同步信号/SYNC被拉低后,可以开始向DAC7512执行写操作,Din上的数据自时钟信号SCLK的下降沿到时写入16位数据输入寄存器,当SCLK的第16个下降沿到时写入完成。注意:在写数据的过程中,必须保证SCLK至少有16次下降沿,否则写入无效。
DAC7512的数据输入寄存器如表19-1。其中最高两位值任意,PD1和PD0决定操作模式,如表19-2。在本实验中采用普通模式。因此实际写入数据的最大值是二进制111111111111,即4095。
表19-1 DAC7512的16位数据输入寄存器
X X PD1 PD0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
88
表19-2 DAC7512的操作模式
PD1 PD0 操作模式
0 0 普通模式
0 1 对地输出1k欧阻值
1 0 对地输出100k欧阻值
1 1 高阻状态 五(软件流程
如图19-2所示。
开始
初始化DSP
模块初始化McBSP
产生锯齿波
图19-2 软件流程图 六(实验步骤
1(打开McBSP目录下的工程:
C:\CCStudio_v3.3\MyProjects\mcbsp\Example_281xMcBSP_FFDLB_int.pjt。
2(编译、链接,检查并修正错误,下载程序到目标系统中。
3(将示波器通道一接地端接DAC7512的接地端GND(管脚2),探针点在DAC7512
的数据输出端VOUT(管脚1),运行程序,调节示波器的量程,观察波形并记录。
七(思考题
试修改程序,产生锯齿波。
89
实验20 直流电机调速实验
一(实验目的
1. 了解TMS320F2812 DSP片内事件管理器模块的脉宽调制电路PWM的特性参数;
2. 掌握PWM电路的控制方法;
学会用程序控制产生不同占空比的PWM波形。 3.
4(学习直流电机的控制原理和控制方法。
二(实验原理
1(脉宽调制电路PWM的特性
事件管理器(EVA)模块中有3个比较单元(比较单元1、2和3),事件管理器(EVB)模块中也有3个比较单元(比较单元4、5和6)。每个比较单元都有2个相关的PWM输出。比较单元的时钟基准由通用定时器1和通用定时器3提供。事件管理器的比较单元做为PWM信号输出的辅助电路,主要用来控制信号处理器的PWM输出的占空比。
2(PWM电路的设置
在电机控制和运动控制的应用中,PWM电路被设计为减少产生PWM波形的CPU开销和减少用户的工作量。与比较单元相关的PWM电路其PWM波形的产生由以下器存器控制:于EVA 模块,T1CON、COMCONA、ACTRA和DBTCONA;对于EVB模块,T3CON、COMCONB、ACTRB和DBTCONB。
产生PWM 的器存器设置:
-设置和装载ACTRx 寄存器;
-如果使能死区,则设置和装载DBTCONx寄存器;
-设置和装载T1PR或T3PR寄存器,即规定PWM波形的周期;
-初始化CMPRX 寄存器;
-设置和装载COMCONx寄存器;
-设置和装载T1CON 或T3CON寄存器,来启动比较操作;
-更新CMPRx 寄存器的值,使输出的PWM波形的占空比发生变化
3(直流电机控制
直流电动机是最早出现的电动机,也是最早能实现调速的电动机。近年来,直流电机的结构和控制方式都发生了很大的变化。随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控型的开关功率元件进行脉宽调制(Pulse Width Modulation,简称PWM)控制方式已成为绝对主流。
PWM 调压调速原理:
U,IR直流电动机转速n的表达式为: n= K,
其中,U 为电枢端电压;I 为电枢电流;R 为电枢电路总电阻;Φ为每极磁通量;K 为电动机结构参数。
所以直流电动机的转速控制方法可分为两类:对励磁磁通进行控制的励磁控制法和对电枢电压进行控制的电枢控制法。其中励磁控制法在低速时受磁极饱和的限制,在高速时受换向火花和换向器结构强度的限制,并且励磁线圈电感较大,动态响应较差,所以这种
90
控制方法用得很少。现在,大多数应用场合都使用电枢控制法。绝大多数直流电机采用开关驱动方式。开关驱动方式是使半导体功率器件工作在开关状态,通过脉宽调制PWM来控制电动机电枢电压,实现调速。
下图20-1是利用开关管对直流电动机进行PWM调速控制的原理图和输入输出电压波形。 图中,当开关管MOSFET的栅极输入高电平时,开关管导通,直流电动机电枢绕组两端有电压Us(12V)。t1 秒后,栅极输入变为低电平,开关管截止,电动机电枢两端电压为0。t2 秒后,栅极输入重新变为高电平,开关管的动作重复前面的过程。这样,对应着输入的电平高低,直流电动机电枢绕组两端的电压波形如图中所示。电动机的电枢绕组两端的电压
1tUS,01t平均值Uo为:U==U=αU式中α为占空比,α=t1/T 0SS 1,2Ttt
Ui
t
UOTt1t2
Us
t
图20-1 PWM调速
占空比α表示了在一个周期T里,开关管导通的时间与周期的比值。α的变化范围为0 ?α?1。由此式可知,当电源电压Us 不变的情况下,电枢的端电压的平均值Uo取决于占空比α的大小,改变α值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。
PWM 调速方法:
在PWM调速时,占空比α是一个重要参数。以下3种方法都可以改变占空比的值:
(1)定宽调频法:这种方法是保持t1不变,只改变t2,这样使周期T(或频率)也随之改变。
(2)调宽调频法:这种方法是保持t2不变,只改变t1,这样使周期T(或频率)也随之改变。
(3)定频调宽法:这种方法是使周期T(或频率)保持不变,而改变t1和t2。
前两种方法由于在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这两种方法用得很少。目前,在直流电动机的控制中,主要使用定频调宽法。
4(直流电机模块原理图
直流电机模块原理图如图20-2所示。电机与控制电路作了隔离。利用DSP2812 的EVB的PWM12输出,通过TLP250隔离,控制电机的转速。PWM12接一下拉电阻,防止实验箱一上电电机就高速旋转。在电机两端反并一个二极管以起到保护作用。通过继电器两组开
91
K1DS2Y XS162+12_13112关的切换,改变电机电源极性,从而实现电机旋转方向的改变。 736CON38VD2
FR107+12V45
Q5R125C4TRIP8050VD6680
R2231N41481.1k
DGND
DGND
IRF3710
D8+15_1Q23.3V1830/1WNCVCC20027LEDAOUT36LEDKOUTR114R2434512_1GNDNCGND
R24Q3TLP25012_1GNDR10310kPWM128050
680
R2221.1k12_1GND
DGND
DGND图20-2 直流电机调速硬件原理图 5( 实验程序流程图(如下图20-3所示)
开始
DSP初始化
EVB初始化
液晶初始化
液晶显示初始画面
根据液晶画面提示,按动键盘,实现电机调速
图20-3 直流电机调速软件流程图
三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
1(打开工程文件:
92
工程目录:C:\CCStudio_v3.3\MyProjects\DCmotor\try.pjt。
2(编译并下载程序
3(运行并观察程序运行结果:
开始运行程序后,电机以中等速度转动(占空比=50)。
在小键盘上按“+”键可使电机转速增大,“-”键可使电机转速减慢,“Enter”
键停止电机转动。按下“R”键可使电机顺时针旋转;按下“L”键可使电机逆时针旋
转。液晶上有相关显示。有时键盘控制不是非常灵敏,这是因为程序采用了查询方式
读键盘输入的结果,可以多按几次按键。
4(结束程序运行,退出CCS。
五(预习要求
1(了解F2812 DSP产生不同占空比的PWM信号。
2(了解直流电机的控制原理和控制方法。
六(注意事项
1(欲改变电机旋转方向,请先停止电机转动,然后控制继电器切换方向。编程时务请注意~
2(电机转动时请勿触摸转盘。
七(思考题
1(实验中能让电机启动的最小占空比是多少,
2(电动机是一个电磁干扰源。电动机的启停还会影响电网电压的波动,它周围的电器开关也会引发火花干扰。除采用必要的隔离、屏蔽和电路板合理布线等措施,还可以采用什么方法防止程序“跑飞”,
八(实验报告要求
1(记录实验结果
2(分析在该实验中,直流电机的转速改变受何影响,
93
实验21 步进电机调速实验
一(实验目的
1( 通过实验学习使用2812DSP的扩展I/O 端口控制外围设备信息的方法
2( 了解步进电机的控制方法。
二(实验原理
1(步进电机简介
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使其在速度和位置等控制领域应用变的非常的简单。
步进电机的主要特性:步进电机必须加驱动才可以运转,驱动信号为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。改变脉冲的顺序,可以方便的改变转动的方向。
2(硬件原理图
步进电机选用PM25S-048,是永磁型四相步进电机,5针端子中有一个电源输入和4个线圈绕组输出端。这里采用单四拍运动模式,各相依次的通电顺序为A—B—C—D。系统通过端子JP9 接DSP四个PWM输出引脚PA0,PA3,PA0,PA3经下拉电阻接至缓冲器74HC244。74HC244输出信号经光耦隔离驱动达林顿管,进而驱动步进电机。步进电机驱动电路的硬件原理图如图21-1所示。
94
10KR205
4
3
2
1
1K
5
4
3
2
1R22
图21-1 步进电机调速硬件原理图
4.7KR211
2
3
4
5
12_1GND
+12_1ULN2003AD
1COMENDGND12_STEP MOTOR987C7BR4710766C6B1165C55B30012544C4B13433C3B143R462C22B15211C1B161300DGNDTLP521-4JP1D10998R4510107111163001295 1251313414143R4415152SN74HC244DGND7161300P4+5_1D111317515P3P2713911P1128DD8146LED1643.3V182DD7LED 2011019DD6D9LED
DGNDDGNDDD5LED
步进电机的四相四拍时,四相(ABCD)控制输出在正转时顺序为(1代表该相绕组通
电):
1000,> 0100—>0010,>0001
反向旋转时的顺序为:
1000,>0001—>0010,>0100
3(软件流程
程序采样电位器的输出电压作为速度指令,或者通过按键输入速度指令。根据速度指
令程序调节脉冲的输出周期和循环顺序:若脉冲输出循环的顺序为1000,>0100—>0010
,>0001,电机正转;若为1000,>0001—>0010,>0100,则电机反转。图21-2为其软件
流程。
开始
DSP初始化
GPIO口初始化
液晶初始化
液晶显示初始画面
“+”或“-”键按
下电机调速
液晶显示相关画面
“R”或“L”键按
下电机调整方向
液晶显示相关画面
“Enter”键按下电
机停转
液晶显示相关界面
图21-2 步进电机调速软件流程图 三(实验设备
计算机,C2000 DSP实验箱
四(实验内容与步骤
96
1(打开工程文件C:\CCStudio_v3.3\MyProjects\stepmotor\try.pjt。
2(编译并下载程序
3(运行程序,观察结果
开始运行程序后,电机以中等速度顺时针转动。四个发光二极管闪烁。
在小键盘上按“+”键可使电机转速增大,“-”键可使电机转速减慢,“R(Right)”
键可使电机顺时针转动,“L(Left)”键可使电机逆时针转动,“Enter”键停止电机
转动。液晶上有相关显示。有时键盘控制不是非常灵敏,这是因为程序采用了查询方
式读键盘输入的结果,可以多按几次按键。
4(停止程序运行并退出CCS。
五(预习要求
1(了解2812DSP的扩展I/O 端口控制外围设备
2(了解步进电机的控制方法。
六(注意事项
1(注意将电机部分的供电电源开关拨动到“开”的位置
2(电机转动时请勿触摸转盘。
七(思考题
试优化该程序,使其可控制电机更平滑地转动。
八(实验报告要求
1(分析实验结果
2(分析该实验中是通过什么控制其转动方向。
97
实验22 USB通信模块实验
一(实验目的
1(了解TMS320F2812A的XINTF外部扩展接口的使用方式。
2. 了解USB总线的数据传输方法,及其应用。
3(了解实验箱USB通信模块的原理及应用。
二. 实验原理
1(USB规范简介:
通用串行总线(Universal Serial Bus USB),是一种快速、灵活的总线接口。与其它通信接口比较,USB接口的最大特点是易于使用,这也是USB的主要设计目标。作为一种高速总线接口,USB适用于多种设备,比如数码相机、MP3播放机、高速数据采集设备等。易于使用还表现在USB接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。
在USB总线中,主机处于最高地位,每个USB总线中只能有一个主机(绝大多数情况下为电脑),和若干个集线器及设备,任何数据的传输都是从主机开始发起的,设备不能发起任何动作。在USB总线中,最末端的单位是设备的端点,所有数据都是由端点进行收发。一个设备只能有一个地址,但是可以有多个端点,每个端点可以有不同的数据传输方式和传输方向。对于每一个设备,端点0都是保留的,仅仅用于设备和主机进行特定的信息传递。
当一个设备被插入集线器时,主机会对设备的端点0发送USB协议规定的标准请求,内容为设备的类型、配置、编号等等;设备的固件(Firmware)会通过端点0发送各种描述符,如设备描述符、配置描述符等对主机的请求进行应答,告知主机所需求的一切信息。当主机对设备的询问结束并且为设备设置了唯一的地址,对设备进行了相应配置,并且在操作系统中安装了设备对应的驱动程序之后,设备就可以使用了,这个过程是USB通信最基本的过程,称为枚举。
在USB协议中,规定了4种传输方式:控制传输,中断传输,批量传输,同步传输。其中控制传输仅用于枚举过程;同步传输最为简单,没有错误处理机制。最常用的为中断传输和批量传输,其基本过程一样,最大区别为中断传输中,主机每隔规定的时间(在枚举中规定)即查询是否有数据需要发送或从设备接收,而在批量传输中,只有当上位机程序需要时,主机才会发送或者接收数据。在日常的USB设备中,鼠标是最常见的使用中断传输的设备,U盘是最常见的使用批量传输的设备。
2(实验箱USB通信模块的硬件原理
在实验箱的USB通信模块中,选用了飞利浦的ISP1581接口芯片,与2812的XINTF扩展接口连接,构成16位系统。2812芯片的XA18-XA16脚连接至74HCT138译码器的输入端作为片选编码信号,ISP1581芯片的CS脚连接至74HCT138译码器的Y1输出端作为选通信号,因而可知,ISP1581的片选起始地址为0x110000。如图22-1所示。
98
..JP2DGNDCON33.3VC300D33C301164123DGNDVCC50.1u263C823.3VVCC5SUSPENDDGNDXS15362T2CTRIP_EVASOCDGNDAGNDWAKEUPDGNDC3054611DGNDVregDGNDDGND+5V560Y220pf2D-XTAL1R2240.1u6593D+XTAL212MHZ758R1191M1.5k4DGNDRPUVCC3857XD[15]12.2kDGNDRREFD15R118USB956XD[14]3.3VC833.3VMODE1D141055XD[13]R3310k3.3V/RESETD13DGNDC80C811154XD[12]EOTD1210pf10pf1253XD[11]20pfDREQD111352XD[10]DACKD10DGND1451XD[9]DIORD91550XD[8]DIOWD81649XD[7]INTRQD71748XD[6]/CS1D61847XD[5]10k/CS0D5R341946XD[4]3.3VBUS_CONF/DA0D42045XD[3]3.3VMODE0/DA1D32144XD[2]10kDA2D2R352243READY/IORDYVCC53.3V3.3V2342DGNDAGNDDGNDDGNDC3022441XD[1]VCC3D10.1uUSB_CS2540XD[0]/CSD0DGNDC304XRD2639XA[7]/RDAD70.1uC303XWE2738XA[6]/WRAD60.1uXNMI2837INTVCC53.3V2936ALE/A0DGNDDGNDDGND3035XA[5]AD0AD5DGNDXA[1]3134XA[4]AD1AD4XA[2]3233XA[3]AD2AD3
ISP1581..
图22-1 USB模块的硬件电路图
3(实验箱USB通信模块的软件原理
在USB通信模块的实验中,软件部分分为USB模块固件(即在2812上运行的下位机程序)和上位机程序及驱动程序两部分。固件的作用是完成主机对与设备的枚举,对主机发来的数据进行处理,以及将所需要发送的数据写入ISP1581的发送缓冲区等待主机读取。上位机程序的作用是在电脑上对设备进行读写操作,并对设备发来的数据进行处理。驱动程序的作用是为上位机程序对设备的访问提供操作系统底层的函数。
在本实验中,开启了ISP1581的端点1和端点2两个双向收发端点,其中端点1采用中断传输方式,最大包8字节,端点2采用批量传输方式,最大包64字节。端点1接收的数据用于控制实验箱LED1-LED4的亮灭、键盘和温度采集的开关,发送的数据反映了实验箱的S1-S8的状态和键盘状态;端点2接收的数据的前三字节在数码管上进行显示,端点2发送的数据为接收到数据的高低字节对调并重复8次。
在上位机程序中,LED1-LED4四个按钮可以控制实验箱上对应LED的状态,KEY1-KEY8可以显示实验箱上对应按键的状态,温度采集按钮可以控制实验箱温度采集功能的开关,发送数据区可以输入8个字节的16进制数,按下发送数据按钮可以将数据发送给实验箱,下方的显示区可以显示实验箱和主机间所有的数据收发状态,最下方可以显示设备发送来的采集到的当前室温值。
实验箱USB模块固件流程图如图22-2所示:
99
开始
初始化2812及ISP1581寄存器
进入前台循环过程
N
Y总线复位中断,总线复位中断处理
N
YUSB SETUP中断,进入枚举过程
N
Y端点0输入中断,清端点0输入中断
NN
Y端点0输出中断,清端点0输出中断
N
Y端点1输出中断,进入端点1中断处理程序
N
Y端点2输出中断,进入端点2中断处理程序
N
Y设备配置完成,进入扫描键盘程序
图22-2 主程序流程图
100
子程序入口
读取8字节的标准请求
交换后面3个字的高低位
置,得到真实的标准请求
Y请求设备描述符,发送设备描述符
N
Y设置地址,并且返回空包设置地址,
N
YY仅配置描述符,发送配置描述符请求配置描述符,
NN
Y请求语言ID,发送语言ID发送配置描述符集
N
Y请求厂商ID,发送厂商ID
N
Y请求产品ID,发送产品ID
N
Y请求序列号ID,发送序列号ID
N
Y使能并设置需要端点,设置配置,configed=1
N
返回
图22-3 枚举子程序流程图
101
端点1输出子程序入口
清端点1输出中断
读取8字节数据
端点2输出子程序入口
对调每个字的高低字节得到真实数据
清除端点2输出中断
YLED1亮,点亮LED1
读取端点2缓冲区数据
N
Y对调高低字节,得到真实数据LED2亮,点亮LED2
N
YADC正在转换,LED3亮,点亮LED3
NYN
将数据高低字节对调后发送给主机YLED4亮,点亮LED4
熄灭所有数码管N
Y启动ADC转换,启动ADC转换在数码管上显示前3个字节的数据
N
返回返回
图22-4 端点1输出子程序流程图 图22-5 端点2输出子程序流程图
键盘扫描子程序入口ADC转换中断子程序入口
将采集数据送入数组中分别检测S1-S8的状态,是否有改
变,计算出当前温度值
N将温度值由端点1发送给主机
Y
将改变的数据由端点1发送给主机初始化采样序列
返回返回 图22-6 键盘子程序流程图 图22-7 ADC中断子程序流程图
三. 实验设备
计算机,实验箱,USB连接线。
102
四.实验内容与步骤
1(实验准备
用并口线连接计算机与实验箱,启动实验箱电源。
2(启动Code Composer Studio 3.3。选择菜单Debug?Connect。
3(打开工程文件
工程文件为:
C:\CCStudio_v3.3\MyProjects\usb_mouse\Example_281xUSBMouse.pjt
4(编译、下载程序。
5(运行程序后,用USB线连接实验箱与计算机,此时计算机会提示找到新硬件,根据计算机显示的指引步骤安装USB模块的驱动程序,驱动程序在C:\CCStudio_v3.3\MyProjects目录下。当计算机显示设备已经可以使用后,运行桌面上的USB实验程序,点击“打开设备”,下方窗口显示“设备已打开”后,说明实验箱与计算机已通过USB总线连接上,可以通过USB总线完成计算机与实验箱之间数据的收发。
(1)分别点击实验程序“LED1”-“LED4”按钮(图22-8所示),观察实验程序窗口显示的数据收发情况和实验箱上的4个LED的变化情况。
图22-8 上位机程序中控制实验箱LED的按钮
(2)按下实验箱上S1-S8按钮,观察观察实验程序窗口显示的数据收发情况和对应的“KEY1”-“KEY8”的变化情况(图22-9所示)。
图22-9 上位机程序中显示实验箱按钮状态的指示灯
(3)点击实验程序“温度采集”按钮(图22-10所示),观察实验程序窗口显示的数据收发情况和“当前气温”栏目数字的变化情况(图22-11所示)。
图22-10 上位机程序中控制实验箱温度采集开关的按钮
图22-11 上位机程序中显示实验箱温度采集的数值
(4)在实验程序“发送数据区”中填上任意8个字节的十六进制数字,点击“发送数据”(图22-12所示),观察实验程序窗口显示的数据收发情况(图22-13所示)以及实
103
验箱数码管的变化情况。
图22-12 上位机程序中向实验箱发送数据的窗口
图22-13 上位机程序中显示所有数据收发状态的窗口
实验结束后,点击实验程序“关闭设备”按钮,待窗口中显示“设备已关闭”后,可以将USB线拔下。
五(预习要求
了解TMS320F2812A的XINTF扩展接口的连接方式及USB总线。 六(思考题
可以修改process.c文件中的相关语句,改变端点2向主机发送的数据内容。 七(实验报告要求
详细说明TMS320F2812A与ISP1581芯片的连接方式及USB总线的体系结构。
104
参考文献
[1] 徐科军,张瀚,陈智渊.TMS320X281x DSP原理与应用[M].北京:北京航空航天大学出版社,2006.
[2]“TMS320F2810,TMS320F2812 Digital Signal Processors Data Manual”,Texas Instruments.
[3]“Digital Signal Processors vs.Universal Microprocessors”,Texas Instruments.
[4] 张瀚,陈智渊,周扬等.C2000 DSP实验箱实验指导书.合肥工业大学,2006.
[5] 苏奎峰,吕强,常天庆.TMS320x281x DSP原理及C程序开发[M].北京:北京航空航天大学出版社,2008.
105