gavin beardall
/
wave1
main.cpp
- Committer:
- gbeardall
- Date:
- 2011-10-17
- Revision:
- 0:958661d88e40
File content as of revision 0:958661d88e40:
/* * wave1: wave test generator * */ #include "mbed.h" DigitalOut led1(LED1); //DigitalOut led2(LED2); //DigitalOut led3(LED3); //DigitalOut led4(LED4); DigitalOut osc1(p21); //PwmOut led1(LED1); Serial pc(USBTX,USBRX); Ticker oscTick1; // --------------------------------------------------------------------------- #if 1 int oscData[] = { 1,1,1,0,0,0,0 }; #endif #if 0 // DMFM int oscData[] = { 0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,0,0, 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, 1,1,0,0,1,1,0,0,1,1,0,0, 1,1,1,0,0,0,1,1,1,0,0,0 }; #endif #if 0 // Manchester int oscData[] = { 0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0, }; #endif const int dx_max = sizeof(oscData)/sizeof(oscData[0]); int dx = 0; // --------------------------------------------------------------------------- enum { RESET=0, SCRAMBLE, DESCRAMBLE }; int scramble1(int b, int func) { static int crc = 0; // 7 bit int fb; int op; b = !!b; fb = !!(crc & 0x40) ^ !!(crc & 0x08); crc <<= 1; op = b ^ fb; switch(func) { case SCRAMBLE: crc |= op; break; case DESCRAMBLE: crc |= b; break; case RESET: op = 0; crc = 0; break; } // switch - op return !!op; } // scramble1 // --------------------------------------------------------------------------- int nrz() { static int c = 0; static int b = 0; static int op = 0; if(c == 0) { // bit start b = scramble1(1,SCRAMBLE); op = b; // set data } else { // bit centre // same data } if(++c > 1) c = 0; return op; } // nrz int nrzi() { static int c = 0; static int b = 0; static int op = 0; if(c == 0) { // bit start b = scramble1(1,SCRAMBLE); } else { // bit centre if(b == 1) op = !op; // flip if 1 } if(++c > 1) c = 0; return op; } // nrzi int man() { static int c = 0; static int b = 0; static int op = 0; if(c == 0) { // bit start int d = rand()&1; b = scramble1(d,SCRAMBLE); op = !b; // setup for transition } else { // bit centre // transition: +ve=1, -ve=0 op = b; // transition direction represents bit sense } if(++c > 1) c = 0; return op; } // man int dman() { static int c = 0; static int b = 0; static int op = 0; if(c == 0) { // bit start int d = rand()&1; b = scramble1(d,SCRAMBLE); if(b == 1) op = !op; // flip if 1 } else { // bit centre op = !op; // flip always } if(++c > 1) c = 0; return op; } // dman int dmfm() { static int c = 0; static int b = 0; static int b1 = 0; static int op = 0; if(c == 0) { // bit start int d = rand()&1; b = scramble1(d,SCRAMBLE); if(b1 == 0 && b == 0) op = !op; // flip if 2 zeros b1 = b; } else { // bit centre if(b == 1) op = !op; // flip if 1 } if(++c > 1) c = 0; return op; } // dmfm // --------------------------------------------------------------------------- void oscOut1() { osc1 = man(); //osc1 = oscData[dx++]; if(dx >= dx_max) dx = 0; } // --------------------------------------------------------------------------- int main() { scramble1(0,RESET); osc1 = 0; oscTick1.attach_us(&oscOut1, 500); // chip period // led1.period(1); // led1.write(50); pc.printf("\n\rStart: wave1\n\r"); while (1) { led1 = 1; wait(0.25); led1 = 0; wait(0.25); // // pc.printf("."); // } // while } // main // ---------------------------------------------------------------------------