00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <stdio.h>
00011 #include <stdint.h>
00012 #include <string.h>
00013 #include "v513.h"
00014 #include "mvmestd.h"
00015
00016
00017
00018
00019
00020 static uint16_t regRead(MVME_INTERFACE *mvme, DWORD base, int offset)
00021 {
00022 mvme_set_am(mvme, MVME_AM_A24);
00023 mvme_set_dmode(mvme, MVME_DMODE_D16);
00024 return mvme_read_value(mvme, base + offset);
00025 }
00026
00027
00028
00029
00030
00031 static void regWrite(MVME_INTERFACE *mvme, DWORD base, int offset, uint16_t value)
00032 {
00033 mvme_set_am(mvme, MVME_AM_A24);
00034 mvme_set_dmode(mvme, MVME_DMODE_D16);
00035 mvme_write_value(mvme, base + offset, value);
00036 }
00037
00038 uint16_t v513_RegisterRead(MVME_INTERFACE *mvme, DWORD base, int offset)
00039 {
00040 return regRead(mvme,base,offset);
00041 }
00042
00043 void v513_RegisterWrite(MVME_INTERFACE *mvme, DWORD base, int offset, uint16_t value)
00044 {
00045 regWrite(mvme,base,offset,value);
00046 }
00047
00048 uint16_t v513_Read(MVME_INTERFACE *mvme, DWORD base)
00049 {
00050 return regRead(mvme,base,0x4);
00051 }
00052
00053 void v513_Write(MVME_INTERFACE *mvme, DWORD base, uint16_t data)
00054 {
00055 regWrite(mvme,base,0x4,data);
00056 }
00057
00058
00059 void v513_Reset(MVME_INTERFACE *mvme, DWORD base)
00060 {
00061 regWrite(mvme,base,0x46,0);
00062 regWrite(mvme,base,0x42,0);
00063
00064 regRead(mvme,base,0);
00065 }
00066
00067
00068 void v513_Status(MVME_INTERFACE *mvme, DWORD base)
00069 {
00070 printf("CAEN V513 at A24 0x%x: version 0x%x, type 0x%x, code 0x%x\n", (int)base,regRead(mvme,base,0xFE),regRead(mvme,base,0xFC),regRead(mvme,base,0xFA));
00071 }
00072
00073 void v513_SetChannelMode(MVME_INTERFACE *mvme, DWORD base, int channel, int mode)
00074 {
00075 regWrite(mvme,base,0x10 + 2*channel, mode);
00076 }
00077
00078 int v513_GetChannelMode(MVME_INTERFACE *mvme, DWORD base, int channel)
00079 {
00080 return regRead(mvme,base,0x10 + 2*channel);
00081 }
00082
00083