00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdio.h>
00010 #include <stdint.h>
00011 #include <string.h>
00012 #include "isegvhsdrv.h"
00013 #include "isegvhs.h"
00014 #include "mvmestd.h"
00015
00016
00017
00018
00019
00020 static uint32_t regRead(MVME_INTERFACE *mvme, DWORD base, int offset)
00021 {
00022 mvme_set_am(mvme, MVME_AM_A16);
00023 mvme_set_dmode(mvme, MVME_DMODE_D16);
00024 return (mvme_read_value(mvme, base + offset) & 0xFFFF);
00025 }
00026
00027 static float regReadFloat(MVME_INTERFACE *mvme, DWORD base, int offset)
00028 {
00029 uint32_t temp, temp1;
00030 float ftemp;
00031 mvme_set_am(mvme, MVME_AM_A16);
00032 mvme_set_dmode(mvme, MVME_DMODE_D16);
00033 temp = mvme_read_value(mvme, base + offset);
00034 temp1 = mvme_read_value(mvme, base + offset+2);
00035 temp = (temp<<16) | (temp1 & 0xFFFF);
00036
00037 memcpy(&ftemp, &temp, 4);
00038
00039 return (ftemp);
00040 }
00041
00042
00043
00044
00045
00046 static void regWrite(MVME_INTERFACE *mvme, DWORD base, int offset, uint32_t value)
00047 {
00048 mvme_set_am(mvme, MVME_AM_A16);
00049 mvme_set_dmode(mvme, MVME_DMODE_D16);
00050 mvme_write_value(mvme, base + offset, value);
00051 }
00052
00053 static void regWriteFloat(MVME_INTERFACE *mvme, DWORD base, int offset, float value)
00054 {
00055 uint32_t temp;
00056 memcpy(&temp, &value, 4);
00057 mvme_set_am(mvme, MVME_AM_A16);
00058 mvme_set_dmode(mvme, MVME_DMODE_D16);
00059 mvme_write_value(mvme, base + offset, ((temp>>16)&0xFFFF));
00060 mvme_write_value(mvme, base + offset+2, (temp & 0xFFFF));
00061 }
00062
00063
00064 uint32_t isegvhs_RegisterRead(MVME_INTERFACE *mvme, DWORD base, int offset)
00065 {
00066 return regRead(mvme, base, offset);
00067 }
00068
00069
00070 float isegvhs_RegisterReadFloat(MVME_INTERFACE *mvme, DWORD base, int offset)
00071 {
00072 float temp;
00073 temp = regReadFloat(mvme, base, offset);
00074
00075 return temp;
00076 }
00077
00078
00079 void isegvhs_RegisterWrite(MVME_INTERFACE *mvme, DWORD base, int offset, uint32_t value)
00080 {
00081 regWrite(mvme,base,offset,value);
00082 }
00083
00084
00085 void isegvhs_RegisterWriteFloat(MVME_INTERFACE *mvme, DWORD base, int offset, float value)
00086 {
00087 regWriteFloat(mvme, base, offset, value);
00088 }
00089
00090
00091 void isegvhs_Status(MVME_INTERFACE *mvme, DWORD base)
00092 {
00093 uint32_t sn=0, csr;
00094 uint64_t vendor=0;
00095 printf("ISEGVHS at A32 0x%x\n", (int)base);
00096 vendor = (regRead(mvme,base,ISEGVHS_VENDOR_ID)<<16) | regRead(mvme,base,ISEGVHS_VENDOR_ID+2);
00097 printf("Module Vendor : 0x%x%x\n", regRead(mvme,base,ISEGVHS_VENDOR_ID), regRead(mvme,base,ISEGVHS_VENDOR_ID+2));
00098 printf("Module Vendor : %s\t\t", (char *)&vendor);
00099 csr = regRead(mvme,base,ISEGVHS_MODULE_STATUS);
00100 printf("Module Status : 0x%x\n >> ", csr);
00101 printf("%s", csr & 0x0001 ? "FineAdj /" : " NoFineAdj /");
00102 printf("%s", csr & 0x0080 ? "CmdCpl /" : " /");
00103 printf("%s", csr & 0x0100 ? "noError /" : " ERROR /");
00104 printf("%s", csr & 0x0200 ? "noRamp /" : " RAMPING /");
00105 printf("%s", csr & 0x0400 ? "Saf closed /" : " /");
00106 printf("%s", csr & 0x0800 ? "Evt Active /" : " /");
00107 printf("%s", csr & 0x1000 ? "Mod Good /" : " MOD NO good /");
00108 printf("%s", csr & 0x2000 ? "Supply Good /" : " Supply NO good /");
00109 printf("%s\n", csr & 0x4000 ? "Temp Good /" : " Temp NO good /");
00110 printf("Module Control : 0x%x\t\t", regRead(mvme,base,ISEGVHS_MODULE_CONTROL));
00111 sn = regRead(mvme, base, ISEGVHS_SERIAL_NUMBER);
00112 printf("Module S/N : %d\n", (sn<<16)|regRead(mvme, base, ISEGVHS_SERIAL_NUMBER+2));
00113 printf("Module Temp. : %f\t\t", isegvhs_RegisterReadFloat(mvme, base, ISEGVHS_TEMPERATURE));
00114 printf("Module Supply P5 : %f\n", regReadFloat(mvme, base, ISEGVHS_SUPPLY_P5));
00115 printf("Module Supply P12 : %f\t\t", regReadFloat(mvme, base, ISEGVHS_SUPPLY_P12));
00116 printf("Module Supply N12 : %f\n", regReadFloat(mvme, base, ISEGVHS_SUPPLY_N12));
00117 printf("Module Trim V Max : %f\t\t", regReadFloat(mvme, base, ISEGVHS_VOLTAGE_MAX));
00118 printf("Module Trim I Max : %f\n", regReadFloat(mvme, base, ISEGVHS_CURRENT_MAX));
00119 printf("Module Event Stat : 0x%04x\t\t", regRead(mvme, base, ISEGVHS_MODULE_EVENT_STATUS));
00120 printf("Module Event Mask : 0x%04x\n", regRead(mvme, base, ISEGVHS_MODULE_EVENT_MASK));
00121 printf("Channel Event Stat: 0x%04x\t\t", regRead(mvme, base, ISEGVHS_CHANNEL_EVENT_STATUS));
00122 printf("Channel Event Mask: 0x%04x\n\n", regRead(mvme, base, ISEGVHS_CHANNEL_EVENT_MASK));
00123 }
00124
00125
00126
00127 #ifdef MAIN_ENABLE
00128 int main (int argc, char* argv[]) {
00129
00130 uint32_t ISEGVHS_BASE = 0x4000;
00131 MVME_INTERFACE *myvme;
00132 int status, i;
00133
00134 if (argc>1) {
00135 sscanf(argv[1],"%x", &ISEGVHS_BASE);
00136 }
00137
00138
00139 status = mvme_open(&myvme, 0);
00140
00141 isegvhs_Status(myvme, ISEGVHS_BASE);
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 printf("Chn Vrmp Irmp Vset Vmes Vbnd Vnom IsetmA ImesmA Ibnd CSta CCtl\n");
00163 for (i=0;i<12;i++) {
00164 printf("%02d ", i);
00165 regWriteFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_VOLTAGE_BOUND, 0.5);
00166
00167 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_VOLTAGE_RAMP_SPEED));
00168 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CURRENT_RAMP_SPEED));
00169 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_VOLTAGE_SET));
00170 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_VOLTAGE_MEASURE));
00171 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_VOLTAGE_BOUND));
00172 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_VOLTAGE_NOMINAL));
00173
00174 printf("%8.3f ", 1000.*regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_CURRENT_SET));
00175 printf("%8.3f ", 1000.*regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_CURRENT_MEASURE));
00176 printf("%8.2f ", regReadFloat(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_CURRENT_BOUND));
00177
00178 printf("0x%04x ", regRead(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_CHANNEL_STATUS));
00179 printf("0x%04x ", regRead(myvme, ISEGVHS_BASE, ISEGVHS_CHANNEL_BASE+(i*ISEGVHS_CHANNEL_OFFSET)+ISEGVHS_CHANNEL_CONTROL));
00180
00181 printf("\n");
00182 }
00183
00184 status = mvme_close(myvme);
00185
00186 return 1;
00187
00188 }
00189 #endif
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200