Blame |
Last modification |
View Log
| RSS feed
#include <ansi_c.h>
//#include <stdlib.h>
//#include <stdio.h>
#include "CAENV814.h"
#include "CAENV814_DEF.h"
#include "wienvme_dll.h"
static unsigned int ModuleAddress
[10];
static unsigned short m_OutputMaskEcl
;
static unsigned short m_OutputMaskLevel
;
static unsigned short m_InputMaskLevel
;
int V814_map
(int ModuleNumber
,
unsigned long ModuleOffset
, int print
)
{
unsigned short vsr
, mmt
, fix
;
ModuleAddress
[ModuleNumber
] = ModuleOffset
;
VME_A24D16_R
(ModuleAddress
[ModuleNumber
] + CAENV814_FIX
, &fix
);
VME_A24D16_R
(ModuleAddress
[ModuleNumber
] + CAENV814_MMT
, &mmt
);
VME_A24D16_R
(ModuleAddress
[ModuleNumber
] + CAENV814_VSR
, &vsr
);
if (print
) {
printf("CAEN V814 fixed code = 0x%04x\n", fix
);
printf("CAEN V814 manufacturer number = %i\n", MANUFACTURER
(mmt
));
printf("CAEN V814 module type = %i\n", MODULE_TYPE
(mmt
));
printf("CAEN V814 version = %i\n", VERSION
(vsr
));
printf("CAEN V814 serial no. = %i\n", SERIAL
(vsr
));
}
if ((fix
!= CAEN_FIX_CODE
) || (mmt
!= CAENV814_MMT_VALUE
)) return -1;
return 0;
}
int V814_init
(int ModuleNumber
, unsigned int threshold
, unsigned int width
, unsigned int mask
)
{
int ch
;
V814_SetWidth
( ModuleNumber
, width
);
for ( ch
=0;ch
<16;ch
++) V814_SetThreshold
(ModuleNumber
, ch
, threshold
);
V814_SetEnable
( ModuleNumber
, mask
);
V814_SetMajority
( ModuleNumber
, 0);
//printf("V814_init : value of threshold =%d\n", threshold);
//printf("V814_init : value of output width=%d\n", width);
//printf("V814_init : channels enabled mask=%04x\n", mask);
return 0;
}
int V814_SetThreshold
(int ModuleNumber
, unsigned long channel
, unsigned short threshold
)
{
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + channel
* 0x2,&threshold
);
return 0;
}
int V814_SetEnable
(int ModuleNumber
, unsigned short mask
)
{
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + CAENV814_INH
,&mask
);
return 0;
}
int V814_SetWidth
(int ModuleNumber
, unsigned short wdt
)
{
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + CAENV814_WDT0
,&wdt
);
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + CAENV814_WDT1
,&wdt
);
return 0;
}
int V814_SetMajority
(int ModuleNumber
, unsigned short majlev
)
{
unsigned short maj
=(int)((majlev
*50.
-25.
)/4.
);
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + CAENV814_MAJ
,&maj
);
return 0;
}
int V814_TestPulse
(int ModuleNumber
)
{
unsigned short maj
=0;
VME_A24D16_W
(ModuleAddress
[ModuleNumber
] + CAENV814_TST
,&maj
);
return 0;
}