sis3801.h File Reference

Go to the source code of this file.

Defines

#define HALF_FIFO   16384
#define MAX_FIFO_SIZE   2*HALF_FIFO
#define SIS_FIFO_SIZE   4*HALF_FIFO
#define CSR_READ   0x0
#define CSR_FULL   0xffffffff
#define CSR_WRITE   0x0
#define IS_LED   0x00000001
#define LED_ON   0x00000001
#define LED_OFF   0x00000100
#define GET_MODE   0x0000000C
#define MODE_0   0x00000C00
#define MODE_1   0x00000804
#define MODE_2   0x00000408
#define MODE_3   0x0000000C
#define IS_25MHZ   0x00000010
#define ENABLE_25MHZ   0x00000010
#define DISABLE_25MHZ   0x00001000
#define IS_TEST   0x00000020
#define ENABLE_TEST   0x00000020
#define DISABLE_TEST   0x00002000
#define IS_102LNE   0x00000040
#define ENABLE_102LNE   0x00000040
#define DISABLE_102LNE   0x00000400
#define IS_LNE   0x00000080
#define ENABLE_LNE   0x00000080
#define DISABLE_LNE   0x00000800
#define IS_FIFO_EMPTY   0x00000100
#define IS_FIFO_ALMOST_EMPTY   0x00000200
#define IS_FIFO_HALF_FULL   0x00000400
#define IS_FIFO_FULL   0x00001000
#define IS_REF1   0x00002000
#define IS_NEXT_LOGIC_ENABLE   0x00008000
#define IS_EXTERN_NEXT   0x00010000
#define IS_EXTERN_CLEAR   0x00020000
#define IS_EXTERN_DISABLE   0x00040000
#define IS_SOFT_COUNTING   0x00080000
#define ENABLE_EXTERN_NEXT   0x00010000
#define ENABLE_EXTERN_CLEAR   0x00020000
#define ENABLE_EXTERN_DISABLE   0x00040000
#define SET_SOFT_DISABLE   0x00080000
#define DISABLE_EXTERN_NEXT   0x01000000
#define DISABLE_EXTERN_CLEAR   0x02000000
#define DISABLE_EXTERN_DISABLE   0x04000000
#define CLEAR_SOFT_DISABLE   0x08000000
#define IS_IRQ_EN_CIP   0x00100000
#define IS_IRQ_EN_FULL   0x00200000
#define IS_IRQ_EN_HFULL   0x00400000
#define IS_IRQ_EN_ALFULL   0x00800000
#define IS_IRQ_CIP   0x10000000
#define IS_IRQ_FULL   0x20000000
#define IS_IRQ_HFULL   0x40000000
#define IS_IRQ_ALFULL   0x80000000
#define ENABLE_IRQ_CIP   0x00100000
#define ENABLE_IRQ_FULL   0x00200000
#define ENABLE_IRQ_HFULL   0x00400000
#define ENABLE_IRQ_ALFULL   0x00800000
#define DISABLE_IRQ_CIP   0x10000000
#define DISABLE_IRQ_FULL   0x20000000
#define DISABLE_IRQ_HFULL   0x40000000
#define DISABLE_IRQ_ALFULL   0x80000000
#define VME_IRQ_ENABLE   0x00000800
#define SIS3801_CSR_RW   0x000
#define SIS3801_MODULE_ID_RO   0x004
#define SIS3801_IRQ_REG_RW   0x004
#define SIS3801_COPY_REG_WO   0x00C
#define SIS3801_FIFO_WRITE_WO   0x010
#define SIS3801_FIFO_CLEAR_WO   0x020
#define SIS3801_VME_NEXT_CLK_WO   0x024
#define SIS3801_ENABLE_NEXT_CLK_WO   0x028
#define SIS3801_DISABLE_NEXT_CLK_WO   0x02C
#define SIS3801_ENABLE_REF_CH1_WO   0x050
#define SIS3801_DISABLE_REF_CH1_WO   0x054
#define SIS3801_MODULE_RESET_WO   0x060
#define SIS3801_SINGLE_TST_PULSE_WO   0x068
#define SIS3801_PRESCALE_REG_RW   0x080
#define SIS3801_FIFO_RO   0x100
#define SOURCE_CIP   0
#define SOURCE_FIFO_FULL   1
#define SOURCE_FIFO_HFULL   2
#define SOURCE_FIFO_ALFULL   3
#define SIS3801_VECT_BASE   0x7f

Typedefs

typedef unsigned long int DWORD

Functions

DWORD sis3801_module_ID (MVME_INTERFACE *myvme, DWORD base)
void sis3801_module_reset (MVME_INTERFACE *myvme, DWORD base)
DWORD sis3801_IRQ_REG_read (MVME_INTERFACE *myvme, DWORD base)
DWORD sis3801_IRQ_REG_write (MVME_INTERFACE *myvme, DWORD base, DWORD irq)
DWORD sis3801_module_mode (MVME_INTERFACE *myvme, DWORD base, DWORD mode)
DWORD sis3801_dwell_time (MVME_INTERFACE *myvme, DWORD base, DWORD dwell)
int sis3801_ref1 (MVME_INTERFACE *myvme, DWORD base, DWORD endis)
int sis3801_next_logic (MVME_INTERFACE *myvme, DWORD base, DWORD endis)
void sis3801_channel_enable (MVME_INTERFACE *myvme, DWORD base, DWORD nch)
DWORD sis3801_CSR_read (MVME_INTERFACE *myvme, DWORD base, const DWORD what)
DWORD sis3801_CSR_write (MVME_INTERFACE *myvme, DWORD base, const DWORD what)
void sis3801_FIFO_clear (MVME_INTERFACE *myvme, DWORD base)
int sis3801_HFIFO_read (MVME_INTERFACE *myvme, DWORD base, DWORD *p)
int sis3801_FIFO_flush (MVME_INTERFACE *myvme, DWORD base, DWORD *p)
void sis3801_int_source (MVME_INTERFACE *myvme, DWORD base, DWORD int_source)
void sis3801_int_source_enable (MVME_INTERFACE *myvme, DWORD base, const int intnum)
void sis3801_int_source_disable (MVME_INTERFACE *myvme, DWORD base, const int intnum)
void sis3801_int_clear (MVME_INTERFACE *myvme, DWORD base, const int intnum)
void sis3801_int_attach (MVME_INTERFACE *myvme, DWORD base, DWORD base_vect, int level, void(*isr)(void))
void sis3801_int_detach (MVME_INTERFACE *myvme, DWORD baser, DWORD base_vect, int level)
void sis3801_setup (const MVME_INTERFACE *myvme, DWORD base, int mode, int dsp)
int sis3801_Setup (MVME_INTERFACE *myvme, DWORD base, int mode)
void sis3801_Status (MVME_INTERFACE *myvme, DWORD base)


Define Documentation

#define CLEAR_SOFT_DISABLE   0x08000000

Definition at line 84 of file sis3801.h.

#define CSR_FULL   0xffffffff

Definition at line 42 of file sis3801.h.

Referenced by sis3801_CSR_read(), sis3801_CSR_write(), sis3801_Status(), SIS3803_CSR_read(), sis3803_CSR_read(), and sis3803_CSR_write().

#define CSR_READ   0x0

Definition at line 41 of file sis3801.h.

Referenced by sis3803_CSR_read(), sis3803_input_mode(), and sis3803_ref1().

#define CSR_WRITE   0x0

Definition at line 43 of file sis3801.h.

Referenced by sis3803_CSR_write(), sis3803_input_mode(), sis3803_int_clear(), sis3803_int_source(), sis3803_int_source_disable(), sis3803_int_source_enable(), sis3803_test_disable(), and sis3803_test_enable().

#define DISABLE_102LNE   0x00000400

Definition at line 62 of file sis3801.h.

#define DISABLE_25MHZ   0x00001000

Definition at line 55 of file sis3801.h.

#define DISABLE_EXTERN_CLEAR   0x02000000

Definition at line 82 of file sis3801.h.

#define DISABLE_EXTERN_DISABLE   0x04000000

Definition at line 83 of file sis3801.h.

#define DISABLE_EXTERN_NEXT   0x01000000

Definition at line 81 of file sis3801.h.

#define DISABLE_IRQ_ALFULL   0x80000000

Definition at line 101 of file sis3801.h.

Referenced by sis3801_int_attach(), sis3801_int_clear(), sis3801_int_detach(), sis3801_int_source(), and sis3801_int_source_disable().

#define DISABLE_IRQ_CIP   0x10000000

Definition at line 98 of file sis3801.h.

Referenced by sis3801_int_attach(), sis3801_int_clear(), sis3801_int_detach(), sis3801_int_source(), and sis3801_int_source_disable().

#define DISABLE_IRQ_FULL   0x20000000

Definition at line 99 of file sis3801.h.

Referenced by sis3801_int_attach(), sis3801_int_clear(), sis3801_int_detach(), sis3801_int_source(), and sis3801_int_source_disable().

#define DISABLE_IRQ_HFULL   0x40000000

Definition at line 100 of file sis3801.h.

Referenced by sis3801_int_attach(), sis3801_int_clear(), sis3801_int_detach(), sis3801_int_source(), and sis3801_int_source_disable().

#define DISABLE_LNE   0x00000800

Definition at line 65 of file sis3801.h.

#define DISABLE_TEST   0x00002000

Definition at line 58 of file sis3801.h.

#define ENABLE_102LNE   0x00000040

Definition at line 61 of file sis3801.h.

#define ENABLE_25MHZ   0x00000010

Definition at line 54 of file sis3801.h.

#define ENABLE_EXTERN_CLEAR   0x00020000

Definition at line 78 of file sis3801.h.

#define ENABLE_EXTERN_DISABLE   0x00040000

Definition at line 79 of file sis3801.h.

#define ENABLE_EXTERN_NEXT   0x00010000

Definition at line 77 of file sis3801.h.

#define ENABLE_IRQ_ALFULL   0x00800000

Definition at line 97 of file sis3801.h.

Referenced by sis3801_int_clear(), sis3801_int_source(), and sis3801_int_source_enable().

#define ENABLE_IRQ_CIP   0x00100000

Definition at line 94 of file sis3801.h.

Referenced by sis3801_int_clear(), sis3801_int_source(), and sis3801_int_source_enable().

#define ENABLE_IRQ_FULL   0x00200000

Definition at line 95 of file sis3801.h.

Referenced by sis3801_int_clear(), sis3801_int_source(), and sis3801_int_source_enable().

#define ENABLE_IRQ_HFULL   0x00400000

Definition at line 96 of file sis3801.h.

Referenced by sis3801_int_clear(), sis3801_int_source(), and sis3801_int_source_enable().

#define ENABLE_LNE   0x00000080

Definition at line 64 of file sis3801.h.

#define ENABLE_TEST   0x00000020

Definition at line 57 of file sis3801.h.

#define GET_MODE   0x0000000C

Definition at line 48 of file sis3801.h.

Referenced by sis3801_CSR_read(), sis3801_input_mode(), and sis3803_input_mode().

#define HALF_FIFO   16384

Definition at line 37 of file sis3801.h.

Referenced by sis3801_HFIFO_read().

#define IS_102LNE   0x00000040

Definition at line 60 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_25MHZ   0x00000010

Definition at line 53 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_EXTERN_CLEAR   0x00020000

Definition at line 74 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_EXTERN_DISABLE   0x00040000

Definition at line 75 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_EXTERN_NEXT   0x00010000

Definition at line 73 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_FIFO_ALMOST_EMPTY   0x00000200

Definition at line 67 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_FIFO_EMPTY   0x00000100

Definition at line 66 of file sis3801.h.

Referenced by sis3801_FIFO_flush(), and sis3801_Status().

#define IS_FIFO_FULL   0x00001000

Definition at line 69 of file sis3801.h.

Referenced by sis3801_FIFO_flush(), sis3801_HFIFO_read(), and sis3801_Status().

#define IS_FIFO_HALF_FULL   0x00000400

Definition at line 68 of file sis3801.h.

Referenced by sis3801_HFIFO_read(), and sis3801_Status().

#define IS_IRQ_ALFULL   0x80000000

Definition at line 93 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_CIP   0x10000000

Definition at line 90 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_EN_ALFULL   0x00800000

Definition at line 89 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_EN_CIP   0x00100000

Definition at line 86 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_EN_FULL   0x00200000

Definition at line 87 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_EN_HFULL   0x00400000

Definition at line 88 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_FULL   0x20000000

Definition at line 91 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_IRQ_HFULL   0x40000000

Definition at line 92 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_LED   0x00000001

Definition at line 45 of file sis3801.h.

Referenced by sis3801_Status(), and SIS3803_CSR_read().

#define IS_LNE   0x00000080

Definition at line 63 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_NEXT_LOGIC_ENABLE   0x00008000

Definition at line 72 of file sis3801.h.

Referenced by sis3801_next_logic(), and sis3801_Status().

#define IS_REF1   0x00002000

Definition at line 70 of file sis3801.h.

Referenced by sis3801_ref1(), sis3801_Status(), SIS3803_CSR_read(), and sis3803_ref1().

#define IS_SOFT_COUNTING   0x00080000

Definition at line 76 of file sis3801.h.

Referenced by sis3801_Status().

#define IS_TEST   0x00000020

Definition at line 56 of file sis3801.h.

Referenced by sis3801_Status().

#define LED_OFF   0x00000100

Definition at line 47 of file sis3801.h.

#define LED_ON   0x00000001

Definition at line 46 of file sis3801.h.

#define MAX_FIFO_SIZE   2*HALF_FIFO

Definition at line 39 of file sis3801.h.

Referenced by sis3801_FIFO_flush().

#define MODE_0   0x00000C00

Definition at line 49 of file sis3801.h.

#define MODE_1   0x00000804

Definition at line 50 of file sis3801.h.

#define MODE_2   0x00000408

Definition at line 51 of file sis3801.h.

#define MODE_3   0x0000000C

Definition at line 52 of file sis3801.h.

#define SET_SOFT_DISABLE   0x00080000

Definition at line 80 of file sis3801.h.

#define SIS3801_COPY_REG_WO   0x00C

Definition at line 107 of file sis3801.h.

Referenced by sis3801_channel_enable().

#define SIS3801_CSR_RW   0x000

Definition at line 104 of file sis3801.h.

Referenced by sis3801_CSR_read(), sis3801_CSR_write(), sis3801_input_mode(), sis3801_int_clear(), sis3801_int_source(), sis3801_int_source_disable(), sis3801_int_source_enable(), sis3801_next_logic(), and sis3801_ref1().

#define SIS3801_DISABLE_NEXT_CLK_WO   0x02C

Definition at line 112 of file sis3801.h.

Referenced by sis3801_next_logic().

#define SIS3801_DISABLE_REF_CH1_WO   0x054

Definition at line 114 of file sis3801.h.

Referenced by sis3801_ref1().

#define SIS3801_ENABLE_NEXT_CLK_WO   0x028

Definition at line 111 of file sis3801.h.

Referenced by sis3801_next_logic().

#define SIS3801_ENABLE_REF_CH1_WO   0x050

Definition at line 113 of file sis3801.h.

Referenced by sis3801_ref1().

#define SIS3801_FIFO_CLEAR_WO   0x020

Definition at line 109 of file sis3801.h.

Referenced by sis3801_FIFO_clear().

#define SIS3801_FIFO_RO   0x100

Definition at line 118 of file sis3801.h.

Referenced by sis3801_FIFO_flush(), and sis3801_HFIFO_read().

#define SIS3801_FIFO_WRITE_WO   0x010

Definition at line 108 of file sis3801.h.

#define SIS3801_IRQ_REG_RW   0x004

Definition at line 106 of file sis3801.h.

Referenced by sis3801_int_attach(), sis3801_IRQ_REG_read(), and sis3801_IRQ_REG_write().

#define SIS3801_MODULE_ID_RO   0x004

Definition at line 105 of file sis3801.h.

Referenced by sis3801_module_ID().

#define SIS3801_MODULE_RESET_WO   0x060

Definition at line 115 of file sis3801.h.

Referenced by sis3801_module_reset().

#define SIS3801_PRESCALE_REG_RW   0x080

Definition at line 117 of file sis3801.h.

Referenced by sis3801_dwell_time().

#define SIS3801_SINGLE_TST_PULSE_WO   0x068

Definition at line 116 of file sis3801.h.

#define SIS3801_VECT_BASE   0x7f

Definition at line 125 of file sis3801.h.

#define SIS3801_VME_NEXT_CLK_WO   0x024

Definition at line 110 of file sis3801.h.

#define SIS_FIFO_SIZE   4*HALF_FIFO

Definition at line 40 of file sis3801.h.

#define SOURCE_CIP   0

Definition at line 120 of file sis3801.h.

#define SOURCE_FIFO_ALFULL   3

Definition at line 123 of file sis3801.h.

#define SOURCE_FIFO_FULL   1

Definition at line 121 of file sis3801.h.

#define SOURCE_FIFO_HFULL   2

Definition at line 122 of file sis3801.h.

#define VME_IRQ_ENABLE   0x00000800

Definition at line 102 of file sis3801.h.

Referenced by sis3801_int_attach(), and sis3803_int_attach().


Typedef Documentation

typedef unsigned long int DWORD

Definition at line 31 of file sis3801.h.


Function Documentation

void sis3801_channel_enable ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  nch 
)

Purpose: Enable nch channel for acquistion. blind command! 1..24 or 32

Definition at line 205 of file sis3801.c.

00206 {
00207   int   cmode;
00208 
00209   mvme_get_dmode(mvme, &cmode);
00210   mvme_set_dmode(mvme, MVME_DMODE_D32);
00211 
00212   if (nch > 24) nch = 32;
00213   mvme_write_value(mvme, base + SIS3801_COPY_REG_WO, (1<<nch));
00214   mvme_set_dmode(mvme, cmode);
00215 
00216   return;
00217 }

DWORD sis3801_CSR_read ( MVME_INTERFACE mvme,
DWORD  base,
const DWORD  what 
)

Purpose: Read the CSR and return 1/0 based on what. except for what == CSR_FULL where it returns current CSR

Definition at line 224 of file sis3801.c.

Referenced by sis3801_CSR_write(), sis3801_FIFO_flush(), sis3801_HFIFO_read(), and sis3801_Status().

00225 {
00226   int   cmode;
00227   DWORD csr;
00228 
00229   mvme_get_dmode(mvme, &cmode);
00230   mvme_set_dmode(mvme, MVME_DMODE_D32);
00231 
00232   if (what == CSR_FULL)
00233     {
00234       csr = mvme_read_value(mvme, base + SIS3801_CSR_RW);
00235     } else if (what == GET_MODE) {
00236       csr = mvme_read_value(mvme, base + SIS3801_CSR_RW);
00237       csr = ((csr & what) >> 2);
00238     } else {
00239       csr = mvme_read_value(mvme, base + SIS3801_CSR_RW);
00240       csr = ((csr & what) ? 1 : 0);
00241     }
00242   mvme_set_dmode(mvme, cmode);
00243   return (csr);
00244 }

DWORD sis3801_CSR_write ( MVME_INTERFACE mvme,
DWORD  base,
const DWORD  what 
)

Purpose: Write to the CSR and return CSR_FULL.

Definition at line 250 of file sis3801.c.

00251 {
00252   int   cmode;
00253   int csr;
00254 
00255   mvme_get_dmode(mvme, &cmode);
00256   mvme_set_dmode(mvme, MVME_DMODE_D32);
00257 
00258   mvme_write_value(mvme, base + SIS3801_CSR_RW, what);
00259 
00260   csr =  sis3801_CSR_read(mvme, base, CSR_FULL);
00261 
00262   mvme_set_dmode(mvme, cmode);
00263   return (csr);
00264 }

DWORD sis3801_dwell_time ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  dwell 
)

Purpose: Set dwell time in us DWORD dwell : dwell time in microseconds

Definition at line 128 of file sis3801.c.

00129 {
00130   int   cmode;
00131   DWORD prescale;
00132 
00133   mvme_get_dmode(mvme, &cmode);
00134   mvme_set_dmode(mvme, MVME_DMODE_D32);
00135 
00136   prescale = (10 * dwell ) - 1;
00137   if ((prescale > 0) && (prescale < 2<<24))
00138     mvme_write_value(mvme, base + SIS3801_PRESCALE_REG_RW, prescale);
00139 
00140   prescale = mvme_read_value(mvme, base + SIS3801_PRESCALE_REG_RW);
00141   mvme_set_dmode(mvme, cmode);
00142 
00143   return (prescale);
00144 }

void sis3801_FIFO_clear ( MVME_INTERFACE mvme,
DWORD  base 
)

Purpose: Clear FIFO and logic

Definition at line 270 of file sis3801.c.

00271 {
00272   int   cmode;
00273 
00274   mvme_get_dmode(mvme, &cmode);
00275   mvme_set_dmode(mvme, MVME_DMODE_D32);
00276 
00277   mvme_write_value(mvme, base + SIS3801_FIFO_CLEAR_WO, 0x0);
00278 
00279   mvme_set_dmode(mvme, cmode);
00280   return;
00281 }

int sis3801_FIFO_flush ( MVME_INTERFACE mvme,
DWORD  base,
DWORD pfifo 
)

Purpose: Test and read FIFO until empty This is done using while, if the dwelling time is short relative to the readout time, the pfifo can be overrun. No test on the max read yet! Function value: int : -1 FULL number of words read

Definition at line 323 of file sis3801.c.

00324 {
00325   int cmode, counter=0;
00326 
00327   mvme_get_dmode(mvme, &cmode);
00328   mvme_set_dmode(mvme, MVME_DMODE_D32);
00329 
00330   if (sis3801_CSR_read(mvme, base, IS_FIFO_FULL)) {
00331     mvme_set_dmode(mvme, cmode);
00332     return -1;
00333   }
00334   while ((sis3801_CSR_read(mvme, base, IS_FIFO_EMPTY) == 0) && (counter < MAX_FIFO_SIZE))
00335     {
00336       counter++;
00337       *pfifo++ = mvme_read_value(mvme, base + SIS3801_FIFO_RO);
00338     }
00339 
00340   mvme_set_dmode(mvme, cmode);
00341   return counter;
00342 }

int sis3801_HFIFO_read ( MVME_INTERFACE mvme,
DWORD  base,
DWORD pfifo 
)

Purpose: Reads 32KB (8K DWORD) of the FIFO Function value: int : -1 FULL 0 NOT 1/2 Full number of words read

Definition at line 291 of file sis3801.c.

00292 {
00293   int   i, cmode;
00294 
00295   mvme_get_dmode(mvme, &cmode);
00296   mvme_set_dmode(mvme, MVME_DMODE_D32);
00297 
00298   if (sis3801_CSR_read(mvme, base, IS_FIFO_FULL)) {
00299     mvme_set_dmode(mvme, cmode);
00300     return -1;
00301   }
00302   if (sis3801_CSR_read(mvme, base, IS_FIFO_HALF_FULL) == 0) {
00303     mvme_set_dmode(mvme, cmode);
00304     return 0;
00305   }
00306   for (i=0;i<HALF_FIFO;i++)
00307     *pfifo++ = mvme_read_value(mvme, base + SIS3801_FIFO_RO);
00308 
00309   mvme_set_dmode(mvme, cmode);
00310   return HALF_FIFO;
00311 }

void sis3801_int_attach ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  base_vect,
int  level,
void(*)(void)  isr 
)

Purpose: Book an ISR for a bitwise set of interrupt input (0xff). The interrupt vector is then the VECTOR_BASE+intnum Input: DWORD * base_addr : base address of the sis3801 DWORD base_vect : base vector of the module int level : IRQ level (1..7) DWORD isr_routine : interrupt routine pointer

Definition at line 448 of file sis3801.c.

00449 {
00450   int cmode;
00451 
00452   mvme_get_dmode(mvme, &cmode);
00453   mvme_set_dmode(mvme, MVME_DMODE_D32);
00454 
00455   /* disable all IRQ sources */
00456   sis3801_int_source(mvme, base
00457          , DISABLE_IRQ_CIP | DISABLE_IRQ_FULL
00458          | DISABLE_IRQ_HFULL | DISABLE_IRQ_ALFULL);
00459   if ((level < 8) && (level > 0) && (base_vect < 0x100)) {
00460     mvme_write_value(mvme, base + SIS3801_IRQ_REG_RW, (level << 8) | VME_IRQ_ENABLE | base_vect);
00461     mvme_interrupt_attach(mvme, level, base_vect, (void *)isr, &myinfo);
00462   }
00463   mvme_set_dmode(mvme, cmode);
00464 }

void sis3801_int_clear ( MVME_INTERFACE mvme,
DWORD  base,
const int  intnum 
)

Purpose: Disable the interrupt for the bitwise input intnum (0xff). The interrupt vector is then the VECTOR_BASE+intnum Input: DWORD * base_addr : base address of the sis3801 int * intnum : interrupt number (input 0..3)

Definition at line 494 of file sis3801.c.

00495 {
00496   DWORD int_source;
00497 
00498   switch (intnum)
00499     {
00500     case  0:
00501       int_source = DISABLE_IRQ_CIP;
00502       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00503       int_source = ENABLE_IRQ_CIP;
00504       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00505       break;
00506     case  1:
00507       int_source = DISABLE_IRQ_FULL;
00508       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00509       int_source = ENABLE_IRQ_FULL;
00510       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00511       break;
00512     case  2:
00513       int_source = DISABLE_IRQ_HFULL;
00514       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00515       int_source = ENABLE_IRQ_HFULL;
00516       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00517       break;
00518     case  3:
00519       int_source = DISABLE_IRQ_ALFULL;
00520       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00521       int_source = ENABLE_IRQ_ALFULL;
00522       mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00523       break;
00524     default:
00525       printf("Unknown interrupt source (%d)\n",int_source);
00526     }
00527 
00528   return;
00529 }

void sis3801_int_detach ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  base_vect,
int  level 
)

Purpose: Unbook an ISR for a bitwise set of interrupt input (0xff). The interrupt vector is then the VECTOR_BASE+intnum Input: DWORD * base_addr : base address of the sis3801 DWORD base_vect : base vector of the module int level : IRQ level (1..7)

Definition at line 475 of file sis3801.c.

00476 {
00477 
00478   /* disable all IRQ sources */
00479   sis3801_int_source(mvme, base , DISABLE_IRQ_CIP
00480         | DISABLE_IRQ_FULL | DISABLE_IRQ_HFULL
00481   | DISABLE_IRQ_ALFULL);
00482 
00483   return;
00484 }

void sis3801_int_source ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  int_source 
)

Purpose: Enable the one of the 4 interrupt using the predefined parameters (see sis3801.h) DWORD * intnum : interrupt number (input 0..3)

Definition at line 422 of file sis3801.c.

Referenced by sis3801_int_attach(), and sis3801_int_detach().

00423 {
00424   int cmode;
00425 
00426   mvme_get_dmode(mvme, &cmode);
00427   mvme_set_dmode(mvme, MVME_DMODE_D32);
00428 
00429   int_source &= (ENABLE_IRQ_CIP | ENABLE_IRQ_FULL
00430     | ENABLE_IRQ_HFULL | ENABLE_IRQ_ALFULL
00431     | DISABLE_IRQ_CIP  | DISABLE_IRQ_FULL
00432     | DISABLE_IRQ_HFULL| DISABLE_IRQ_ALFULL);
00433   mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00434 
00435   mvme_set_dmode(mvme, cmode);
00436 }

void sis3801_int_source_disable ( MVME_INTERFACE mvme,
DWORD  base,
const int  intnum 
)

Purpose: Enable the interrupt for the bitwise input intnum (0xff). The interrupt vector is then the VECTOR_BASE

Definition at line 385 of file sis3801.c.

00386 {
00387   int cmode;
00388   DWORD int_source;
00389 
00390   mvme_get_dmode(mvme, &cmode);
00391   mvme_set_dmode(mvme, MVME_DMODE_D32);
00392 
00393   switch (intnum)
00394     {
00395     case  0:
00396       int_source = DISABLE_IRQ_CIP;
00397       break;
00398     case  1:
00399       int_source = DISABLE_IRQ_FULL;
00400       break;
00401     case  2:
00402       int_source = DISABLE_IRQ_HFULL;
00403       break;
00404     case  3:
00405       int_source = DISABLE_IRQ_ALFULL;
00406       break;
00407     default:
00408       printf("Unknown interrupt source (%d)\n",int_source);
00409     }
00410   mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00411 
00412   mvme_set_dmode(mvme, cmode);
00413   return;
00414 }

void sis3801_int_source_enable ( MVME_INTERFACE mvme,
DWORD  base,
const int  intnum 
)

Purpose: Enable the interrupt for the bitwise input intnum (0xff). The interrupt vector is then the VECTOR_BASE

Definition at line 349 of file sis3801.c.

00350 {
00351   int cmode;
00352   DWORD int_source;
00353 
00354   mvme_get_dmode(mvme, &cmode);
00355   mvme_set_dmode(mvme, MVME_DMODE_D32);
00356 
00357   switch (intnum)
00358     {
00359     case  0:
00360       int_source = ENABLE_IRQ_CIP;
00361       break;
00362     case  1:
00363       int_source = ENABLE_IRQ_FULL;
00364       break;
00365     case  2:
00366       int_source = ENABLE_IRQ_HFULL;
00367       break;
00368     case  3:
00369       int_source = ENABLE_IRQ_ALFULL;
00370       break;
00371     default:
00372       printf("Unknown interrupt source (%d)\n",int_source);
00373     }
00374   mvme_write_value(mvme, base + SIS3801_CSR_RW, int_source);
00375 
00376   mvme_set_dmode(mvme, cmode);
00377   return;
00378 }

DWORD sis3801_IRQ_REG_read ( MVME_INTERFACE mvme,
DWORD  base 
)

DWORD : 0xE(1)L(3)V(8)

Definition at line 68 of file sis3801.c.

00069 {
00070   int   cmode, id;
00071   DWORD reg;
00072 
00073   mvme_get_dmode(mvme, &cmode);
00074   mvme_set_dmode(mvme, MVME_DMODE_D32);
00075   id = mvme_read_value(mvme, base + SIS3801_IRQ_REG_RW);
00076   mvme_set_dmode(mvme, cmode);
00077   return (reg & 0xFFF);
00078 }

DWORD sis3801_IRQ_REG_write ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  vector 
)

Purpose: write irq (ELV) to the register and read back DWORD : 0xE(1)L(3)V(8)

Definition at line 86 of file sis3801.c.

00087 {
00088   int   cmode;
00089   DWORD reg;
00090 
00091   mvme_get_dmode(mvme, &cmode);
00092   mvme_set_dmode(mvme, MVME_DMODE_D32);
00093 
00094   mvme_write_value(mvme, base + SIS3801_IRQ_REG_RW, (vector & 0xFF));
00095   reg = mvme_read_value(mvme, base + SIS3801_IRQ_REG_RW);
00096   mvme_set_dmode(mvme, cmode);
00097   return (reg & 0xFFF);
00098 }

DWORD sis3801_module_ID ( MVME_INTERFACE mvme,
DWORD  base 
)

Module ID Purpose: return the Module ID number (I) version (V) IRQ level (L) IRQ vector# (BB) 0xIIIIVLBB

Definition at line 37 of file sis3801.c.

Referenced by sis3801_Status().

00038 {
00039   int   cmode;
00040   DWORD id;
00041 
00042   mvme_get_dmode(mvme, &cmode);
00043   mvme_set_dmode(mvme, MVME_DMODE_D32);
00044   id = mvme_read_value(mvme, base + SIS3801_MODULE_ID_RO);
00045   mvme_set_dmode(mvme, cmode);
00046   return (id);
00047 }

DWORD sis3801_module_mode ( MVME_INTERFACE myvme,
DWORD  base,
DWORD  mode 
)

void sis3801_module_reset ( MVME_INTERFACE myvme,
DWORD  base 
)

Definition at line 52 of file sis3801.c.

00053 {
00054   int   cmode;
00055 
00056   mvme_get_dmode(mvme, &cmode);
00057   mvme_set_dmode(mvme, MVME_DMODE_D32);
00058 
00059   mvme_write_value(mvme, base + SIS3801_MODULE_RESET_WO, 0x0);
00060   mvme_set_dmode(mvme, cmode);
00061   return;
00062 }

int sis3801_next_logic ( MVME_INTERFACE myvme,
DWORD  base,
DWORD  endis 
)

Definition at line 178 of file sis3801.c.

00179 {
00180   int   cmode;
00181   DWORD csr;
00182 
00183   mvme_get_dmode(mvme, &cmode);
00184   mvme_set_dmode(mvme, MVME_DMODE_D32);
00185 
00186   if ((endis == SIS3801_ENABLE_NEXT_CLK_WO) || (endis == SIS3801_DISABLE_NEXT_CLK_WO))
00187     {
00188       mvme_write_value(mvme, base + endis, 0x0);
00189     }
00190   else
00191     printf("sis3801_next_logic: unknown command %d\n",endis);
00192 
00193   /* read back the status */
00194   csr = mvme_read_value(mvme, base + SIS3801_CSR_RW);
00195   mvme_set_dmode(mvme, cmode);
00196 
00197   return ((csr & IS_NEXT_LOGIC_ENABLE) ? 1 : 0);
00198 }

int sis3801_ref1 ( MVME_INTERFACE mvme,
DWORD  base,
DWORD  endis 
)

Purpose: Enable/Disable Reference on Channel 1 DWORD endis : action either ENABLE_REF_CH1 DISABLE_REF_CH1

Definition at line 152 of file sis3801.c.

00153 {
00154   int   cmode;
00155   DWORD csr;
00156 
00157   mvme_get_dmode(mvme, &cmode);
00158   mvme_set_dmode(mvme, MVME_DMODE_D32);
00159 
00160   if ((endis == SIS3801_ENABLE_REF_CH1_WO) || (endis == SIS3801_DISABLE_REF_CH1_WO))
00161     {
00162       mvme_write_value(mvme, base + endis, 0x0);
00163     }
00164   else
00165     printf("sis3801_ref1: unknown command %d\n",endis);
00166 
00167   /* read back the status */
00168   csr = mvme_read_value(mvme, base + SIS3801_CSR_RW);
00169   mvme_set_dmode(mvme, cmode);
00170 
00171   return ((csr & IS_REF1) ? 1 : 0);
00172 
00173 }

int sis3801_Setup ( MVME_INTERFACE mvme,
DWORD  base,
int  mode 
)

Sets all the necessary parameters for a given configuration. The configuration is provided by the mode argument. Add your own configuration in the case statement. Let me know your setting if you want to include it in the distribution.

Parameters:
*mvme VME structure
base Module base address
mode Configuration mode number
*nentry number of entries requested and returned.
Returns:
MVME_SUCCESS

Definition at line 544 of file sis3801.c.

00545 {
00546   int  cmode;
00547 
00548   mvme_get_dmode(mvme, &cmode);
00549   mvme_set_dmode(mvme, MVME_DMODE_D32);
00550 
00551   switch (mode) {
00552   case 0x1:
00553     printf("Default setting after power up (mode:%d)\n", mode);
00554     printf("...\n");
00555     printf("...\n");
00556     break;
00557   case 0x2:
00558     break;
00559   default:
00560     printf("Unknown setup mode\n");
00561     mvme_set_dmode(mvme, cmode);
00562     return -1;
00563   }
00564 
00565   mvme_set_dmode(mvme, cmode);
00566   return 0;
00567 }

void sis3801_setup ( const MVME_INTERFACE myvme,
DWORD  base,
int  mode,
int  dsp 
)

void sis3801_Status ( MVME_INTERFACE myvme,
DWORD  base 
)

Definition at line 572 of file sis3801.c.

00573 {
00574   DWORD csr;
00575 
00576   csr = sis3801_CSR_read(mvme, base, CSR_FULL);
00577 
00578   printf("Module Version   : %d\t", ((sis3801_module_ID (mvme, base) & 0xf000) >> 12));
00579   printf("Module ID        : %4.4x\t", (sis3801_module_ID (mvme, base) >> 16));
00580   printf("CSR contents     : 0x%8.8x\n", csr);
00581   printf("LED              : %s \t",(csr &     IS_LED) ? "Y" : "N");
00582   printf("FIFO test mode   : %s \t",(csr &        0x2) ? "Y" : "N");
00583   printf("Input mode       : %d \n",sis3801_input_mode(mvme, base, 2));
00584   printf("25MHz test pulse : %s \t",(csr &   IS_25MHZ) ? "Y" : "N");
00585   printf("Input test mode  : %s \t",(csr &    IS_TEST) ? "Y" : "N");
00586   printf("10MHz to LNE     : %s \t",(csr &  IS_102LNE) ? "Y" : "N");
00587   printf("LNE prescale     : %s \n",(csr &     IS_LNE) ? "Y" : "N");
00588   printf("Reference pulse 1: %s \t",(csr &    IS_REF1) ? "Y" : "N");
00589   printf("Next Logic       : %s \n",(csr & IS_NEXT_LOGIC_ENABLE) ? "Y" : "N");
00590   printf("FIFO empty       : %s \t",(csr & IS_FIFO_EMPTY ) ? "Y" : "N");
00591   printf("FIFO almost empty: %s \t",(csr & IS_FIFO_ALMOST_EMPTY) ? "Y" : "N");
00592   printf("FIFO half full   : %s \t",(csr & IS_FIFO_HALF_FULL) ? "Y" : "N");
00593   printf("FIFO full        : %s \n",(csr & IS_FIFO_FULL) ? "Y" : "N");
00594   printf("External next    : %s \t",(csr & IS_EXTERN_NEXT) ? "Y" : "N");
00595   printf("External clear   : %s \t",(csr & IS_EXTERN_CLEAR) ? "Y" : "N");
00596   printf("External disable : %s \t",(csr & IS_EXTERN_DISABLE) ? "Y" : "N");
00597   printf("Software couting : %s \n",(csr & IS_SOFT_COUNTING) ? "N" : "Y");
00598   printf("IRQ enable CIP   : %s \t",(csr & IS_IRQ_EN_CIP) ? "Y" : "N");
00599   printf("IRQ enable FULL  : %s \t",(csr & IS_IRQ_EN_FULL) ? "Y" : "N");
00600   printf("IRQ enable HFULL : %s \t",(csr & IS_IRQ_EN_HFULL) ? "Y" : "N");
00601   printf("IRQ enable ALFULL: %s \n",(csr & IS_IRQ_EN_ALFULL) ? "Y" : "N");
00602   printf("IRQ CIP          : %s \t",(csr & IS_IRQ_CIP) ? "Y" : "N");
00603   printf("IRQ FIFO full    : %s \t",(csr & IS_IRQ_FULL) ? "Y" : "N");
00604   printf("IRQ FIFO 1/2 full: %s \t",(csr & IS_IRQ_HFULL) ? "Y" : "N");
00605   printf("IRQ FIFO almost F: %s \n",(csr & IS_IRQ_ALFULL) ? "Y" : "N");
00606   printf("internal VME IRQ : %s \t",(csr &  0x4000000) ? "Y" : "N");
00607   printf("VME IRQ          : %s \n",(csr &  0x8000000) ? "Y" : "N");
00608 }


Midas DOC Version 3.0.0 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Sergio Ballestrero - Suzannah Daviel - Doxygen - Peter Green - Qing Gu - Greg Hackman - Gertjan Hofman - Paul Knowles - Exaos Lee - Rudi Meier - Glenn Moloney - Dave Morris - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Tamsen Schurman - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk