/*****************************************************
Copyright Don Bradley, 1991.
Permission is granted for used of these routines
in any manner as long as this copyright notice is
included.
Tested using Quick C 2.5 and MSC 6.0 on a
Toshiba T5200.
*****************************************************/
#define TRUE 1
#define FALSE 0
#define LM_BASE 0x02c0
#define LM_ID 0x4e69
#define DAC0_DATA (LM_BASE + 0x00)
#define DAC1_DATA (LM_BASE + 0x02)
#define PRODUCT (LM_BASE + 0x02)
#define VERSION (LM_BASE + 0x03)
#define BRD_ENABLE (LM_BASE + 0x04)
#define IRQ_CONTROL (LM_BASE + 0x05)
#define IRQ_STATUS (LM_BASE + 0x05)
#define TIMER_DATA (LM_BASE + 0x06)
#define TIMER_CONTROL (LM_BASE + 0x08)
#define ADC_VIRTCHAN (LM_BASE + 0x09)
#define ADC_CHN_GAIN_ARRAY (LM_BASE + 0x0a)
#define DIG_OUT (LM_BASE + 0x0b)
#define DIG_IN (LM_BASE + 0x0b)
#define DIG_EXP (LM_BASE + 0x0c)
#define ADC_DATA (LM_BASE + 0x0c)
#define ADC_LASTCHAN (LM_BASE + 0x0d)
#define ADC_CONTROL (LM_BASE + 0x0e)
#define ADC_STATUS (LM_BASE + 0x0e)
#define DAC_CONTROL (LM_BASE + 0x0f)
#define DAC_STATUS (LM_BASE + 0x0f)
/* MASK defines */
/* ADC defines */
#define ADC_FIFO_ENABLE 0x80
#define ADC_FIFO_DISABLE 0x00
#define ADC_SINGLE_ENDED 0x00
#define ADC_DIFFERENTIAL 0x40
#define ADC_GAIN_1 0x00
#define ADC_GAIN_2 0x40
#define ADC_GAIN_4 0x80
#define ADC_GAIN_8 0xc0
#define ADC_GAIN_10 0x40
#define ADC_GAIN_100 0x80
#define ADC_GAIN_1000 0xc0
#define ADC_BANK_0 0x00
#define ADC_BANK_1 0x10
#define ADC_BANK_2 0x20
#define ADC_BANK_3 0x30
#define MAX_CHANNELS 16
#define NON_ADC_VALUE 0x8000
#define ADC_DMA_BUFFER_LEN 0x1000
#define ADC_FIFO_SAMPLE_READY 0x40
/* TIMER defines */
#define TIMER_DIVISOR 10
// 4MHz
#define TIMER_F1 4000000L
// 250KHz
#define TIMER_F2 (TIMER_F1/TIMER_DIVISOR)
// 15.625KHz
#define TIMER_F3 (TIMER_F2/TIMER_DIVISOR)
// 976.5625Hz
#define TIMER_F4 (TIMER_F3/TIMER_DIVISOR)
// 61.03516Hz
#define TIMER_F5 (TIMER_F4/TIMER_DIVISOR)
/* LabMasterAD function prototypes */
/* labmastr.c */
int LabMasterAD_Enable(void);
int LabMasterAD_Disable(void);
int LabMasterAD_Product(void);
int LabMasterAD_Version(void);
void timer_reset(void);
void timer0_off(void);
void timer0_on(void);
void timer5_off(void);
void timer5_on(void);
double timer0_setup(double freq);
void dig_out(int chan, int value);
int dig_in(int chan);
void outpwd(unsigned int port, unsigned int value);
int inpwd(unsigned int port);
/* timerad.c */
double timerad(double freq);
void step_timerad(void);
/* adcdma.c */
int init_adc_dma(unsigned int num_chn,
long num_samples, double *freq, int dma_chn,
void (*procfunc)(int));
void get_next_adc_values(void);
void terminate_adc_dma(void);
void clr_adc_dma_buffer(void);
int adc_dma_done(void);
long adc_dma_conversion_count(void);
/* adc.c */
int get_adc(unsigned int chn);
void disable_adc(void);
void enable_adc(void);
int adc_status(void);
/* End of File */