Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 186 | f9daq | 1 | #include <ansi_c.h> |
| 2 | //#include <stdlib.h> |
||
| 3 | //#include <stdio.h> |
||
| 4 | #include "CAENV814.h" |
||
| 5 | #include "CAENV814_DEF.h" |
||
| 6 | #include "wienvme_dll.h" |
||
| 7 | |||
| 8 | static unsigned int ModuleAddress[10]; |
||
| 9 | |||
| 10 | static unsigned short m_OutputMaskEcl; |
||
| 11 | static unsigned short m_OutputMaskLevel; |
||
| 12 | static unsigned short m_InputMaskLevel; |
||
| 13 | int V814_map (int ModuleNumber, |
||
| 14 | unsigned long ModuleOffset, int print) |
||
| 15 | { |
||
| 16 | unsigned short vsr, mmt, fix; |
||
| 17 | |||
| 18 | ModuleAddress[ModuleNumber] = ModuleOffset; |
||
| 19 | VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV814_FIX, &fix); |
||
| 20 | VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV814_MMT, &mmt); |
||
| 21 | VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV814_VSR, &vsr); |
||
| 22 | if (print) { |
||
| 23 | printf("CAEN V814 fixed code = 0x%04x\n", fix); |
||
| 24 | printf("CAEN V814 manufacturer number = %i\n", MANUFACTURER(mmt)); |
||
| 25 | printf("CAEN V814 module type = %i\n", MODULE_TYPE(mmt)); |
||
| 26 | printf("CAEN V814 version = %i\n", VERSION(vsr)); |
||
| 27 | printf("CAEN V814 serial no. = %i\n", SERIAL(vsr)); |
||
| 28 | } |
||
| 29 | if ((fix != CAEN_FIX_CODE) || (mmt != CAENV814_MMT_VALUE)) return -1; |
||
| 30 | return 0; |
||
| 31 | } |
||
| 32 | |||
| 33 | int V814_init (int ModuleNumber, unsigned int threshold, unsigned int width, unsigned int mask) |
||
| 34 | { |
||
| 35 | int ch; |
||
| 36 | V814_SetWidth( ModuleNumber, width); |
||
| 37 | |||
| 38 | for ( ch=0;ch<16;ch++) V814_SetThreshold(ModuleNumber, ch, threshold); |
||
| 39 | V814_SetEnable( ModuleNumber, mask); |
||
| 40 | V814_SetMajority( ModuleNumber, 0); |
||
| 41 | //printf("V814_init : value of threshold =%d\n", threshold); |
||
| 42 | //printf("V814_init : value of output width=%d\n", width); |
||
| 43 | //printf("V814_init : channels enabled mask=%04x\n", mask); |
||
| 44 | |||
| 45 | return 0; |
||
| 46 | } |
||
| 47 | |||
| 48 | |||
| 49 | |||
| 50 | int V814_SetThreshold(int ModuleNumber, unsigned long channel, unsigned short threshold) |
||
| 51 | { |
||
| 52 | VME_A24D16_W(ModuleAddress[ModuleNumber] + channel* 0x2,&threshold); |
||
| 53 | return 0; |
||
| 54 | } |
||
| 55 | |||
| 56 | int V814_SetEnable(int ModuleNumber, unsigned short mask) |
||
| 57 | { |
||
| 58 | VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV814_INH,&mask); |
||
| 59 | return 0; |
||
| 60 | } |
||
| 61 | |||
| 62 | |||
| 63 | int V814_SetWidth(int ModuleNumber, unsigned short wdt) |
||
| 64 | { |
||
| 65 | VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV814_WDT0,&wdt); |
||
| 66 | VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV814_WDT1,&wdt); |
||
| 67 | return 0; |
||
| 68 | } |
||
| 69 | |||
| 70 | int V814_SetMajority(int ModuleNumber, unsigned short majlev) |
||
| 71 | { |
||
| 72 | unsigned short maj=(int)((majlev*50.-25.)/4.); |
||
| 73 | VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV814_MAJ,&maj); |
||
| 74 | return 0; |
||
| 75 | } |
||
| 76 | |||
| 77 | int V814_TestPulse(int ModuleNumber) |
||
| 78 | { |
||
| 79 | unsigned short maj=0; |
||
| 80 | VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV814_TST,&maj); |
||
| 81 | return 0; |
||
| 82 | } |
||
| 83 | |||
| 84 |