void countReset(client *c, int argc, sds *argv) { uint32_t reset; safe_strtoul(argv[1],&reset); counterReset(reset); addReplyStatus(c, "+OK"); }
static Counter* counterCreate(I8254Out out, void* ref, UInt32 frequency) { Counter* counter = calloc(1, sizeof(Counter)); counter->frequency = frequency; counter->out = out; counter->ref = ref; counter->timer = boardTimerCreate(counterOnTimer, counter); counterReset(counter); return counter; }
int Caen785Module::configure() { AbstractInterface *iface = getInterface (); int ret = 0; uint32_t addr; uint16_t data; // Crate select addr = conf.base_addr + CAEN785_CRATE_SEL; data = 0x0 | conf.cratenumber; ret = iface->writeA32D16(addr,data); if(ret != 0) printf("Error %d at CAEN785_CRATE_SEL\n",ret); // set channel thresholds and kill bits for (int i = 0; i < 32; ++i) { ret = iface->writeA32D16 (conf.base_addr + CAEN785_THRESHOLDS + 2*i, conf.thresholds [i] | (conf.killChannel [i] ? (1 << 8) : 0)); if (ret) printf ("Error %d at CAEN785_THRESHOLDS[%d]\n", ret, i); } ret = counterReset(); // Sliding scale addr = conf.base_addr + CAEN785_SLIDE_CONST; data = 0x0 | conf.slide_constant; ret = iface->writeA32D16(addr,data); if(ret != 0) printf("Error %d at CAEN785_SLIDE_CONST\n",ret); // Board setup addr = conf.base_addr + CAEN785_CONTROL1; data = 0x0; if(conf.block_end){ data |= (1 << 2); // default OFF } if(conf.program_reset){ data |= (1 << 4); // default OFF } if(conf.berr_enable){ data |= (1 << 5); // default OFF } if(conf.align64){ data |= (1 << 6); // default OFF } ret = iface->writeA32D16(addr,data); if(ret != 0) printf("Error %d at CAEN785_CONTROL1",ret); addr = conf.base_addr + CAEN785_BIT_SET2; data = 0x0; if(conf.memTestModeEnabled) { data |= (1 << 0); // default OFF } if(conf.offline) { data |= (1 << 1); // default OFF } if(conf.overRangeSuppressionEnabled) { data |= (1 << 3); // default ON } if(conf.autoIncrementEnabled) { data |= (1 << 11); // default ON } if(conf.emptyEventWriteEnabled) { data |= (1 << 12); // default ON -> empty events are written } if(conf.alwaysIncrementEventCounter) { data |= (1 << 14); // default ON } // TODO: transfer more flags ret = iface->writeA32D16(addr,data); if(ret != 0) printf("Error %d at CAEN785_BIT_SET2\n",ret); ret = readStatus(); return ret; }
void i8254Reset(I8254* i8254) { counterReset(i8254->counter1); counterReset(i8254->counter2); counterReset(i8254->counter3); }