西安电子科技大学
DSP技术及应用实验小作业
学 院 电子工程学院 专 业 电路与系统 学 号 1202120902 学生姓名 王艳涛 授课老师 郭万有
实验一——VISUALDSP++的使用入门 实验一的目的
实验一的主要目的是熟悉VISUAL DSP++的开发环境。针对ADSP-TS201,利用几个用C、C++和汇编语言写成的简单例子来描述 VISUAL DSP+十编程环境和调试器(debugger)的主要特征和功能。对于运行在其它类型TS20x处理器的程序只需对其链接描述文件(.LDF)做一些修改,就可用于其它芯片或者ADSP-TS201的硬件仿真。在目录?\TS\ldf下有每种处理器类型的链接描述文件,可供参考。
实验一包括4个基本练习:
练习一:启动Visual DSP++ 4.0,建立一个用C源代码的工程(Project),同时用调试器来评估用C语言所编写代码的性能;
练习二:创立一个新的工程,修改源码来调用一个汇编(asm)程序,重新编译工程,用调试器来评估用汇编语言所写程序的性能;
练习三:利用调试器的绘图(plot)功能来图形显示一个FIR算法中的有关数据的波形;
练习四:利用调试器的性能统计功能(Statistical profile)来检查练习三中FIR算法的效率。利用所收集到的性能统计数据就能看出算法中最耗时的地方。
实验1——运行C程序
在练习一中,将创立和运行一个C程序,源文件在…\\TS201讲义\\参考实验程序\\Tutorial\\dot_product_c子目录。 1. 实验步骤
l) 进入Visual DSP+十并打开一个工程(Project)
进入 Visual DSP++,显示Visual DSP++的集成开发和调试环境窗口(Integrated Development and Debugger Environment,简称IDDE)。
选择菜单File 中Open 打开文件…unit_1\\dot_product_c \\dotprodc.dpj。
VisualDSP++环境将装载dotprodc工程,并列出相应的源文件。在输出窗口(Output Window)中显示简要信息。
Dotprodc工程中有3个文件,定义数组和计算数组点积和的两个C语言源文件
dotprod_main.c(主程序)、dotprod.c(子程序)。 2) 编译 dotprodc工程
在菜单 Project中选择 Build Project来对工程进行编译。此时,输出窗口显示程序编译时的各种状态信息(包括出错和编译进程信息)。当编译检测到错误时,将在输出窗口出现相应的出错信息,用鼠标双击它,编译器将自行打开源文件。这时可对源文件编辑、修改错误,再次进行编译。当编译不再有错时,输出窗口将显示“Build completed successfully”。
在本例子中,编译器会检测到一个未定义的错误,显示为:
“.\dotprod_main.c”,line 115:error #20:identifier“itn”is undefined itn i; 在输出窗口中对该行文字用鼠标双击,环境会自动打开 dotprod_main.c文件,并将光标定位在出错行。你可以看见单词“int”被错写成“itn”。
将该错误改正后,保存并重新编译。如果再没有错误出现,这时工程已被成功编译,就可以用VisualDSP++的debugger来调试程序。
VisualDSP++开发环境的编辑窗口和输出窗口以及所显示的程序编译时的各种状态信息如图7.1所示:
图7.1 VisualDSP++开发环境的编辑窗口和输出窗口图 7.2 NeW Session 对话框
3) 运行VsualDSP++调试器
在编译完成后,环境将自动进入调试状态,对于初次进入debugger,将显示对象选择对话框,在其中指定对象和处理器信息。
域
Debug Target Platform Session Name Processor
选择值
ADSP-TS20x Family Simulator
ADSP-TS201 Rev.0.0 Single Processor Simulator
ADSP-TS201 ADSP-TS201 Rev.0.0 Single Processor Simulator ADSP-TS201
若在调试过程中需定义不同的对象和处理器类型,选取菜单Sessions中NeW Session项来重新定义。NeW Session 对话框图7.2所示:
用VisualDSP+十调试时,调试器会自动调入工程的可执行文件dotprodc.dxe。 在默认情况下,调试器会打开三个窗口:输出窗口(下)、反汇编窗口(右)、包括工程主文件dotprod_main.c的源代码窗口(左)。如图7.3所示,左窗的每一条C语句都对应右窗中的多条汇编指令:
图7.3 调试器的输出窗口、反汇编窗口和源代码窗口
在图7.3中,箭头所指为当前执行指令,红圆圈代表设定的断点位置。当调试器加载C程序时,会自动设置两个断点,分别在代码执行的开头和结尾。
测览程序中的断点可选择菜单Settings下的BreakPoints?,可在此对话框中增加或删除断点。另外也可通过在每条代码行的开头处双击鼠标或快捷键F9来设置或取消断点。
4) 运行dotprod.c
从 Debug菜单中选择 Run项,程序将被执行,其输出结果在 Output window中显
示。如图7.4所示:
图7.4 dotprod.c 输出结果
5) 评估函数 a_doc_c 的性能(profile)
Profile用来分析程序的运行时间特性,通过Profile可以找到最耗时的程序段,这
可能就是需要进一步优化性能的程序段。
通过下述步骤来设置Profile功能并显示其结果:
(1) 选 Tools\\Linear Profiling\\New Profile命令,如图7.5所示:
图7.5 设置Profile功能的菜单
(2) 出现一个Profile的子窗口,在该窗口上点击右键弹出如图7.6(1)的快捷菜单,
如图7.6(1)所示:
图7.6 Profile右键快捷菜单 图7.6(2) 设置进行评估的起始地址和结束地址
(3) 点击菜单中的Properties….,选中第二个选项卡“filter”然后设置开始地址和结
束地址;如图7.6(2)所示。
VisualDSP++允许在整个程序空间中进行评估,当然也可以设置若干个Memory ranges(汇编程序评估选项)或若干个C子程序的函数体进行评估,即可以重复指定多个 Profile Range。在本例中要求对三个子函数a_dot_b() 、a_dot_c()、a_dot_d()的运行效率作出评估,应在 “Filter”选项卡中选择C/C++ function,如图7.6(2) 所示:
(4)重新编译加载程序,按F5继续运行程序,程序完全执行后,将在Console窗口显示结果,并在Profile窗口中显示程序运行过程中的各种数据。点击右键菜单中View Sample Count,显示如图7.7(1)所示:
7.7 Profile窗口(1)
将Project Options中的编译器设置将代码优化功能选中,重新编译和链接程序后,
对程序中的三个子函数的运行性能重新进行评估,如图7.7(2)所示,对比优化前和优化后的区别,说明其原因。
图7.7 Profile窗口(2)
2. 实验要求
记录profile窗口中函数a_dot_c()的评估结果,分析程序的执行时间。
实验2——运行C和汇编混合程序
在练习一中的例子是C主程序调用C子程序。在练习二中,要学会如何创建新工程,在此基础上我们将修改这个C主程序,让其调用一个汇编子程序,重新编译工程并评估汇编程序的性能。 1.实验步骤
l)创建一个新的工程(project)
从 Project菜单中选取New项,在弹出的工程保存对话框中,将工程名定义为dot_product_asm,并保存在…unit_1\\dot_product_asm目录下。
接着在弹出的工程选项对话框中定义其各项参数值,其各项参数值可如下表所示:
选项 Processor Type Name Settings for
设定值 ADSP-TS201 DSP executable file dot_product_asm Debug
这些参数都是针对ADSP-TS201处理器而设置的,Visual DSP++的Project 选项卡如图7.8所示:
图7.8 Visual DSP++的Project 选项卡 图7.9 Visual DSP++的Compile 选项卡
在Project Options对话框中,选中“Enable optimization”和“Generate debug information”两项,系统将自动生成针对ADSP-TS201的优化代码,如图7.9所示: 2) 向dot_product工程中添加文件
选取菜单Project\\Add to Project\\file(s)?项,按住Ctrl键来同时选中dotprod_main.c,dotprod.c,dotprod_func.asm文件,点击“Add”将这几个文件加到工程中。结果如图7.10所示:
图7.10 添加文件对话窗
3)创建链接描述文件
在此步骤中,我们将给该工程创建一个连接描述文件。 连接描述文件创建步骤如下:
1,在Tool菜单中,点击Expert Linker中的Creat LDF,就会出现如下图7.11所示的窗口。
图7.11 图7.12
2.选择“Project type””为C型,点击“下一步“,如图7.12
3.选择“System type”为“Single process”,下一步,窗口如图7.13。
图7.13 图7.14
4.在如下图7.14的窗口中,点击完成,就会出现该工程的链接描述文件图。 至此,该工程的链接描述文件就创建成功。 4) 修改工程源文件
在此步骤中,我们将修改dotprod_main.c文件,让其调用一个汇编子程序 a_dot_c_asm来取代a_doc。
打开dotprod_main.c文件,在源代码中找到下列相应的四条语句:
extern int a_dot_c( int *, int * ); /*extern int a_dot_c_asm( int *, int * );*/ ……………
result[1] = a_dot_c( a, c );
/* result[1] = a_dot_c_asm( a, c );*/ 将这四条语句修改为:
/*extern int a_dot_c( int *, int * );*/ extern int a_dot_c_asm( int *, int * ); …
/* result[1] = a_dot_c( a, c );*/ result[1] = a_dot_c_asm( a, c );
这样主程序将调用a_dor_c_asm汇编程序来取代练习一中的a_dot_c子程序。 5) 修改链接描述文件
当工程源文件修改该完毕后,编译在工程,输出窗口如下图7.15所
图7.15
打开链接描述文件,如下图7.16:
图7.16
将左边方框中的带有红叉的“dotprod_func.doj”拖动到右边方框M0Code内存中(可通过右上角的放大器放大查看),红叉消失,这时我们就对链接描述文件进行了修改。 6) 编译和运行dot_product
先选取菜单 Project\\Build Project项来编译工程; 再选取菜单 Debug\\Run项来运行程序。
在输出窗口(Output Windows)中就会得到运行结果:
Dot product [0] = 13273595 Dot product [1] = -49956078 Dot product [2] = 35872518
7) 评估a_dot_asm的效率
要评估汇编代码的效率,要在评估属性设置窗口中的“Memory ranges”中设定评估代码的起始地址。将Start Address设置为汇编子程序入口地址_a_dot_c_asm,将End Address设置为汇编子程序的出口地址_a_dot_c_asm.end。重新加载程序,并运行程序进行汇编语言程序评估,评估的设定窗口和结果窗口及结果如图7.17示:
图7.17 a_dot_asm Profile 设定窗口和结果窗口
从图中可以看出原来没有优化的C语言子程序为626,现在改变为汇编语言程序嵌入后为201,从而说明汇编语言执行速度比C语言快多了。
实验3——数据绘图(Plotting)
练习三是对一个己编译的算法程序的数据进行绘图输出 1. 实验步骤
l) 将算法程序调入Debugger环境
关闭所有已打开的工程和文件,选择菜单 File\\Load Program...项或点击图标。在出现的对话框中选择文件…bkfir2_flp32\\debug\\ bkfir2_flp32.dxe。
可以在C代码源文件中看到两个全局数组:inputs和output。 2) 打开绘图窗口并设定参数
选择菜单 View\\Debug Windows\\Plot\\New?项,将出现Plot参数设置窗口。 在 Plot Type项中选择 Line Plot,在 Plot Title中输入fir。其它参数设定如表7-1所示:
表7-1 Plot参数设置 Data Sets inputs Name inputs Memory TigerSharcMemory output output TigerSharcMemory Plot设置对话框如图7.18示:
output 256 1 float Address Inputs Count 256 Stride 1 Data float
图7.18 Plot设置对话框
各行参数在设置完后,点击“Add”加入,最后点击“OK”。 此时屏幕将出现Plot设置对话框如图7.19所示的绘图窗口:
图7.19 程序运行之前的Plot窗口IN变量图
3) 运行fir程序并在图形窗口中观察数据
接F5运行程序,当程序Halt(SHIFT-F5)后,用Plot窗口绘出出现数据output的曲线。图中的两条曲线分别代表inputs(绿)和output(紫)数组的值,程序运行后的Plot窗口如图7.20(1)所示:
图7.20(1) 程序运行后的Plot 窗口
在Plot窗口中可用鼠标左键选取图形的一部分 图形会自动对所选区域放大,便于数据的观察。若要精确地知道某个数据在某点的值,可点击鼠标的右键,在弹出的菜单中选取“Data Cursor”项,图形上将出现“十”字大光标,可点击曲线上的任一点,
在窗口左下角会出现该点的数值和曲线名,可用键盘上的上(↑)下(↓)键来切换所选曲线。
4)绘制幅度谱线图
在plot窗口点击右键,选择“modify setting”,在“plot setting”窗口选择“data processing”,在“data sets”窗口选择“inputs”,在“data process”窗口选择“FFT Magnitude”,然后点“OK”,重复一以上操作,把数据“output”也改为“FFT Magnitude”,在plot窗口可以看到如下图7.20(2)所示:
图7.20(2)数据的FFT
该图就是bkfir2_flp32滤波前后的数据频谱图。
实验4——性能统计
在练习四中,我们将再次调用并调试fir程序,用调试器的性能特性(statistical Profiling)来找出程序中最花时间的部分。 1. 实验步骤 l) 打开fir程序
关闭所有的文件,如同练习三中的一样,选用菜单File\Load Program?命令项,在对话框中选择文件…bkfir2_flp32\\debug\\ bkfir2_flp32.dxe。 2) 打开统计特性选项
选 Tools\\Linear Profiling\\New Profile命令,出现 Statistical Profiling Results窗口,如图7.21所示:
图7.24 Statistical Profiling Results窗口
3) 收集和检查统计特性数据
按F5使程序运行到结尾。统计数据会在统计特性结果窗口中出现,窗口被分为两个部分。左边窗口显示三列数据,每列的含义为:
? Histogram:用图形的方式来显示该执行单元所用时间百分比。 ? %:用数字显示该执行单元所占用的时间百分比。
? Execution Unit:执行单元,对于C或C十十语言中的函数显示其函数名,对于其它指令或汇编语言显示指令的地址,显示为 PC[xxx]。
从窗口中我们可以看出main()函数用去了总程序时间的约99.94%。用鼠标双击该行,在右边窗口显示该函数的源代码及其行数,且显示各语句所用的时间百分比。结果如图7.16所示:
图7.16 统计特性数据窗口
从窗口中可以看出,内循环占去了92.29%的时间。因此,在编程时若需提高算法的执行效率,可将该段代码用汇编语言重新编写来提高它的效率。 2. 实验要求
记录统计特性数据窗口的结果,分析耗时最多的程序段,指出原因。
实验结果
实验1——运行C程序
实验结果:
优化的实验结果:
结论:选定程序优化选项后,程序运行时间明显减少。
实验2——运行C和汇编混合程序
实验结果:
C语言运行结果:
汇编语言运行结果:
结论:
从图中可以看出原来没有优化的C语言子程序为643,现在改变为汇编语言程序嵌入后为194,从而说明汇编语言执行速度比C语言快多了。
实验3——数据绘图(Plotting)
实验结果:
未执行之前输入(inputs)——蓝色,输出(output)——紫色,时域图:
执行之后输入(inputs)——蓝色,输出(output)——紫色,时域图:
执行之后输入(inputs)——蓝色,输出(output)——紫色,频域图:
实验4——性能统计
实验结果
实验结果如下图所示,从图中可以看出程序loop循环部分耗时最多。原因:loop部分进行了大量的乘法运算因此比较耗费时间。如果想要减少运行时间提高效率 可以用汇编语言来提高函数的效率。
实验5——内存与SDRAM间的一维DMA通信
1. 实验目的
了解DMA通信基本原理,掌握内存与SDRAM间一维DMA通信方式及相关控制方法。
2. 实验原理:
DMA是一种不需要处理器内核干预的数据传输机制,作为一种后台任务执行,即进行DMA传输时,处理器可以处理其它任务。如果使能了DMA中断,那么当数据传输结束后会产生中断信号,表示DMA传输已经完成。
DMA传输方式包括:一维DMA、二维DMA、链式DMA、AutoDMA等,本次实验使用一维DMA方式,即传输存储器中一段连续的数据(地址是相邻接的)。
若要利用DMA传输数据,首先应配置DMA传输控制块(TCB)寄存器。DMA传输的数据具有方向性,即从发送端(源)到接受端(目的),若为外部存储器DMA传输,则需要设置两个TCB参数,一个源TCB,用于描述源数据的地址、大小和每次传输数据的长度等;还有一个目的TCB,用于描述数据传入的目标地址、数据大小及每次传输数据的长度等。若要使能DMA中断,也需要在TCB中设置相应位。若使用链路或AutoDMA通道则只需一个目的TCB。设置好TCB寄存器后,DMA传输自动开始。
TS201S一共14个DMA通道,4个通道(0~3)专用于外部存储器设备,8个通道(4~11)用于链路口,2个通道(12~13)用于自动DMA操作。本次实验使用DMA0通道实现内存与外部存储器SDRAM间的一维DMA通信。
3. 相关寄存器说明:
1〉 TCB寄存器
TCB寄存器是一个128位的四字组寄存器,由DI、DX、DY和DP寄存器组成: a) DI是DMA索引寄存器,包括了将要发送或者接收的数据的源地址或者目的地址,既可以指向内部存储器又可以指向外部存储器,也可指向链路口 b) DX包含了一个16位(高)的计数值和一个16位的修改量,若使能了二维
DMA则该寄存器保存的只是X方向的计数值和修改量
c) DY与DX结合一起使用,保存了Y方向上的16位计数值和16位修改量。如果只进行一维DMA传输,就不需要设置该寄存器。 d) DP寄存器包括了DMA所有控制信息,分为两个主要段
31 22 21 0 链式指针&链标记(用于链式DMA)
DMA控制
对DP寄存器各位功能说明:
位 0~14 15~16 17~21 22 23 24 说明 四字地址(TCB指针) 25~26 链指针选择存储单元 链目的通道 使能链式DMA 28 DMA请求使能 DMA中断使能 29~31 指定DMA设备类型 DMA请求优先级,0=正常优先级,1=高优先级 27 二维DMA使能 操作数据长度:01=32位,10=64位,11=128位 位 说明 2〉中断屏蔽寄存器(IMASK)
IMASK是一个64位寄存器,由IMASKH和IMASKL组成,当IMASK中某位被设置成1的时,那么将响应这个位所对应的中断。
DMA0中断对应在IMASKL中的第14位,所以我们要取消对DMA0中断的屏蔽,使能DMA0中断,可以通过如下指令实现:
xr0=0x4000;; /*0x4000= B 0100 0000 0000 0000 */ IMASKL=xr0;; xr0=0;; IMASKH=0
也可以直接使用如下指令实现,原理是一样的,下面的方法更为直观一些。
xr0=INT_DMA0;; /* INT_DMA0在头文件中的定义的值为0x4000*/ IMASKL=xr0;;
4. 实验例程:
程序说明:
本程序用汇编语言编写,主要由以下几个部分构成:
_Initialize_Bus_SDRAM:实现对总线初始化设置,本实验不予重点讲解,可参考硬件手册; _Fill_Tx_Data:利用循环向rx_daata写入要传输的数据值1~1024;
_Load_DMA0_TCBs:向DMA0通道的TCB寄存器导入设置好的参数,开始DMA传输; _Done:用于观察相关存储器内存储值的变化。
5. 实验步骤
1〉启动程序
运行VisualDSP++进入主程序界面,更改Session为ADSP-TS201S Rev.0.0 Single Processor Simulator。若此时程序自动打开一个(或多个)工程,先将其关闭,通过以下两种方式实现:
3〉编译程序
〉新建工程文件,自定义文件名,然后
将 ..\\Code\\DMA\\DMA1下的DMA1.asm源文件导入工程中的Source Files内;
〉建立链接文件(如下图),一切选项保持默认,完成链接文件建立。
〉选择Project菜单下的Build project 选项进行编译,此时会出现如下错误信息:
含义:声明的程序段/数据段所存放到了不能被执行的位置,导致rx_data没有被分配到相应的存储空间,我们通过修改LDF文件来消除此错误。在左侧的工程窗口中双击相应的LDF文件会出现Expert Linker窗口(如下图),我们会发现sdram0上有红叉
标记,说明此部分有问题。由于TS201S将外部存储器SDRAM地址映射到了0x4000
0000到0x7FFF FFFF之间的四个部分:MSSD0~3,所以我们将DMA1.obj拖拽至其中
之一即可,由于开发板上SDRAM是映射在MSSD0,为方便以后实验,直接拖至MSSD0。
完成上述操作后,重新编译工程。
〉编译成功后,为方便观察存储器内相应地址其内容变化,在__Done处设置断点,将光标移至相应位置,按F9设置。与此同时打开两个存储器观察窗口,选择菜单Memory->TigerSHARC Memory,分别输入tx_data和rx_data,如下图:
〉点击Debug菜单下的RUN选项开始运行(或直接按F5),程序自动运行至_Done后停止,观察tx_data内数据值,然后单步运行程序(F11),观察rx_data内数据变化。
6. 实验要求
1〉按照实验步骤完成实验;
2〉修改程序,DMA每次传输一个字(32位),验证结果;
3〉修改程序,用软环境模拟外部中断来启动DMA传输,并观察传输结果。 提示:实际操作可参考之前实验课件中软模拟Interrupt Timing的设置并且通过修改一些程序。
4〉分析两个程序的原理,简述软环境模拟外部硬件中断的程序流程。
和DMA实验。
3. 相关寄存器说明:
1) TCB寄存器
TCB寄存器是一个128位的四字组寄存器,由DI、DX、DY和DP寄存器组成: DI是DMA索引寄存器,包括了将要发送或者接收的数据的源地址或者目的地址,既可以指向内部存储器又可以指向外部存储器,也可指向链路口
DX包含了一个16位(高)的计数值和一个16位的修改量,若使能了二维DMA则该寄存器保存的只是X方向的计数值和修改量
DY与DX结合一起使用,保存了Y方向上的16位计数值和16位修改量。如果只进行一维DMA传输,就不需要设置该寄存器。
DP寄存器包括了DMA所有控制信息,分为两个主要段
31 22 21 0 链式指针&链标记(用于链式DMA)
DMA控制
对DP寄存器各位功能说明:
位 0~14 15~16 17~21 22 23 24 说明 四字地址(TCB指针) 25~26 链指针选择存储单元 链目的通道 使能链式DMA 28 DMA请求使能 DMA中断使能 29~31 指定DMA设备类型 DMA请求优先级,0=正常优先级,1=高优先级 27 二维DMA使能 操作数据长度:01=32位,10=64位,11=128位 位 说明 2) 中断控制寄存器(INTCTL)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 TMR0R (4) – Timer0运行控制位,设为1则Timer0开始运行;
TMR1R (5) – Timer1运行控制位,设为1则Timer0开始运行;
IRQx_EDGE(0~3) – 外部中断触发类型,0=边沿触发(复位后默认值),1=电平触发;
6~31位保留 =0 。
3) 中断屏蔽寄存器(IMASK)
IMASK是一个64位寄存器,由IMASKH和IMASKL组成,当IMASK中某位被设置成1的时,那么将响应这个位所对应的中断。
IRQ0中断对应在IMASKH中的第9位,所以我们要取消对IRQ0中断的屏蔽,使能IRQ0中断,可以通过如下指令实现:
xr0=0x200;; // 0x200= B 0010 0000 0000 IMASKH=xr0;; xr0=0;; IMASKL=0
也可以直接使用如下指令实现,原理是一样的,下面的方法更为直观一些。
xr0=INT_IRQ0;; //INT_IRQ0在头文件中的定义的值为B0010 0000 0000 IMASKH=xr0;;
4. 实验例程:
程序说明:
本程序用汇编语言编写,主要由以下几个部分构成:
_Initialize_Bus_SDRAM:实现对总线初始化设置,本实验不予重点讲解,可参考硬件手册; _Fill_Tx_Data:利用循环向rx_daata写入要传输的数据值1~1024;
_Wait_For_Interrupt实现功能:等待中断发生,跳至中断程序_IRQ0_ISR执行; _IRQ0_ISR实现功能:外部中断实现DMA传输;
_Load_DMA0_TCBs:向DMA0通道的TCB寄存器导入设置好的参数,启动DMA;
5. 实验步骤
1〉硬件连接
〉检查EZ-KIT板各SW设置是否正确,如下图;
〉用USB将PC与EZ-KIT板连接;
〉连接EZ-KIT板电源线,LED1(POWER)点亮、LED8(RESET)点亮,EZ-KIT板开始自动复位,复位完成后LED8熄灭,LED3点亮(USB MONITOR,注意此LED实际位置在USB上方),则表示EZ-KIT板与PC已经正常连接,可以运行VisualDSP++。 2〉启动程序
运行VisualDSP++进入主程序界面,若当前Session为ADSP-TS201S EZ-KIT Lite Via Debug Agent,则无需更改Session,否则需要更改Session为ADSP-TS201S EZ-KIT Lite Via Debug Agent,操作如下:
也可以通过如下方法直接选择所需要的Session:
运行VisualDSP++时按住Ctrl键,此时不会直接进入主程序界面,而是弹出Session List窗口,双击选择ADSP-TS201S EZ-KIT Lite Via Debug Agent或单击Activate将进入程序主界面。
若此时程序自动打开一个(或多个)工程,先将其关闭,通过以下两种方式实现:
3〉编译程序
〉新建工程文件,自定义文件名,然后
将 ..\\Code\\IRQ-DMA下的IRQ-DMA.asm源文件导入工程中的Source Files内;
〉建立链接文件(如下图),一切选项保持默认,完成链接文件建立。
〉选择Project菜单下的Build project 选项进行编译,若有错误则双击错误处即可找到相应的错误程序行进行修改,直到无错误产生。
〉成功编译后程序会弹出如下一个窗口,我们需要将.dxe文件剪切至DSP A处,如右图,然后确认。注:dxe文件为编译后形成的可执行文件,导入dxe文件实际上就是把相应的可执行文件写入EZ-KIT LITE板中。
〉点击Debug菜单下的RUN选项开始运行(或直接按F5),点击EZ-KIT LITE板上的IRQ_A按键,会看到如下结果。
DMA传输前/后
6. 实验要求
1〉按照实验步骤完成实验;
2〉修改程序,DMA每次传输一个字(32位),验证结果; 3〉简述原程序流程。
实验12 —— 外部中断控制
1. 实验目的
了解外部中断原理、外部中断响应方式及对外部中断的设置。
2. 实验原理:
TS201有4个外部中断输入引脚,IRQ0~IRQ3,用于处理器外部接口对程序的控制。这4个中断源可设置为边沿触发,也可设置为电平触发,通过对SQCTL寄存器编程实现,本实验使用边沿触发。
ADSP—TS201 EZ-KIT LITE板上,DSP A的IRQ0引脚和开关IRQ_A相连,当按下IRQ_A时,IRQ0输入为1,若程序设置了IRQ0中断,则会响应此中断,程序跳转至相应的中断服务程序执行。本实验的中断服务程序将实现点亮LED4和LED6的功能,以表示系统已经对外部中断产生了响应。
3.相关寄存器说明
1〉中断控制寄存器(INTCTL)
15 0 14 0 13 0 12 0 11 0 10 0 0 0 9 0 8 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 TMR0R (4) – Timer0运行控制位,设为1则Timer0开始运行; TMR1R (5) – Timer1运行控制位,设为1则Timer1开始运行;