0,0 → 1,94 |
#include <ansi_c.h> |
#include "CAENV288.h" |
#include "CAENV288_DEF.h" |
|
|
#include "vme.h" |
|
#include <utility.h> |
|
static unsigned long ModuleAddress[10]; |
|
void _VI_FUNC V288_Map (int ModuleNumber, unsigned long ModuleOffset) |
{ |
ModuleAddress[ModuleNumber] = ModuleOffset; |
|
return; |
} |
|
void _VI_FUNC V288_Reset(int ModuleNumber) |
{ |
unsigned short ultmp=0; |
|
VME_A24D16_W(ModuleAddress[ModuleNumber]+V288_RST, &ultmp); |
|
return; |
}; |
|
void _VI_FUNC V288_Init (int ModuleNumber) |
{ |
V288_Reset(ModuleNumber); |
|
return; |
} |
|
int _VI_FUNC V288_Send (int ModuleNumber,int slaveid,int nbuf,unsigned short *buf) |
{ |
int i; |
unsigned short ultmp,ulstat; |
|
ultmp=0x0001; |
while (1){ |
VME_A24D16_W(ModuleAddress[ModuleNumber]+V288_BUF, &ultmp); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) Delay(0.1); else break; |
} |
|
ultmp=slaveid; |
while (1){ |
VME_A24D16_W(ModuleAddress[ModuleNumber]+V288_BUF, &ultmp); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) Delay(0.1); else break; |
} |
|
for (i=0;i<nbuf;i++){ |
ultmp=buf[i]; |
while (1){ |
VME_A24D16_W(ModuleAddress[ModuleNumber]+V288_BUF, &ultmp); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) Delay(0.1); else break; |
} |
} |
|
while (1){ |
VME_A24D16_W(ModuleAddress[ModuleNumber]+V288_TX, &ultmp); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) Delay(0.1); else break; |
} |
|
return 0; |
} |
|
int _VI_FUNC V288_Receive(int ModuleNumber,int nbuf,unsigned short *buf) |
{ |
int i; |
unsigned short ecode,ulstat; |
|
while (1){ |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_BUF, &ecode); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) Delay(0.1); else break; |
} |
if (ecode) return 1; |
|
i=0; |
while (i<nbuf){ |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_BUF, &buf[i]); |
VME_A24D16_R(ModuleAddress[ModuleNumber]+V288_STATUS, &ulstat); |
if (ulstat & 1) break; |
i++; |
} |
|
return i; |
} |
|