Electronics and Software
Engineering Innovation

Chase_da Linux Driver and API Library

T.Barnaby, BEAM Ltd, Version 1.0.1, 2009-05-08


This is a manual describing the Linux driver and API library for the Chase Scientific Company's Arbitrary Waveform Generator DA8150 and DA11000 cards. The DA8150 is a 8-Chan, 12-Bit, 150 MHz (MS/sec) Arbitrary Waveform Generator PCI board. The DA11000 is a single channel, 12-Bit, 1GHz (GS/sec) Arbitrary Waveform Generator PCI board.

The API library and driver allows a user written program to set up the cards to produce a set of arbitrary waveforms. All of the features of the boards are supported.

The driver and API library are available in RPM package form and in tar.gz source code form. They have been tested with the 16 MegaSample DA8150 and the 4 MegaSample DA11000 on RedHat Enterprise 5.3 using the 2.6.18-128.el5PAE kernel and Fedora 8 using the kernel.


There are two RPM packages: "chase_da" containing the API library and examples and "chase_da-driver" containing the kernel driver.

To install the RPM packages simply, as root, use the commands:
rpm -i chase_da-1.0.1-1.el5.i386.rpm
rpm -i chase_da-driver-2.6.18-128.el5PAE-1.0.1-1.el5.i386.rpm

The version numbers may need to be substituted for different package versions as appropriate. Note that the chase_da-driver driver package is for a particular kernel version. You will need to install the appropriate package for the kernel version you are using.

If you are not using a kernel for which there is a binary package available, you can create a new driver binary package from the source rpm by running:
rpmbuild --rebuild chase_da-1.0.1-1.el5.src.rpm

This will build a set of new packages tailored for your system. The final packages will be stored in /usr/src/redhat/RPMS unless you have defined a different directory for RPM builds. Note that you will need the kernel-headers and kernel-devel packages installed to perform this. This action will create a driver for the kernel running on your system. This can now be installed using the following command, substituting the "*" for the kernel and package version numbers:
rpm -i chase_da-driver-*.i386.rpm

The driver will be installed on the next reboot, alternatively the driver can be removed and reloaded with the command:
rmmod chase_da; modprobe chase_da

Installation from TAR archive source

  1. Unpack the tar archive into a suitable directory.
  2. "cd chase_da-1.0.1": Cd to the top level directory.
  3. "make"
  4. "sudo make install"
The driver will be installed on the next reboot, alternatively the driver can be loaded with the command:
modprobe chase_da


The Linux Chase_da API is basically the same as Chase Scientific's Microsoft Windows driver and is documented in the standard Chase manuals. However, the Linux driver and API supports both the DA8150 and DA11000 cards with the same driver and API library rather than with separate drivers and API libraries. All functions have been prefixed with "chase_da_" rather than "da8150_" and "da11000_". Compatibility definitions have been provided to allow usage of the board specific function and data definition names if required.
The Linux version of the API has a "chase_da.h" include file that defines the Segment structure and the API call interface.

There is an additional API function named chase_da_BoardType(). This, given a card number, will return the type of board that is present. The board type definitions are: CHASE_DA8150 and CHASE_DA11000.

The chase_da_CreateSegments() call's ChanNum parameter is a bit mask of all of the channels to set. In the case of the DA11000 this parameter is ignored as there is only a single channel.

There are some examples of programs to create waveforms with the boards in the chase_da_test directory. With an RPM installation these are by default installed in "/usr/share/doc/chase_da-1.0.1".

da8150.pdf Chase DA8150 Data sheet
da8150_manual.pdf Chase DA8150 Manual
da11000.pdf Chase DA11000 Data sheet
da11000_manual.pdf Chase DA11000 Manual


There are 5 simple example programs in the chase_da_test directory. This is installed in the /usr/share/doc/chase_da-1.0.1 directory by default. There is also a Makefile for building the examples there. These examples perform the following functions:

test1.c Generates a simple sine wave with marker pulse
test2.c Generates a sawtooth wave
test3.c Generates a period of a sine wave followed by a period of DC all repeated
test4.c Generates a sine wave after a hardware or software trigger event
test5.c Generates a high frequency sine wave on the DA8150 board

The code for test1.c is given below:
 *    Test1.c            CHASE_DA test code
 *                T.Barnaby,    BEAM Ltd,    2009-04-21
 * This program generates a sinewave waveform on all channels.
 * On a DA8150 the waveform frequency is: 2.34MHz (150/64).
 * On a DA11000 the waveform frequency is: 15.625MHz (1G/64).
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
#include <errno.h>
#include <math.h>
#include <chase_da_lib.h>

int main(){
    int         i;
    int         cardNum = 1;
    int         nPoints = 1*64;
    int         r;
    ChaseDaSegment    segs[1];
    uint16_t    data0[nPoints];   

    i = chase_da_CountCards();
    printf("There are %d Chase_da cards in the system\n", i);   

    printf("Open Card: %d\n", cardNum);
    if(r = chase_da_Open(cardNum)){
        fprintf(stderr, "Error unable to open CHASE_DA: %d\n", r);
        return 1;

    if(chase_da_BoardType(cardNum) == CHASE_DA8150){
        printf("Set Clock to 150MHz\n");
        if(r = chase_da_SetClock(cardNum, 150000000)){
            fprintf(stderr, "Error unable to set clock to 150MHz: %d\n", r);
            return 1;       

    printf("Initialise Segment\n");
    // Create Segment #1
    for(i = 0; i < nPoints; i++){
        data0[i] = (uint16_t)ceil(2047.0 - 2047 * cos(2 * M_PI * i/nPoints));
    segs[0].segmentNum = 0;
    segs[0].data = data0;
    segs[0].numPoints = nPoints;
    segs[0].numLoops = 0;
    segs[0].beginPadValue = 2047;
    segs[0].endPadValue = 2047;
    segs[0].trigEnable = 0;
    segs[0].nextSegNum = 0;   

    printf("Create Segments\n");
    chase_da_CreateSegments(cardNum, 0xFF, 1, segs);

    printf("Set a marker at the start\n");
    chase_da_SetMarkers(cardNum, 64, 0xF, 0xF);

    printf("Start Running\n");
    chase_da_SetTriggerMode(cardNum, CHASE_DA_MODE_RUN, CHASE_DA_TRIG_POS);

//    chase_da_SetTriggerMode(cardNum, CHASE_DA_MODE_TRIGRUN, CHASE_DA_TRIG_POS);
//    chase_da_SetSoftTrigger(cardNum);

    return 0;

Older Libraries

As part of the package, we provide older versions of the DA8150 and DA11000 API libraries. These are based on the Microsoft Windows API library. These are not required for use.


Binary and Source packages:    http://www.beam.ltd.uk/files/opensource/chase_da/packages

Other Information

Release Notes ReleaseNotes.html
Beam Ltd's Web site http://beam.ltd.uk
Chase Scientific Company's web site http://chase2000.com
DA8150 Datasheet http://chase2000.com/da8150/da8150.pdf
DA8150 User Manual http://chase2000.com/da8150/da8150_manual.pdf
DA11000 Datasheet http://chase2000.com/da11000/da11000.pdf
DA11000 User Manual http://chase2000.com/da11000/da11000_manual.pdf