damaris-backends/drivers/SpinCore-PulseBlaster/TestCase.cpp

186 lines
4.9 KiB
C++
Raw Normal View History

2014-06-26 11:10:51 +00:00
#include <SpinCore-PulseBlaster.h>
#include <unistd.h>
class PB_test: SpinCorePulseBlasterLowlevel {
public:
PB_test(): SpinCorePulseBlasterLowlevel() {}
int testprog(int n=1) {
write_register(0x00,0x00);
write_register(0x02,0x0a);
write_register(0x03,0x00);
write_register(0x04,0x00);
// do nothing in first place (no loops in first place!!!!)
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// pulse 0.6 us
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x07);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x39);
// wait 7.7 us
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,n&0xff);
write_register(0x06,0xff); // change 0xff to 0xfe
// trigger
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x07);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x50);
write_register(0x06,0x0c);
// clear flags
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// stop
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x01);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// end programming
write_register(0x07,0x00);
// run
write_register(0x01,0x00);
sleep(1);
return 0;
}
int testinterval(unsigned long int tics) {
write_register(0x00,0x00);
write_register(0x02,0x0a);
write_register(0x03,0x00);
write_register(0x04,0x00);
// do nothing in first place (no loops in first place!!!!)
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// pulse 0.1 us
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x07);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0xfe);
// wait tics time units
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
// delay (32 bit)
write_register(0x06,(tics>>24)&0xff);
write_register(0x06,(tics>>16)&0xff);
write_register(0x06,(tics>>8)&0xff);
write_register(0x06,tics&0xff);
// trigger
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x07);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0xfe);
// clear flags
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// stop
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x01);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x00);
write_register(0x06,0x06);
// end programming
write_register(0x07,0x00);
// run
write_register(0x01,0x00);
sleep(1);
return 0;
}
~PB_test(){}
};
int main(int argc, char* argv[]) {
int n=9;
if (argc>1 && argv[1]!=0) {
n=strtoul(argv[1],NULL,0);
}
printf("%d\n",n);
return PB_test().testinterval(n);
}