<< Chapter < Page | Chapter >> Page > |
More information about the RTDX module and the commands that can be used with it are in the TMS320 DSP/BIOS User's Guide (spru423) and the TMS320C5000 DSP/BIOS API Reference Guide (spru404) .
The following example shows a simple C program that will echo received data back through the output channel. This files assumes that the
main.c
file has declared and enabled the input and output channels. The project file and all the necessary files are available from
v:/ece420/55x/block_rtdx
. MATLAB GUI files that are made to interface with this project are
rtdx_text.m and
rtdx_echotext.m .
#include "dsk5510_dual3006cfg.h"
#include "dsk5510.h"
#include "swi_process.h"
#include "dsplib.h"
#include "rtdx.h" // Include file for rtdx functionality
extern RTDX_input_channel ichan; //ichan has been declared in main.c
extern RTDX_output_channel ochan; //ochan has been declared in main.c
int recvd;
int sentNew = 0 ;
// all data processing should be done in SWI_ProcessBuffer
void SWI_ProcessBuffer()
{
static unsigned int mbox_value = 0;
short *psrc, *pdest;
mbox_value |= SWI_getmbox();
// buffers are only processed when both transmit and receive are ready
if((mbox_value & DMA_RECEIVE_DONE) && (mbox_value & DMA_TRANSMIT_DONE)) {
mbox_value = 0;
// get buffer pointers
psrc = receive_buffer[receive_buffer_to_process_index];
pdest = transmit_buffer[transmit_buffer_to_fill_index];
if (!RTDX_channelBusy(&ichan)) { // read only when not busy
RTDX_readNB(&ichan, &recvd, sizeof(recvd));
sentNew = 1;
}
if (sentNew == 1) { // echo back when data has been received
RTDX_write(&ochan, &recvd, sizeof(recvd));
sentNew = 0;
}
receive_buffer_processed = 1; // flag receive buffer as processed
transmit_buffer_filled = 1; // flag output buffer as full
}
}
MATLAB can be used to access the data coming from the DSP board. A simple typing/echo GUI for the block_rtdx project has been provided. An interface can also be programmed in Visual Basic. The setup and transfer/receive commands for Matlab will be described below.
Before accessing the DSP board, it must be initialized through MATLAB. This is done
with this code:
h = actxserver('RTDX');
which sets the port with all necessary parameters. The port is still not open for writing. To open the port, specify the name of the channel you would like to open in the command:
invoke(h,'Open','ichan','W');
To write to
the buffer, you invoke h with a 'Write' parameter and the data to send.
invoke(h,'Write',int16(v));
In this case, v was a char and we wanted to send the ASCII value. (There is a limitation to the ASCII converter in Matlab: it does not take all possible key presses.) Multiple channels can be opened in this manner. When there are multiple channels open, the write will be to the most recently opened channel.
Before finishing a function, or before executing a read, the port should be closed.
The port is closed with the command:
invoke(h,'Close');
Notification Switch
Would you like to follow the 'Digital signal processing laboratory (ece 420 55x)' conversation and receive update notifications?