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 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_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 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 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 |
#define IS_102LNE 0x00000040 |
#define IS_25MHZ 0x00000010 |
#define IS_EXTERN_CLEAR 0x00020000 |
#define IS_EXTERN_DISABLE 0x00040000 |
#define IS_EXTERN_NEXT 0x00010000 |
#define IS_FIFO_ALMOST_EMPTY 0x00000200 |
#define IS_FIFO_EMPTY 0x00000100 |
#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 |
#define IS_IRQ_ALFULL 0x80000000 |
#define IS_IRQ_CIP 0x10000000 |
#define IS_IRQ_EN_ALFULL 0x00800000 |
#define IS_IRQ_EN_CIP 0x00100000 |
#define IS_IRQ_EN_FULL 0x00200000 |
#define IS_IRQ_EN_HFULL 0x00400000 |
#define IS_IRQ_FULL 0x20000000 |
#define IS_IRQ_HFULL 0x40000000 |
#define IS_LED 0x00000001 |
#define IS_LNE 0x00000080 |
#define IS_NEXT_LOGIC_ENABLE 0x00008000 |
#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 |
#define IS_TEST 0x00000020 |
#define MAX_FIFO_SIZE 2*HALF_FIFO |
#define SIS3801_COPY_REG_WO 0x00C |
#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 |
#define SIS3801_DISABLE_REF_CH1_WO 0x054 |
#define SIS3801_ENABLE_NEXT_CLK_WO 0x028 |
#define SIS3801_ENABLE_REF_CH1_WO 0x050 |
#define SIS3801_FIFO_CLEAR_WO 0x020 |
#define SIS3801_FIFO_RO 0x100 |
Definition at line 118 of file sis3801.h.
Referenced by sis3801_FIFO_flush(), and sis3801_HFIFO_read().
#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 |
#define SIS3801_MODULE_RESET_WO 0x060 |
#define SIS3801_PRESCALE_REG_RW 0x080 |
#define VME_IRQ_ENABLE 0x00000800 |
Definition at line 102 of file sis3801.h.
Referenced by sis3801_int_attach(), and sis3803_int_attach().
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.
*mvme | VME structure | |
base | Module base address | |
mode | Configuration mode number | |
*nentry | number of entries requested and returned. |
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 }