| 1,7 → 1,7 |
| |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <stdint.h> |
| #include <stdint.h> |
| |
| #include <CAENVMElib.h> |
| #include <CAENVMEoslib.h> |
| 21,7 → 21,8 |
| |
| int VMEerrors; |
| |
| int CAEN_VME_start (char* serial) { |
| int CAEN_VME_start (char* serial) |
| { |
| |
| CVErrorCodes result = CAENVME_Init( cvV1718 , 0 , 0 , &CAEN_udev); |
| if (result != cvSuccess) { |
| 31,84 → 32,87 |
| } |
| if (serial == NULL) serial = (char *) malloc(100*sizeof(char)); |
| CAENVME_BoardFWRelease(CAEN_udev, serial); |
| |
| |
| return result; |
| } |
| |
| |
| short CAEN_VME_read(long Handle, unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) { |
| short CAEN_VME_read(long Handle, unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) |
| { |
| |
| CVErrorCodes result; |
| int ncount=0; |
| while (1) { |
| result = CAENVME_ReadCycle(Handle, Address, Data, AM, DW ); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("%d CAENVME_ReadCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s\n", ncount,Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result)); |
| ncount++; |
| if (ncount==10) return (result); |
| } else break; |
| } |
| return result; |
| CVErrorCodes result; |
| int ncount=0; |
| while (1){ |
| result = CAENVME_ReadCycle(Handle, Address, Data, AM, DW ); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("%d CAENVME_ReadCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s\n", ncount,Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result)); |
| ncount++; |
| if (ncount==10) return (result); |
| } else break; |
| } |
| return result; |
| } |
| |
| int CAEN_VME_BltRead(long Handle, unsigned long Address, void *Data, int size, CVAddressModifier AM, CVDataWidth DW) { |
| int CAEN_VME_BltRead(long Handle, unsigned long Address, void *Data, int size, CVAddressModifier AM, CVDataWidth DW) |
| { |
| int count=0; |
| CVErrorCodes result; |
| CVErrorCodes result; |
| int ncount=0; |
| |
| while (1) { |
| |
| |
| while (1){ |
| |
| result = CAENVME_BLTReadCycle(Handle, Address, Data, size, AM, DW , &count); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("%d CAENVME_BLTReadCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s count=%d\n", ncount,Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result),count); |
| ncount++; |
| if (ncount==10) return (result); |
| VMEerrors++; |
| printf("%d CAENVME_BLTReadCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s count=%d\n", ncount,Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result),count); |
| ncount++; |
| if (ncount==10) return (result); |
| } else break; |
| } |
| } |
| return count; |
| } |
| |
| short CAEN_VME_write(long Handle, unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) { |
| short CAEN_VME_write(long Handle, unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) |
| { |
| |
| CVErrorCodes result; |
| int ncount=0; |
| while (1) { |
| |
| result = CAENVME_WriteCycle(Handle, Address, Data, AM, DW ); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("CAENVME_WriteCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s\n", Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result)); |
| if (ncount==10) return (result); |
| } else break; |
| } |
| return result; |
| CVErrorCodes result; |
| int ncount=0; |
| while (1){ |
| |
| result = CAENVME_WriteCycle(Handle, Address, Data, AM, DW ); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("CAENVME_WriteCycle at 0x%0lX failed! data=0x%0X AM= 0x%0X DW= 0x%0X err=%s\n", Address, *((uint32_t *) Data),AM,DW, CAENVME_DecodeError(result)); |
| if (ncount==10) return (result); |
| } else break; |
| } |
| return result; |
| } |
| |
| |
| |
| |
| uint32_t *WStackAddrs = NULL; |
| uint32_t *WStackBuffer; |
| uint32_t *WStackAddrs = NULL; |
| uint32_t *WStackBuffer; |
| unsigned short WStackNCycles; |
| unsigned short WStackMaxCycles=100; |
| CVAddressModifier *WStackAMs; |
| CVDataWidth *WStackDWs; |
| CVAddressModifier *WStackAMs; |
| CVDataWidth *WStackDWs; |
| CVErrorCodes *WStackECs; |
| |
| |
| uint32_t *RStackAddrs =NULL; |
| uint32_t *RStackAddrs =NULL; |
| unsigned short RStackNCycles; |
| unsigned short RStackMaxCycles=1000; |
| CVAddressModifier *RStackAMs; |
| CVDataWidth *RStackDWs; |
| CVAddressModifier *RStackAMs; |
| CVDataWidth *RStackDWs; |
| CVErrorCodes *RStackECs; |
| |
| |
| |
| short CAEN_VME_appendread(unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) { |
| if (RStackNCycles<RStackMaxCycles) { |
| short CAEN_VME_appendread(unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW){ |
| if (RStackNCycles<RStackMaxCycles){ |
| RStackAddrs[RStackNCycles] = Address; |
| RStackAMs[RStackNCycles] = AM; |
| RStackDWs[RStackNCycles] = DW; |
| 121,8 → 125,8 |
| return RStackNCycles; |
| } |
| |
| short CAEN_VME_appendwrite(unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW) { |
| if (WStackNCycles<WStackMaxCycles) { |
| short CAEN_VME_appendwrite(unsigned long Address, void *Data, CVAddressModifier AM, CVDataWidth DW){ |
| if (WStackNCycles<WStackMaxCycles){ |
| WStackAddrs[WStackNCycles] = Address; |
| WStackBuffer[WStackNCycles] = *((uint32_t *) Data); |
| WStackAMs[WStackNCycles] = AM; |
| 134,97 → 138,97 |
| return 0; |
| } |
| |
| short CAEN_VME_MultiReadReset() { |
| short CAEN_VME_MultiReadReset(){ |
| RStackNCycles=0; |
| if (RStackAddrs!=NULL) return 0; |
| RStackAddrs = (uint32_t *) malloc( RStackMaxCycles*sizeof(uint32_t)); |
| |
| |
| RStackAMs = (CVAddressModifier *) malloc(RStackMaxCycles*sizeof(CVAddressModifier)); |
| RStackDWs = (CVDataWidth *) malloc(RStackMaxCycles*sizeof(CVDataWidth)); |
| RStackECs = (CVErrorCodes *) malloc(RStackMaxCycles*sizeof(CVErrorCodes)); |
| |
| |
| return 0; |
| } |
| |
| short CAEN_VME_MultiWriteReset() { |
| short CAEN_VME_MultiWriteReset(){ |
| WStackNCycles=0; |
| if (WStackAddrs!=NULL) return 0; |
| WStackBuffer = (uint32_t *) malloc( WStackMaxCycles*sizeof(uint32_t)); |
| WStackAddrs = (uint32_t *) malloc( WStackMaxCycles*sizeof(uint32_t)); |
| WStackBuffer = (uint32_t *) malloc( WStackMaxCycles*sizeof(uint32_t)); |
| WStackAddrs = (uint32_t *) malloc( WStackMaxCycles*sizeof(uint32_t)); |
| WStackAMs = (CVAddressModifier *) malloc(WStackMaxCycles*sizeof(CVAddressModifier)); |
| WStackDWs = (CVDataWidth *) malloc(WStackMaxCycles*sizeof(CVDataWidth)); |
| WStackECs = (CVErrorCodes *) malloc(WStackMaxCycles*sizeof(CVErrorCodes)); |
| |
| |
| return 0; |
| } |
| |
| short CAEN_VME_MultiReadExecute(long Handle, uint32_t * Data) { |
| short CAEN_VME_MultiReadExecute(long Handle, uint32_t * Data){ |
| //printf("len=%d\n",RStackNCycles); |
| int i=0; |
| CVErrorCodes result =CAENVME_MultiRead(Handle, RStackAddrs, Data, RStackNCycles, RStackAMs, RStackDWs, RStackECs); |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("CAENVME_MultiRead at 0x%0X failed! err=%s RStackNCycles=%d\n", RStackAddrs[0], CAENVME_DecodeError(result), RStackNCycles); |
| for (i=0; i<RStackNCycles; i++) { |
| if (RStackECs[i]!=cvSuccess ) printf("%d ADDR= 0x%0X AM= 0x%0X DW= 0x%0X failed! err=%s\n", i,RStackAddrs[i],RStackAMs[i], RStackDWs[i], CAENVME_DecodeError(RStackECs[i]) ); |
| } |
| exit(result); |
| } |
| return RStackNCycles; |
| if (result !=cvSuccess ) { |
| VMEerrors++; |
| printf("CAENVME_MultiRead at 0x%0X failed! err=%s RStackNCycles=%d\n", RStackAddrs[0], CAENVME_DecodeError(result), RStackNCycles); |
| for (i=0;i<RStackNCycles;i++){ |
| if (RStackECs[i]!=cvSuccess ) printf("%d ADDR= 0x%0X AM= 0x%0X DW= 0x%0X failed! err=%s\n", i,RStackAddrs[i],RStackAMs[i], RStackDWs[i], CAENVME_DecodeError(RStackECs[i]) ); |
| } |
| exit(result); |
| } |
| return RStackNCycles; |
| } |
| |
| short CAEN_VME_MultiWriteExecute(long Handle) { |
| int i=0; |
| CVErrorCodes result =CAENVME_MultiWrite(Handle, WStackAddrs, WStackBuffer, WStackNCycles, WStackAMs, WStackDWs, WStackECs); |
| if (result !=cvSuccess ) { |
| printf("CAENVME_MultiWrite at 0x%0X failed! err=%s WStackNCycles=%d\n", WStackAddrs[0], CAENVME_DecodeError(result), WStackNCycles); |
| |
| for (i=0; i<WStackNCycles; i++) { |
| if (WStackECs[i]!=cvSuccess ) |
| printf("%d ADDR= 0x%0X AM= 0x%0X DW= 0x%0X data= 0x%0X failed! err=%s\n", i,WStackAddrs[i],WStackAMs[i], WStackDWs[i], WStackBuffer[i], CAENVME_DecodeError(WStackECs[i]) ); |
| } |
| exit(result); |
| } |
| return WStackNCycles; |
| short CAEN_VME_MultiWriteExecute(long Handle){ |
| int i=0; |
| CVErrorCodes result =CAENVME_MultiWrite(Handle, WStackAddrs, WStackBuffer, WStackNCycles, WStackAMs, WStackDWs, WStackECs); |
| if (result !=cvSuccess ) { |
| printf("CAENVME_MultiWrite at 0x%0X failed! err=%s WStackNCycles=%d\n", WStackAddrs[0], CAENVME_DecodeError(result), WStackNCycles); |
| |
| for (i=0;i<WStackNCycles;i++){ |
| if (WStackECs[i]!=cvSuccess ) |
| printf("%d ADDR= 0x%0X AM= 0x%0X DW= 0x%0X data= 0x%0X failed! err=%s\n", i,WStackAddrs[i],WStackAMs[i], WStackDWs[i], WStackBuffer[i], CAENVME_DecodeError(WStackECs[i]) ); |
| } |
| exit(result); |
| } |
| return WStackNCycles; |
| } |
| |
| |
| short __stdcall CAEN_VME_R( uint16_t AddressModifier, uint16_t DataWidth, uint32_t VME_Address, uint32_t *Data) { |
| return CAEN_VME_read( CAEN_udev, VME_Address, (void *)Data, (CVAddressModifier) AddressModifier, (CVDataWidth) DataWidth); |
| short __stdcall CAEN_VME_R( uint16_t AddressModifier, uint16_t DataWidth, uint32_t VME_Address, uint32_t *Data){ |
| return CAEN_VME_read( CAEN_udev, VME_Address, (void *)Data, (CVAddressModifier) AddressModifier, (CVDataWidth) DataWidth); |
| } |
| |
| short __stdcall CAEN_VME_W( uint16_t AddressModifier, uint16_t DataWidth, uint32_t VME_Address, uint32_t Data) { |
| return CAEN_VME_write( CAEN_udev, VME_Address, &Data, (CVAddressModifier) AddressModifier, (CVDataWidth) DataWidth); |
| short __stdcall CAEN_VME_W( uint16_t AddressModifier, uint16_t DataWidth, uint32_t VME_Address, uint32_t Data){ |
| return CAEN_VME_write( CAEN_udev, VME_Address, &Data, (CVAddressModifier) AddressModifier, (CVDataWidth) DataWidth); |
| } |
| |
| short __stdcall CAEN_VME_MW( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t Data) { |
| short __stdcall CAEN_VME_MW( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t Data){ |
| |
| return CAEN_VME_appendwrite( VME_Address, &Data ,(CVAddressModifier) AM , (CVDataWidth) DW) ; |
| |
| } |
| short __stdcall CAEN_VME_MWRST( void ) { |
| short __stdcall CAEN_VME_MWRST( void ){ |
| |
| return CAEN_VME_MultiWriteReset(); |
| |
| } |
| short __stdcall CAEN_VME_MWEXEC( void ) { |
| short __stdcall CAEN_VME_MWEXEC( void ){ |
| |
| return CAEN_VME_MultiWriteExecute(CAEN_udev); |
| |
| } |
| |
| short __stdcall CAEN_VME_MR( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t *Data) { |
| short __stdcall CAEN_VME_MR( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t *Data){ |
| |
| return CAEN_VME_appendread( VME_Address, Data ,(CVAddressModifier) AM , (CVDataWidth) DW) ; |
| |
| } |
| short __stdcall CAEN_VME_MRRST( void ) { |
| short __stdcall CAEN_VME_MRRST( void ){ |
| |
| return CAEN_VME_MultiReadReset(); |
| return CAEN_VME_MultiReadReset(); |
| |
| } |
| short __stdcall CAEN_VME_MREXEC( uint32_t *Data ) { |
| return CAEN_VME_MultiReadExecute(CAEN_udev, Data); |
| short __stdcall CAEN_VME_MREXEC( uint32_t *Data ){ |
| return CAEN_VME_MultiReadExecute(CAEN_udev, Data); |
| |
| |
| } |