o 三个RTDX通道声明为全局的。第一个输入通道控制音量,第二个输入通道接收主机发送来的信号,输出通道用于从目标板向主机发送的输出信号。(是站在目标板应用程序的角度来称输入和输出信道的,即:输入信道从主机接收数据,输出信道向主机发送数据。)
o 当通道当前不是处于等待输入状态时,调用RTDX_channelBusy函数将返回FALSE,它表明数据已到达可供读取。如第六章所述,调用RTDX_readNB无需等待接收数据就可返回DSP应用程序。主机将数据异步写入控制通道。
o RTDX_Poll用于RTDX下层应用之间的数据读/写的。
o 如果输入通道是使能的,RTDX_read将等待数据的到来。
o 如果输出通道是使能的,RTDX_write将缓冲区的数据写入到输出的RTDX通道中。
o 当目标板通过调用RTDX_enableInput使控制通道control_channel处于使能状态时,则该例程中的其他RTDX通道将处于非使能状态。而下一节描述的主机程序将使能这些通道。使用control_channel的滑动控制被视为应用程序的有机组成部分,在目标程序中使能该通道会使人们在应用程序运行时亦清楚该通道是处于使能状态的;而A2D通道和D2A通道是用于算法测试的。所以这些通道是通过主机应用程序设定为使能状态或非使能状态的。
#include
#include
#include
#include "target.h"
#define BUFSIZE 64
#define MINVOLUME 1
typedef Int sample; /* representation of a data sample from A2D */
/* Global declarations */
sample inp_buffer[ BUFSIZE];
sample out_buffer[ BUFSIZE];
Int volume = MINVOLUME; /* the scaling factor for volume control */
o Test_ON。点击Test_ON按钮时运行该例程。首先,它为输入通道和输出通道创建RTDX接口实例;接着,它打开输入/输出通道并使它们处于使能状态。该例程同时清除图形并启动Transmit_Signal和Receive_Signal的定时器。VB源程序中的全局变量声明把VB应用程序中的通道和hostio.c应用程序中相应通道联系到一起,如下:
' Channel name constants
Const READ_CHANNEL = "D2A_channel"
Const WRITE_CHANNEL = "A2D_channel"
o Test_OFF 该例程废止、关闭和释放Test_ON例程创建的RTDX对象,并使定时器处于非使能状态。
o Transmit_Signal首先,该函数产生正弦波信号并把正弦信号显示在Transmitted Signal图中;然后,它试图使用‘写’方式将数据传送到目标板。
o Receive_Signal 该函数使用ReadSAI2方式从目标板读取数据,并将信号显示在Received Signal图中。
o tmr_MethodDispatch_Timer 该例程调用Transmit_Signal和Receive_Signal函数,该例程在定时器被Test_On例程使能后每隔1ms被调用一次。
15. 现在你可在Massage Log窗口中看到调用LOG_prinft产生的信息“hostio example started”。由于整个程序的运行都是在主函数中进行的,因此你不能更早地看到上述信息。DSP/BIOS和主机在DSP处于idle状态时才进行通信联系。直到应用程序从主函数中返回,DSP才会处于idle状态。所以,如果你想看到运行中DSP/BIOS的影响,你的程序应当在从主函数返回后执行DSP/BIOS的函数。下一节所用的hostio.c的修改版会说明该技术。