Files

700 lines
29 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//Author: LabJack
//April 8, 2016
//Header for U3 example helper functions.
//
//History
//-added easy functions
//-added I2C function and LJTDAC functions and structure (09/04/2007)
//-fixed memory leak in ehFeedback and I2C functions (09/27/2007)
//-fixed some bugs in "easy" functions (09/27/2007)
//-added U3-LV/HV support (04/07/2008)
//-fixed bug in eAIN for positive channel 30 - temp sensor (04/25/2008)
//-Modified calibration constants structs. Modified the names and code of the
// functions that apply the calibration constants. (06/25/2009)
//-Replaced LJUSB_BulkWrite/Read with LJUSB_write/Read calls. Added serial
// number support to openUSBConnection. (12/27/2011)
//-Updated functions to have C bindings. (04/08/2016)
#ifndef U3_H_
#define U3_H_
#include <sys/time.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "labjackusb.h"
#ifdef __cplusplus
extern "C"{
#endif
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
//Structure for storing calibration constants
struct U3_CALIBRATION_INFORMATION {
uint8 prodID;
double hardwareVersion; //helps to determine which calibration calculations
//to use
int highVoltage; //indicates if the device is U3-HV
double ccConstants[20];
/*
Calibration constants order
0 - LV AIN SE Slope
1 - LV AIN SE Offset
2 - LV AIN Diff Slope
3 - LV AIN Diff Offset
4 - DAC0 Slope
5 - DAC0 Offset
6 - DAC1 Slope
7 - DAC1 Offset
8 - Temp Slope
9 - Vref @Cal
10 - Vref*1.5 @Cal
11 - Vreg @Cal
12 - HV AIN0 Slope
13 - HV AIN1 Slope
14 - HV AIN2 Slope
15 - HV AIN3 Slope
16 - HV AIN0 Offset
17 - HV AIN1 Offset
18 - HV AIN2 Offset
19 - HV AIN3 Offset
*/
};
typedef struct U3_CALIBRATION_INFORMATION u3CalibrationInfo;
//Structure for storing LJTDAC calibration constants
struct U3_TDAC_CALIBRATION_INFORMATION {
uint8 prodID;
double ccConstants[4];
/*
DAC Calibration constants order
0 - SlopeA;
1 - OffsetA;
2 - SlopeB;
3 - OffsetB;
*/
};
typedef struct U3_TDAC_CALIBRATION_INFORMATION u3TdacCalibrationInfo;
/* Functions */
void normalChecksum( uint8 *b,
int n);
//Adds checksum to a data packet for normal command format.
//b = data packet for normal command
//n = size of data packet
void extendedChecksum( uint8 *b,
int n);
//Adds checksum to a data packet for extended command format.
//b = data packet for extended command
//n = size of data packet
uint8 normalChecksum8( uint8 *b,
int n);
//Returns the Checksum8 for a normal command data packet.
//b = data packet for normal command
//n = size of data packet
uint16 extendedChecksum16( uint8 *b,
int n);
//Returns the Checksum16 for a extended command data packet.
//b = data packet for extended command
//n = size of data packet
uint8 extendedChecksum8( uint8 *b);
//Returns the Checksum8 for a extended command data packet.
//b = data packet for extended command
HANDLE openUSBConnection( int localID);
//Opens a U3 connection over USB. Returns NULL on failure, or a HANDLE on
//success.
//localID = the local ID or serial number of the U3 you want to open
void closeUSBConnection( HANDLE hDevice);
//Closes a HANDLE to a U3 device.
long getTickCount( void);
//Returns the number of milliseconds that has elasped since the system was
//started.
long getCalibrationInfo( HANDLE hDevice,
u3CalibrationInfo *caliInfo);
//Gets calibration information from memory blocks 0-4 of a U3. Returns the
//calibration information in a calibrationInfo structure.
//hDevice = handle to a U3 device
//caliInfo = structure where calibrarion information will be stored
long getTdacCalibrationInfo( HANDLE hDevice,
u3TdacCalibrationInfo *caliInfo,
uint8 DIOAPinNum);
//Gets calibration information from the EEPROM of a LJTick-DAC (LJTDAC).
//Returns the calibration information in a u3TdacCalibrationInfo structure.
//hDevice = handle to a U3 device
//caliInfo = structure where LJTDAC calibration information will be stored
//DIOAPinNum = The U3 digital IO line where the LJTDAC DIOA pin is connected.
// The DIOB pin is assumed to be the next digital IO line.
double FPuint8ArrayToFPDouble( uint8 *buffer,
int startIndex);
//Converts a fixed point byte array (starting a startIndex) to a floating point
//double value. This function is used primarily by getCalibrationInfo.
long isCalibrationInfoValid(u3CalibrationInfo *caliInfo);
//Performs a simple check to determine if the caliInfo struct was set up by
//getCalibrationInfo. Returns 0 if caliInfo is not valid, or 1 if it is.
//caliInfo = structure where calibrarion information is stored
long isTdacCalibrationInfoValid(u3TdacCalibrationInfo *caliInfo);
//Performs a simple check to determine if the caliInfo struct was set up by
//getLJTDACCalibrationInfo. Returns 0 if caliInfo is not valid, or 1 if it is.
//caliInfo = structure where LJTDAC calibration information is stored
long getAinVoltCalibrated( u3CalibrationInfo *caliInfo,
int dac1Enabled,
uint8 negChannel,
uint16 bytesVolt,
double *analogVolt);
//Translates the binary AIN reading from the U3, to a voltage value
//(calibrated) in Volts. Call getCalibrationInfo first to set up caliInfo.
//Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20 and 1.21. Function will also
//work for hardware version 1.30 U3-LV, but not U3-HV.
//caliInfo = structure where calibrarion information is stored
//dac1Enabled = If this is nonzero (True), then it is indicated that DAC1 is
// enabled and analog voltage will be calculated with Vreg. If
// this is 0 (False), then it is indicated that DAC1 is disabled
// and the analog voltage will be calculated with the AIN slopes
// and offsets.
//negChannel = the negative channel of the differential analog reading
//bytesVolt = the 2 byte voltage that will be converted
//analogVolt = the converted analog voltage
long getAinVoltCalibrated_hw130( u3CalibrationInfo *caliInfo,
uint8 positiveChannel,
uint8 negChannel,
uint16 bytesVolt,
double *analogVolt);
//Translates the binary AIN reading from the U3, to a voltage value
//(calibrated) in Volts. Call getCalibrationInfo first to set up caliInfo.
//Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.30 (U3-LV/HV).
//caliInfo = structure where calibrarion information is stored
//positiveChannel = the positive channel of the differential analog reading
//negChannel = the negative channel of the differential analog reading
//bytesVolt = the 2 byte voltage that will be converted
//analogVolt = the converted analog voltage
long getDacBinVoltCalibrated( u3CalibrationInfo *caliInfo,
int dacNumber,
double analogVolt,
uint8 *bytesVolt);
//Translates a analog output voltage value (Volts) to a binary 8 bit value
//(calibrated) that can be sent to a U3. Call getCalibrationInfo first to set
//up caliInfo. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20, 1.21 and 1.30, and does the
//same thing as the analogToCalibratedBinary8BitVoltage function.
//caliInfo = structure where calibrarion information is stored
//DACNumber - channel number of the DAC
//analogVolt = the analog voltage that will be converted
//bytesVolt = the converted binary 8 bit value
long getDacBinVoltCalibrated8Bit( u3CalibrationInfo *caliInfo,
int dacNumber,
double analogVolt,
uint8 *bytesVolt8);
//Translates a analog output voltage value (Volts) to a binary 8 bit value
//(calibrated) that can be sent to a U3. Call getCalibrationInfo first to set
//up caliInfo. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20, 1.21 and 1.30.
//caliInfo = structure where calibrarion information is stored
//dacNumber - channel number of the DAC
//analogVolt = the analog voltage that will be converted
//bytesVolt8 = the converted binary 8 bit value
long getDacBinVoltCalibrated16Bit( u3CalibrationInfo *caliInfo,
int dacNumber,
double analogVolt,
uint16 *bytesVolt16);
//Translates a analog output voltage value (Volts) to a binary 16 bit value
//(calibrated) that can be sent to a U3. Call getCalibrationInfo first to set
//up caliInfo. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.30 (U3-LV/HV).
//caliInfo = structure where calibrarion information is stored
//dacNumber - channel number of the DAC
//analogVolt = the analog voltage that will be converted
//bytesVolt16 = the converted binary 16 bit value
long getTdacBinVoltCalibrated( u3TdacCalibrationInfo *caliInfo,
int dacNumber,
double analogVolt,
uint16 *bytesVolt);
//Translates a voltage value (Volts) to binary analog input bytes (calibrated)
//that can be sent to a LJTick-DAC (LJTDAC). Call getTdacCalibrationInfo
//first to set up caliInfo. Returns -1 on error, 0 on success.
//caliInfo = structure where LJTDAC calibrarion information is stored
//dacNumber - channel number of the DAC (0 = DACA, 1 = DACB)
//analogVolt = the analog voltage that will be converted
//bytesVolt = the converted 2 byte voltage
long getTempKCalibrated( u3CalibrationInfo *caliInfo,
uint32 bytesTemp,
double *kelvinTemp);
//Translates the binary reading from the U3, to a temperature value
//(calibrated) in Kelvins. Call getCalibrationInfo first to set up caliInfo.
//Returns -1 on error, 0 on success.
//caliInfo = structure where calibrarion information is stored
//bytesTemp = the 2 byte binary temperature that will be converted
//kelvinTemp = the converted Kelvin temperature
long getAinVoltUncalibrated( int dac1Enabled,
uint8 negChannel,
uint16 bytesVolt,
double *analogVolt);
//Translates the binary AIN reading from the U3, to a voltage value
//(uncalibrated) in Volts. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20 and 1.21.
//dac1Enabled = If this is nonzero (True), then it is indicated that DAC1 is
// enabled and analog voltage will be calculated with Vreg. If
// this is 0 (False), then it is indicated that DAC1 is disabled
// and the analog voltage will be calculated with the AIN slopes
// and offsets.
//negChannel = the negative channel of the differential analog reading
//bytesVolt = the 2 byte voltage that will be converted
//analogVolt = the converted analog voltage
long getAinVoltUncalibrated_hw130( int highVoltage,
uint8 positiveChannel,
uint8 negChannel,
uint16 bytesVolt,
double *analogVolt);
//Translates the binary AIN reading from the U3, to a voltage value
//(uncalibrated) in Volts. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.30 (U3-LV/HV).
//highVoltage = Set to 1 to indicate that U3-HV calculations should be used
// for the binary to voltage conversion, otherwise U3-LV voltage
// calculations will be used.
//positiveChannel = the positive channel of the differential analog reading
//negChannel = the negative channel of the differential analog reading
//bytesVolt = the 2 byte voltage that will be converted
//analogVolt = the converted analog voltage
long getDacBinVoltUncalibrated( int dacNumber,
double analogVolt,
uint8 *bytesVolt);
//Translates a DAC voltage value (Volts) to a binary 8 bit value (uncalibrated)
//that can be sent to a U3. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20 and 1.21, and does the same
//thing as the analogToUncalibratedBinary8BitVoltage function.
//dacNumber - channel number of the DAC
//analogVolt = the analog voltage that will be converted
//bytesVolt = the converted binary 8 bit value
long getDacBinVoltUncalibrated8Bit( int dacNumber,
double analogVolt,
uint8 *bytesVolt8);
//Translates a DAC voltage value (Volts) to a binary 8 bit value (uncalibrated)
//that can be sent to a U3. Returns -1 on error, 0 on success.
//This function is for U3 hardware versions 1.20 and 1.21.
//dacNumber - channel number of the DAC
//analogVoltage = the analog voltage that will be converted
//bytesVoltage = the converted binary 8 bit value
long getDacBinVoltUncalibrated16Bit( int dacNumber,
double analogVolt,
uint16 *bytesVolt16);
//Translates a DAC voltage value (Volts) to a binary 16 bit value
//(uncalibrated) that can be sent to a U3-LV/HV. Returns -1 on error, 0 on
//success.
//This function is for U3 hardware versions 1.30 (U3-LV/HV).
//dacNumber - channel number of the DAC
//analogVoltage = the analog voltage that will be converted
//bytesVoltage = the converted binary 16 bit value
long getTempKUncalibrated( uint16 bytesTemp,
double *kelvinTemp);
//Translates the binary analog bytes read from the U3, to a temperature value
//(uncalibrated) in Kelvins. Call getCalibrationInfo first to set up caliInfo.
//Returns -1 on error, 0 on success.
//bytesTemp = the 2 byte binary temperature that will be converted
//kelvinTemp = the converted Kelvin temperature
long I2C( HANDLE hDevice,
uint8 I2COptions,
uint8 SpeedAdjust,
uint8 SDAPinNum,
uint8 SCLPinNum,
uint8 Address,
uint8 NumI2CBytesToSend,
uint8 NumI2CBytesToReceive,
uint8 *I2CBytesCommand,
uint8 *Errorcode,
uint8 *AckArray,
uint8 *I2CBytesResponse);
//This function will perform the I2C low-level function call. Please refer to
//section 5.3.19 of the U3 User's Guide for parameter documentation. Returns
//-1 on error, 0 on success.
//hDevice = handle to a U3 device
//I2COptions = byte 6 of the command
//SpeedAdjust = byte 7 of the command
//SDAPinNum = byte 8 of the command
//SCLPinNum = byte 9 of the command
//Address = byte 10 of the command
//NumI2CBytesToSend = byte 12 of the command
//NumI2CBytesToReceive = byte 13 of the command
//*I2CBytesCommand = Array that holds bytes 14 and above of the command. Needs
// to be at least NumI2CBytesToSend elements in size.
//*Errorcode = returns byte 6 of the response
//*AckArray = Array that returns bytes 8 - 11 of the response. Needs to be at
// least 4 elements in size.
//*I2CBytesResponse = Array that returns bytes 12 and above of the response.
// Needs to be at least NumI2CBytesToReceive elements in
// size.
/* Easy Functions (Similar to the easy functions in the Windows UD driver) */
long eAIN( HANDLE Handle,
u3CalibrationInfo *CalibrationInfo,
long ConfigIO,
long *DAC1Enable,
long ChannelP,
long ChannelN,
double *Voltage,
long Range,
long Resolution,
long Settling,
long Binary,
long Reserved1,
long Reserved2);
//An "easy" function that returns a reading from one analog input. This
//function does not automatically configure the specified channels as analog
//input, unless ConfigIO is set as True. Returns 0 for no error, or -1 or >0
//value (low-level errorcode) on error.
//Call getCalibrationInfo first to set up CalibrationInfo.
//Handle = Handle to a U3 device.
//CalibrationInfo = Structure where calibration information is stored.
//ConfigIO = If this is nonzero (True), then 1 or 2 ConfigIO low-level function
// calls will be made in addition to the 1 Feedback call to set the
// specified Channels to analog inputs. If this is 0 (False), then
// only a Feedback low-level call will be made, and an error will be
// returned if the specified Channels are not already set to analog
// inputs.
//DAC1Enable = This parameter helps to determine the appropriate equation to
// use when calculating Voltage. If the long variable that is
// being pointed to is nonzero (True), then it is indicated that
// DAC1 is enabled. If it is 0 (False), then it is indicated that
// DAC1 is disabled. For both case, if ConfigIO is set to True,
// then input value will be ignored and the output value will be
// set to the current DAC1Enable value in the ConfigIO low-level
// response.
//ChannelP = The positive AIN channel to acquire.
//ChannelN = The negative AIN channel to acquire. For single-ended channels on
// the U3, this parameter should be 31 (see Section 2.6.1).
//Voltage = Returns the analog input reading, which is generally a voltage.
//Range = Ignored on the U3.
//Resolution = Pass a nonzero value to enable QuickSample.
//Settling = Pass a nonzero value to enable LongSettling.
//Binary = If this is nonzero (True), the Voltage parameter will return the raw
// binary value.
//Reserved (1&2) = Pass 0.
long eDAC( HANDLE Handle,
u3CalibrationInfo *CalibrationInfo,
long ConfigIO,
long Channel,
double Voltage,
long Binary,
long Reserved1,
long Reserved2);
//An "easy" function that writes a value to one analog output. This function
//does not automatically enable the specified analog output, unless ConfigIO is
//set as True. Returns 0 for no error, or -1 or >0 value (low-level errorcode)
//on error.
//Call getCalibrationInfo first to set up CalibrationInfo.
//Handle = Handle to a U3 device.
//CalibrationInfo = structure where calibrarion information is stored
//ConfigIO = If this is nonzero (True) and Channel is 1, then 1 ConfigIO
// low-level function call will be made in addition to the 1 Feedback
// call to enable DAC1. If this is 0 (False), then only a Feedback
// low-level call will be made, and an error will be returned if DAC1
// is not already enabled.
//Channel = The analog output channel to write to.
//Voltage = The voltage to write to the analog output.
//Binary = If this is nonzero (True), the value passed for Voltage should be
// binary.
//Reserved (1&2) = Pass 0.
long eDI( HANDLE Handle,
long ConfigIO,
long Channel,
long *State);
//An "easy" function that reads the state of one digital input. This function
//does not automatically configure the specified channel as digital, unless
//ConfigIO is set as True. Returns 0 for no error, or -1 or >0 value
//(low-level errorcode) on error.
//Handle = Handle to a U3 device.
//ConfigIO = If this is nonzero (True), then 2 ConfigIO low-level functions
// calls will be made in addition to the 1 Feedback call to set
// Channel as digital. If this is 0 (False), then only a Feedback
// low-level call will be made, and an error will be returned if
// Channel is not already set as digital.
//Channel = The channel to read. 0-19 corresponds to FIO0-CIO3.
// For U3 hardware versions 1.30, HV model, Channel needs to be 4-19,
//State = Returns the state of the digital input. 0=False=Low and 1=True=High.
long eDO( HANDLE Handle,
long ConfigIO,
long Channel,
long State);
//An "easy" function that writes the state of one digital output. This
//function does not automatically configure the specified channel as digital,
//unless ConfigIO is set as True. Returns 0 for no error, or -1 or >0 value
//(low-level errorcode) on error.
//Handle = Handle to a U3 device.
//ConfigIO = If this is nonzero (True), then 2 ConfigIO low-level functions
// calls will be made in addition to the 1 Feedback call to set
// Channel as digital. If this is 0 (False), then only a Feedback
// low-level call will be made, and an error will be returned if
// Channel is not already set as digital.
//Channel = The channel to write to. 0-19 corresponds to FIO0-CIO3.
// For U3 hardware versions 1.30, HV model, Channel needs to be 4-19,
//State = The state to write to the digital output. 0=False=Low and
// 1=True=High.
long eTCConfig( HANDLE Handle,
long *aEnableTimers,
long *aEnableCounters,
long TCPinOffset,
long TimerClockBaseIndex,
long TimerClockDivisor,
long *aTimerModes,
double *aTimerValues,
long Reserved1,
long Reserved2);
//An "easy" function that configures and initializes all the timers and
//counters. When needed, this function automatically configures the needed
//lines as digital. Returns 0 for no error, or -1 or >0 value (low-level
//errorcode) on error.
//Handle = Handle to a U3 device.
//aEnableTimers = An array where each element specifies whether that timer is
// enabled. Timers must be enabled in order starting from 0, so
// for instance, Timer1 cannot be enabled without enabling Timer
// 0 also. A nonzero for an array element specifies to enable
// that timer. For the U3, this array must always have at least
// 2 elements.
//aEnableCounters = An array where each element specifies whether that counter
// is enabled. Counters do not have to be enabled in order
// starting from 0, so Counter1 can be enabled when Counter0
// is disabled. A nonzero value for an array element
// specifies to enable that counter. For the U3, this array
// must always have at least 2 elements.
//TCPinOffset = Value from 0-8 specifies where to start assigning timers and
// counters.
// For U3 hardware version 1.30 (LV/HV), the value needs to be 4-8.
//TimerClockBaseIndex = Pass a constant to set the timer base clock. The
// default is LJ_tc48MHZ.
//TimerClockDivisor = Pass a divisor from 0-255 where 0 is a divisor of 256.
//aTimerModes = An array where each element is a constant specifying the mode
// for that timer. For the U3, this array must always have at
// least 2 elements.
//aTimerValues = An array where each element specifies the initial value for
// that timer. For the U3, this array must always have at least
// 2 elements.
//Reserved (1&2) = Pass 0.
long eTCValues( HANDLE Handle,
long *aReadTimers,
long *aUpdateResetTimers,
long *aReadCounters,
long *aResetCounters,
double *aTimerValues,
double *aCounterValues,
long Reserved1,
long Reserved2);
//An "easy" function that updates and reads all the timers and counters.
//Returns 0 for no error, or -1 or >0 value (low-level errorcode) on error.
//Handle = Handle to a U3 device.
//aReadTimers = An array where each element specifies whether to read that
// timer. A nonzero value for an array element specifies to read
// that timer. For the U3, this array must always have at least 2
// elements.
//aUpdateResetTimers = An array where each element specifies whether to
// update/reset that timers. A nonzero value for an array
// element specifies to update/reset that timer. For the
// U3, this array must always have at least 2 elements.
//aReadCounters = An array where each element specifies whether to read that
// counter. A nonzero value for an array element specifies to
// read that counter. For the U3, this array must always have
// at least 2 elements.
//aResetCounters = An array where each element specifies whether to reset that
// counter. A nonzero value for an array element specifies to
// reset that counter. For the U3, this array must always have
// at least 2 elements.
//aTimerValues = Input: An array where each element is the new value for that
// timer. Each value is only updated if the appropriate element
// is set in the aUpdateResetTimers array.
// Output: An array where each element is the value read from
// that timer if the appropriate element is set in the
// aReadTimers array. If the timer mode set for the timer is
// Quadrature Input, the value needs to be converted from an
// unsigned 32-bit integer to a signed 32-bit integer (2s
// complement). For the U3, this array must always have at least
// 2 elements.
//aCounterValues = An array where each element is the value read from that
// counter if the appropriate element is set in the aReadTimers
// array. For the U3, this array must always have at least 2
// elements.
//Reserved (1&2) = Pass 0.
/* Easy Function Helpers */
long ehConfigIO( HANDLE hDevice,
uint8 inWriteMask,
uint8 inTimerCounterConfig,
uint8 inDAC1Enable,
uint8 inFIOAnalog,
uint8 inEIOAnalog,
uint8 *outTimerCounterConfig,
uint8 *outDAC1Enable,
uint8 *outFIOAnalog,
uint8 *outEIOAnalog);
//Used by the eAIN, eDAC, eDI, eDO and eTCConfig easy functions. This function
//takes the ConfigIO low-level command and response bytes (not including
//checksum and command bytes) as its parameter and performs a ConfigIO call
//with the U3. Returns -1 or errorcode (>1 value) on error, 0 on success.
long ehConfigTimerClock( HANDLE hDevice,
uint8 inTimerClockConfig,
uint8 inTimerClockDivisor,
uint8 *outTimerClockConfig,
uint8 *outTimerClockDivisor);
//Used by the eTCConfig easy function. This function takes the
//ConfigTimerClock low-level command and response bytes (not including checksum
//and command bytes) as its parameter and performs a ConfigTimerClock call with
//the U3. Returns -1 or errorcode (>1 value) on error, 0 on success.
long ehFeedback( HANDLE hDevice,
uint8 *inIOTypesDataBuff,
long inIOTypesDataSize,
uint8 *outErrorcode,
uint8 *outErrorFrame,
uint8 *outDataBuff,
long outDataSize);
//Used by the all of the easy functions. This function takes the Feedback
//low-level command and response bytes (not including checksum and command
//bytes) as its parameter and performs a Feedback call with the U3. Returns -1
//or errorcode (>1 value) on error, 0 on success.
/* Easy function constants */
/* Timer clocks for Hardware Version 1.20 or lower */
// 2 MHz
#define LJ_tc2MHZ 10
// 6 MHz
#define LJ_tc6MHZ 11
// 24 MHz
#define LJ_tc24MHZ 12
// 500/Divisor KHz
#define LJ_tc500KHZ_DIV 13
// 2/Divisor MHz
#define LJ_tc2MHZ_DIV 14
// 6/Divisor MHz
#define LJ_tc6MHZ_DIV 15
// 24/Divisor MHz
#define LJ_tc24MHZ_DIV 16
/* Timer clocks for Hardware Version 1.21 or higher */
// 4 MHz
#define LJ_tc4MHZ 20
// 12 MHz
#define LJ_tc12MHZ 21
// 48 MHz
#define LJ_tc48MHZ 22
// 1/Divisor MHz
#define LJ_tc1MHZ_DIV 23
// 4/Divisor MHz
#define LJ_tc4MHZ_DIV 24
// 12/Divisor MHz
#define LJ_tc12MHZ_DIV 25
// 48/Divisor MHz
#define LJ_tc48MHZ_DIV 26
/* Timer modes */
// 16 bit PWM
#define LJ_tmPWM16 0
// 8 bit PWM
#define LJ_tmPWM8 1
// 32-bit rising to rising edge measurement
#define LJ_tmRISINGEDGES32 2
// 32-bit falling to falling edge measurement
#define LJ_tmFALLINGEDGES32 3
// duty cycle measurement
#define LJ_tmDUTYCYCLE 4
// firmware based rising edge counter
#define LJ_tmFIRMCOUNTER 5
// firmware counter with debounce
#define LJ_tmFIRMCOUNTERDEBOUNCE 6
// frequency output
#define LJ_tmFREQOUT 7
// Quadrature
#define LJ_tmQUAD 8
// stops another timer after n pulses
#define LJ_tmTIMERSTOP 9
// read lower 32-bits of system timer
#define LJ_tmSYSTIMERLOW 10
// read upper 32-bits of system timer
#define LJ_tmSYSTIMERHIGH 11
// 16-bit rising to rising edge measurement
#define LJ_tmRISINGEDGES16 12
// 16-bit falling to falling edge measurement
#define LJ_tmFALLINGEDGES16 13
#ifdef __cplusplus
}
#endif
#endif