DSP集成开发环境CCS开发指南部分10精.docx
- 文档编号:26276192
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:12
- 大小:118.29KB
DSP集成开发环境CCS开发指南部分10精.docx
《DSP集成开发环境CCS开发指南部分10精.docx》由会员分享,可在线阅读,更多相关《DSP集成开发环境CCS开发指南部分10精.docx(12页珍藏版)》请在冰豆网上搜索。
DSP集成开发环境CCS开发指南部分10精
第六章实时分析
16.使用LoadControl窗口逐渐增加处理load值。
(如果在DSP应用程序停止工
作的情况下滑动LoadControl窗口的控制条,则RTDX将新的load控制值缓存在主机上。
这些值直到DSP应用程序重新运行、并调用RTDX_readNB以请求从主机刷新load值时才会有影响)。
17.重复步骤16,直到loadchange_PRD中的Max和Average值增加并在Execution
Graph的Assertion行出现蓝色方块,Assertion表明一个线程不满足实时期限的要求。
为什么?
当load值超过某个值时,loadchange_PRD的Max值开始增加,随着load值的增加,processing_SWI需要占用的运行时间长得致使loadchange_PRD在超过实时期限很长时间才能开始运行。
当load值增加到一定程度时,低优先级的idle循环就不再执行,主机
停止接收实时分析数据,DSP/BIOS插件停止刷新,暂停目标程序用排队数据
刷新插件。
82
第六章实时分析
6.5修改软中断优先级
为了便于理解程序为什么不满足实时期限的要求,你需要检查软中断任务的优先级。
1.选择Debug→Halt中止目标程序。
2.在ProjectView中双击文件volume.cdb。
3.加亮SWImanager,注意SWI对象的优先级显示在
窗口的右半部分。
4.由于PRD_swi和processing_SWI具有相同的优先级,PRD_swi不能先处理
processing_SWI。
processing_SWI每10ms运行一次而PRD_swi每2ms运行一次。
当load值较高时,processing_SWI运行时间超过2ms,它使得PRD_swi不满足实时期限的要求。
5.为了解决上述问题,需要把PRD_swi设置成最高优
先级。
降低processing_SWI的优先级。
这增加了一
个第二级的优先级别,现在PRD_swi具有最高优先
级。
6.选择File→Save保存你所作的修改。
7.选择File→Close关闭volume.cdb。
8.选择Project→Build或者点击工具栏按钮(IncrementalBuild)
9.选择File→ReloadProgram。
10.选择Debug→Run重新运行目标程序。
在程序运行时使用RTDX使能的Windows
应用程序loadctrl.exe应用程序窗口改变load值。
11.注意:
现在可增加load值而不会使PRD_swi不满足实时期限的要求。
12.在进行下一章之前(完成6.6节之后),需要完成下述操作:
o点击工具栏按钮或者按Shift+F5中止程序运行。
o关闭GEL对话框、DSP/BIOS插件和源程序窗口。
83
第六章实时分析
6.6进一步探索
为了进一步研究DSP/BIOS,试做下述工作:
o当增加load值时,ExecutionGraph表明processing_SWI需要的运行时间超过1个PRD计数周期。
这是否意味着processing_SWI不满足实时期限的要求?
请回忆一下,PRDticks以每毫秒为时间间隔出现的同时,processing_SWI必须每10ms运行一次。
o如果直接从硬中断服务例程中调用processing函数而不是从软中断中调用,那将发生什么呢?
由于硬中断优先级低于软中断优先级,那将使得程序不满足实时期限的要求。
请回忆一下,当Load值很高时,PRD_swi需要先于processing_SWI执行。
如果processing_SWI是一个硬中断,PRD_swi则不能先于它执行。
o观察CPULoadGraph。
使用RTAControlPanel打开和关闭统计累积器,注意这对CPULoadGraph无影响,这表明统计累器在处理器上放置了一个很小的Load值。
统计累积器对processing_SWI的统计数据有多大影响呢?
可一边打开和关闭统计累积器,一边观察统计数据,这之间的差别是各累计器所需的指令数的精确计量。
为了观察效果,记住对统计数据窗口点击鼠标右键并清除统计计数。
o就象在5.7节中所做的那样,在loadchange函数中增加函数STS_set和STS_delta调用。
这样的修改对CPUload影响如何?
在dataIO函数中增加STS_set和STS_delta的调用,这又将对CPULoad有何影响?
为什么?
试考虑各函数执行时的频率。
对于经常执行的函数而言,它需要的处理时间的细微的增加,都可能对CPULoad造成很大的影响。
6.7进一步学习
想要更多地了解软中断属性、RTDX和PRD模块,请参见CCS和RTDX的在线帮助或者参考TMS320C54xDSP/BIOSUser’sGuide(用户指南)。
84
第七章I/O
第七章I/O
本章介绍用DSP/BIOS和RTDX技术实现I/O。
在本章中,将采用RTDX和DSP/BIOS使应用程序与I/O设备相连接。
也可以采用DSP/BIOSAPI的HST、PIP和SWI模块。
基本要求:
DSP/BIOS和RTDX组件,目标板
7.1打开和查看工程
在CCS中打开工程文件并查看它包含的源程序及库文件。
如果你把CCS安装在c:
\ti目录,可以创建一个新目录c:
\ti\myproject;如果CCS安装在其他目录,则可在相应的位置建立myproject目录。
将c:
\ti\c5400\tutorial\hostio1下的所有文件拷贝到新目录下。
从Windows开始菜单中,选择Program→Code
ComposerStudio’C5400→CCStudio。
选择Project→Open并打开hostio.mak。
依次点击Project、HOSTIO.MAK、Source旁的’+’,
可以看到工程文件中包含的各种文件。
hostiocfg.cmd及include中的头文件是在保存
配置文件时创建的。
本例程需要的文件有:
ohostio.c主程序
osignalprog.exeVB应用程序,它产生正弦
波并显示输入/输出信号
o
o
o
oslider.exeVB应用程序,它控制输出信号幅度hostiocfg.cmd连接命令文件,它仅增加了名为trace的LOG对象hostiocfg.s54汇编源文件hostiocfg.h54头文件1.2.3.4.5.
85
第七章I/O
7.2查看源程序
本章中的例子模拟一个能数字化音频信号、调整音量、产生幅度可调的模拟输出的DSP应用程序。
为简单起见,该例没有使用收、发模拟信号的设备,而是使用主机产生的数字信号测试算法。
数据的输入/输出及音量控制信号是采用RTDX在主机和目标板之间传送的。
在主机上运行的VB应用程序使用RTDX产生输入信号并显示输入/输出信号,该程序允许开发者不中止程序运行即进行算法测试。
1.双击ProjectView中的hostio.c源程序。
2.注意源程序的下述方面:
o三个RTDX通道声明为全局的。
第一个输入通道控制音量,第二个输入通道接收主机发送来的信号,输出通道用于从目标板向主机发送的输出信号。
(是站在目标板应用程序的角度来称输入和输出信道的,即:
输入信道从主机接收数据,输出信道向主机发送数据。
)
o当通道当前不是处于等待输入状态时,调用RTDX_channelBusy函数将返回FALSE,它表明数据已到达可供读取。
如第六章所述,调用RTDX_readNB无需等待接收数据就可返回DSP应用程序。
主机将数据异步写入控制通道。
oRTDX_Poll用于RTDX下层应用之间的数据读/写的。
o如果输入通道是使能的,RTDX_read将等待数据的到来。
o如果输出通道是使能的,RTDX_write将缓冲区的数据写入到输出的RTDX通道中。
o当目标板通过调用RTDX_enableInput使控制通道control_channel处于使能状态时,则该例程中的其他RTDX通道将处于非使能状态。
而下一节描述的主机程序将使能这些通道。
使用control_channel的滑动控制被视为应用程序的有机组成部分,在目标程序中使能该通道会使人们在应用程序运行时亦清楚该通道是处于使能状态的;而A2D通道和D2A通道是用于算法测试的。
所以这些通道是通过主机应用程序设定为使能状态或非使能状态的。
#include
#include
#include
86
第七章I/O
#include"target.h"
#defineBUFSIZE64
#defineMINVOLUME1
typedefIntsample;/*representationofadatasamplefromA2D*//*Globaldeclarations*/
sampleinp_buffer[BUFSIZE];
sampleout_buffer[BUFSIZE];
Intvolume=MINVOLUME;/*thescalingfactorforvolumecontrol*//*RTDXchannels*/
RTDX_CreateInputChannel(control_channel);
RTDX_CreateInputChannel(A2D_channel);
RTDX_CreateOutputChannel(D2A_channel);
/*ObjectscreatedbytheConfigurationTool*/
externLOG_Objtrace;
/*
*========main========
*/
Voidmain()
{
sample*input=inp_buffer;
sample*output=out_buffer;
Unssize=BUFSIZE;
TARGET_INITIALIZE();/*EnableRTDXinterrupt*/
LOG_printf(&trace,"hostioexamplestarted");
/*enablevolumecontrolinputchannel*/
RTDX_enableInput(&control_channel);
ConnectingtoI/ODeviceswhile(TRUE){
/*Readanewvolumewhenthehostssendit*/
if(!
RTDX_channelBusy(&control_channel)){
RTDX_readNB(&control_channel,&volume,sizeof(volume));
}
while(!
RTDX_isInputEnabled(&A2D_channel)){
RTDX_Poll();/*pollcommchannelforinput*/
}
87
第七章I/O
/*
*A2D:
getdigitizedinput(getsignalfromthehostthrough*RTDX).IfA2D_channelisenabled,readdatafromthehost.*/
RTDX_read(&A2D_channel,input,size*sizeof(sample));
/*
*VectorScale:
Scaletheinputsignalbythevolumefactorto*producetheoutputsignal.
*/
while(size--){
*output++=*input++*volume;
}
size=BUFSIZE;
input=inp_buffer;
output=out_buffer;
/*
*D2A:
produceanalogoutput(sendsignaltothehostthrough*RTDX).IfD2A_channelisenabled,writedatatothehost.*/
RTDX_write(&D2A_channel,output,size*sizeof(sample));while(RTDX_writing){
RTDX_Poll();/*pollcommchannelforoutput*/
}
}
}
88
第七章I/O
7.3Signalprog应用程序
VB编制的应用程序signalprog.exe的源程序可用于文件signalfrm.frm。
有关该应用程序的详细说明可见文件signalprog.pdf。
可查看几个对该例而言很重要的例程和函数:
oTest_ON。
点击Test_ON按钮时运行该例程。
首先,它为输入通道和输出通道创建RTDX接口实例;接着,它打开输入/输出通道并使它们处于使能状态。
该例程同时清除图形并启动Transmit_Signal和Receive_Signal的定时器。
VB源程序中的全局变量声明把VB应用程序中的通道和hostio.c应用程序中相应通道联系到一起,如下:
'Channelnameconstants
ConstREAD_CHANNEL="D2A_channel"
ConstWRITE_CHANNEL="A2D_channel"
oTest_OFF该例程废止、关闭和释放Test_ON例程创建的RTDX对象,并使定时器处于非使能状态。
oTransmit_Signal首先,该函数产生正弦波信号并把正弦信号显示在TransmittedSignal图中;然后,它试图使用‘写’方式将数据传送到目标板。
oReceive_Signal该函数使用ReadSAI2方式从目标板读取数据,并将信号显示在ReceivedSignal图中。
otmr_MethodDispatch_Timer该例程调用Transmit_Signal和Receive_Signal函数,该例程在定时器被Test_On例程使能后每隔1ms被调用一次。
89
第七章I/O
7.4运行应用程序
1.
2.
3.
4.
5.
6.
7.
8.点击工具栏按钮或选择Project→Build。
选择File→LoadProgram并双击hostio.out。
选择Tools→RTDX。
选择窗口中RTDX区域的Configure,在RTDX属性对话框的GeneralSettings中选择ContinuousRTDX模式并点击OK。
将RTDX域的RTDXDisable改为RTDXEnable,此时按钮Configure变为Diagnostics。
选择Tools→DSP/BIOS→MessageLog。
在MessageLog区域点击鼠标右键并从弹出菜单中选择PropertyPage,选择名为trace的Log对象并点击OK。
点击工具栏按钮或选择Debug→Run。
使用Windows浏览器,运行signalprog.exe和slider.exe,你可以看到两
个VB应用程序。
由于slider.exe应用程序将创建和打开RTDX控制通道,因此它必须在RTDX使能以后运行,否则它不能打开控制通道。
Signalprog应用程序只有在点击TestOn按钮后才使用到RTDX,因此它可以在任何时候运行。
调整signalprog窗口高度。
9.
10.在signalprog窗口中的点击TestON,这就启动了输入/输出通道。
11.滑动VolumeSlider窗口的控制钮,这将改变输出信号幅度,观察Received
Signal图中信号幅度的变化。
注:
VolumeSlider
初始化设置
90
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 集成 开发 环境 CCS 指南 部分 10
![提示](https://static.bdocx.com/images/bang_tan.gif)