beautypg.com

Starting with interrupt driven mode – Spectrum Brands MC.31XX User Manual

Page 49

background image

Standard acquisition modes

Programming

(c) Spectrum GmbH

49

Status register

The following shortened excerpt of a sample program gives you an example of how to start the board in classic mode and how to poll for
the SPC_READY flag. It is assumed that all board setup has been done before.

Starting with interrupt driven mode

In contrast to the classic mode, the interrupt mode has no need for polling for the board’s status. Starting your board in the interrupt driven
mode does in the main not differ from the classic mode. But there has to be done some additional programming to prevent the program from
hanging. The SPC_STARTANDWAIT command doesn’t return until the board has stopped. Big advantage of this mode is that it doesn’t waste
any CPU time for polling. The driver is just waiting for an interrupt and the System has full CPU time for other jobs. To benefit from this mode
it is necessary to set up a program with at least two different tasks: One for starting the board and to be blocked waiting for an interrupt. The
other one to make any kind of calculations or display activities.

Command register

If the board is started in the interrupt mode the task calling the start function will not return until the board
has finished. If no trigger event is found or the external clock is not present, this function will wait until the
program is terminated from the taskmanager (Windows) or from another console (Linux).

To prevent the program from this deadlock, a second task must be used which can send the SPC_STOP signal to stop the board. Another
possibility, that does not require the need of a second task is to define a timeout value.

This is the easiest and safest way to use the interrupt driven mode. If the board started in the interrupts mode it definitely will not return until
either the recording has finished or the timeout time has expired. In that case the function will return with an error code. See the appendix
for details.

The following excerpt of a sample program gives you an example of how to start the board in the interrupt driven mode. It is assumed that
all board setup has been done before.

An example on how to get a second task that can do some monitoring on the running task and eventually send the SPC_STOP command can
be found on the Spectrum driver CD that has been shipped with your board. The latest examples can also be down loaded via our website
at http://www.spectrum-instrumentation.com.

Register

Value

Direction

Description

SPC_STATUS

10

r

Status register, of the board.

SPC_RUN

0

Indicates that the board has been started and is waiting for a triggerevent.

SPC_TRIGGER

10

Indicates that the board is running and a triggerevent has been detected.

SPC_READY

20

Indicates, that the board has stopped.

// ----- start the board -----
nErr = SpcSetParam (hDrv, SPC_COMMAND, SPC_START);

// Here you can check for driver errors as mentioned in the relating chapter

// ----- Wait for Status Ready (polling for SPC_READY in a loop) -----
do
{
SpcGetParam (hDrv, SPC_STATUS, &lStatus);
}
while (lStatus != SPC_READY);

printf ("Board has stopped\n");

Register

Value

Direction

Description

SPC_COMMAND

0

r/w

Command register, of the board.

SPC_STARTANDWAIT

11

Starts the board with the current register settings in the interrupt driven mode.

SPC_STOP

20

Stops the board manually.

Register

Value

Direction

Description

SPC_TIMEOUT

295130

r/w

Defines a time in ms after which the function SPC_STARTANDWAIT terminates itself.

SpcSetParam (hDrv, SPC_TIMEOUT, 1000); // Define the timeout to 1000 ms = 1 second
nErr = SpcSetParam (hDrv, SPC_COMMAND, SPC_STARTANDWAIT); // Starts the board in the interrupt driven mode

if (nErr == ERR_TIMEOUT) // Checks for the timeout
printf ("No trigger found. Timeout has expired.\n");