Standard acquisition modes

 

 

Programming

 

 

 

 

 

Status register

 

 

 

 

 

 

 

 

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.

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.

// -----

start the

board

-----SPC_COMMAND,

SPC_START);

 

nErr = SpcSetParam

(hDrv,

 

// 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");

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

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.

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.

Register

Value

Direction

Description

SPC_TIMEOUT

295130

r/w

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

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.

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");

 

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.

(c) Spectrum GmbH

49

Page 49
Image 49
Spectrum Brands MC.31XX manual Starting with interrupt driven mode, Standard acquisition modes Programming, Status register