| 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; |
| } |
| |