void setLED(int onoff){ int bit; unsigned int bitmask; unsigned int writevalue; int temp, read; int mask; int LED; if(onoff > 2) LED = LEDSTATUS; else LED = LEDACTIVE; if(onoff == 3) onoff = 0; else if(onoff == 4) onoff = 1; if(LED == LEDACTIVE) bit = 2; else bit = 1; read = peek16(GPIODDIRECTION); // Create a mask with all 1, except the desired bit = 0; mask = 1; mask = mask << bit; mask = ~mask; // Force desired bit to 0; leave the rest unchanged. writevalue = read & mask; // Set the desired bit = 1 temp = 1; temp = temp << bit; writevalue = temp | writevalue; poke16(GPIODDIRECTION, writevalue); //Direction is set, now write the data. read = peek16(GPIODDATA); // Create a mask with all 1, except the desired bit = 0; mask = 1; mask = mask << bit; mask = ~mask; // Force desired bit to 0; leave the rest unchanged. writevalue = read & mask; // Set the desired bit = onoff temp = onoff; temp = temp << bit; writevalue = temp | writevalue; poke16(GPIODDATA, writevalue); }
//Added 2-10-2012 5:12pm float get_adc() { int devmem,volcode,voldig,volten,volhund; devmem = open("/dev/mem", O_RDWR|O_SYNC); assert(devmem != -1); sysconregs = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, devmem, 0x30000000); poke16(0x80, 0x08); // configure ADC poke16(0x82, 0x10); // enable all 6 channels usleep(500000); // allow time for conversions volcode = (signed short)peek16(0x8e); volcode = (volcode * 1006)/200;//Because for the ts-8160 board, there is a circuit that provide input voltage input= realvoltage*(R2/(R1+R2)). //In this case, R1=200,R2=806. volcode = 2.1*(volcode * 2048)/0x8000; voldig = volcode/1000; volten = volcode/100-voldig*10; volhund = volcode/10-(volcode/100)*10; char s[5]=""; sprintf(s,"%d.%d%d",voldig,volten,volhund); float m =atof(s); poke16(0x82, 0x00); // disable all 6 channels return m; }
int main(int, char *[]){ srandom(time(NULL)); //seed random() if ((fp = ::open("/dev/usrp_e0", O_RDWR)) < 0){ std::cerr << "Open failed" << std::endl; return -1; } size_t num_pass = 0, num_fail = 0; for (size_t i = 0; i < num_test_iters; i++){ if(i%1000000 == 0) { std::cout << "num pass: "******"\tnum fail: " << num_fail << std::endl; } //make random values int random_test32 = ::random(); int random_test16 = ::random() & 0xffff; int random_secs = ::random(); //set a bunch of registers poke16(UE_REG_MISC_TEST, random_test16); poke32(UE_REG_SR_MISC_TEST32, random_test32); poke32(UE_REG_TIME64_TICKS, 0); poke32(UE_REG_TIME64_IMM, 1); //immediate poke32(UE_REG_TIME64_SECS, random_secs); //read a bunch of registers if ( (peek16(UE_REG_MISC_TEST) == random_test16) and (peek32(UE_REG_RB_MISC_TEST32) == random_test32) and (peek32(UE_REG_RB_TIME_NOW_SECS) == random_secs) and // (peek32(UE_REG_RB_TIME_NOW_TICKS) < 1000000) and true) num_pass++; else num_fail++; } std::cout << "num pass: "******"num fail: " << num_fail << std::endl; ::close(fp); return 0; }