Committer:
gbeardall
Date:
Mon Oct 17 10:42:38 2011 +0000
Revision:
0:958661d88e40

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gbeardall 0:958661d88e40 1 /*
gbeardall 0:958661d88e40 2 * wave1: wave test generator
gbeardall 0:958661d88e40 3 *
gbeardall 0:958661d88e40 4 */
gbeardall 0:958661d88e40 5
gbeardall 0:958661d88e40 6 #include "mbed.h"
gbeardall 0:958661d88e40 7
gbeardall 0:958661d88e40 8 DigitalOut led1(LED1);
gbeardall 0:958661d88e40 9 //DigitalOut led2(LED2);
gbeardall 0:958661d88e40 10 //DigitalOut led3(LED3);
gbeardall 0:958661d88e40 11 //DigitalOut led4(LED4);
gbeardall 0:958661d88e40 12
gbeardall 0:958661d88e40 13 DigitalOut osc1(p21);
gbeardall 0:958661d88e40 14 //PwmOut led1(LED1);
gbeardall 0:958661d88e40 15
gbeardall 0:958661d88e40 16 Serial pc(USBTX,USBRX);
gbeardall 0:958661d88e40 17
gbeardall 0:958661d88e40 18 Ticker oscTick1;
gbeardall 0:958661d88e40 19
gbeardall 0:958661d88e40 20 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 21 #if 1
gbeardall 0:958661d88e40 22 int oscData[] = { 1,1,1,0,0,0,0 };
gbeardall 0:958661d88e40 23 #endif
gbeardall 0:958661d88e40 24 #if 0
gbeardall 0:958661d88e40 25 // DMFM
gbeardall 0:958661d88e40 26 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,
gbeardall 0:958661d88e40 27 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
gbeardall 0:958661d88e40 28 1,1,0,0,1,1,0,0,1,1,0,0,
gbeardall 0:958661d88e40 29 1,1,1,0,0,0,1,1,1,0,0,0
gbeardall 0:958661d88e40 30 };
gbeardall 0:958661d88e40 31 #endif
gbeardall 0:958661d88e40 32 #if 0
gbeardall 0:958661d88e40 33 // Manchester
gbeardall 0:958661d88e40 34 int oscData[] = { 0,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,0,1,0,
gbeardall 0:958661d88e40 35 0,1,1,0,1,1,0,0,1,0,0,1,0,0,
gbeardall 0:958661d88e40 36 };
gbeardall 0:958661d88e40 37 #endif
gbeardall 0:958661d88e40 38
gbeardall 0:958661d88e40 39 const int dx_max = sizeof(oscData)/sizeof(oscData[0]);
gbeardall 0:958661d88e40 40 int dx = 0;
gbeardall 0:958661d88e40 41
gbeardall 0:958661d88e40 42 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 43
gbeardall 0:958661d88e40 44 enum { RESET=0, SCRAMBLE, DESCRAMBLE };
gbeardall 0:958661d88e40 45 int scramble1(int b, int func) {
gbeardall 0:958661d88e40 46 static int crc = 0; // 7 bit
gbeardall 0:958661d88e40 47 int fb;
gbeardall 0:958661d88e40 48 int op;
gbeardall 0:958661d88e40 49
gbeardall 0:958661d88e40 50 b = !!b;
gbeardall 0:958661d88e40 51
gbeardall 0:958661d88e40 52 fb = !!(crc & 0x40) ^ !!(crc & 0x08);
gbeardall 0:958661d88e40 53 crc <<= 1;
gbeardall 0:958661d88e40 54 op = b ^ fb;
gbeardall 0:958661d88e40 55
gbeardall 0:958661d88e40 56 switch(func) {
gbeardall 0:958661d88e40 57 case SCRAMBLE:
gbeardall 0:958661d88e40 58 crc |= op;
gbeardall 0:958661d88e40 59 break;
gbeardall 0:958661d88e40 60 case DESCRAMBLE:
gbeardall 0:958661d88e40 61 crc |= b;
gbeardall 0:958661d88e40 62 break;
gbeardall 0:958661d88e40 63 case RESET:
gbeardall 0:958661d88e40 64 op = 0;
gbeardall 0:958661d88e40 65 crc = 0;
gbeardall 0:958661d88e40 66 break;
gbeardall 0:958661d88e40 67 } // switch - op
gbeardall 0:958661d88e40 68
gbeardall 0:958661d88e40 69 return !!op;
gbeardall 0:958661d88e40 70
gbeardall 0:958661d88e40 71 } // scramble1
gbeardall 0:958661d88e40 72
gbeardall 0:958661d88e40 73 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 74
gbeardall 0:958661d88e40 75 int nrz() {
gbeardall 0:958661d88e40 76 static int c = 0;
gbeardall 0:958661d88e40 77 static int b = 0;
gbeardall 0:958661d88e40 78 static int op = 0;
gbeardall 0:958661d88e40 79
gbeardall 0:958661d88e40 80 if(c == 0) {
gbeardall 0:958661d88e40 81 // bit start
gbeardall 0:958661d88e40 82 b = scramble1(1,SCRAMBLE);
gbeardall 0:958661d88e40 83 op = b; // set data
gbeardall 0:958661d88e40 84 }
gbeardall 0:958661d88e40 85 else {
gbeardall 0:958661d88e40 86 // bit centre
gbeardall 0:958661d88e40 87 // same data
gbeardall 0:958661d88e40 88 }
gbeardall 0:958661d88e40 89
gbeardall 0:958661d88e40 90 if(++c > 1) c = 0;
gbeardall 0:958661d88e40 91
gbeardall 0:958661d88e40 92 return op;
gbeardall 0:958661d88e40 93 } // nrz
gbeardall 0:958661d88e40 94
gbeardall 0:958661d88e40 95 int nrzi() {
gbeardall 0:958661d88e40 96 static int c = 0;
gbeardall 0:958661d88e40 97 static int b = 0;
gbeardall 0:958661d88e40 98 static int op = 0;
gbeardall 0:958661d88e40 99
gbeardall 0:958661d88e40 100 if(c == 0) {
gbeardall 0:958661d88e40 101 // bit start
gbeardall 0:958661d88e40 102 b = scramble1(1,SCRAMBLE);
gbeardall 0:958661d88e40 103 }
gbeardall 0:958661d88e40 104 else {
gbeardall 0:958661d88e40 105 // bit centre
gbeardall 0:958661d88e40 106 if(b == 1) op = !op; // flip if 1
gbeardall 0:958661d88e40 107 }
gbeardall 0:958661d88e40 108
gbeardall 0:958661d88e40 109 if(++c > 1) c = 0;
gbeardall 0:958661d88e40 110
gbeardall 0:958661d88e40 111 return op;
gbeardall 0:958661d88e40 112 } // nrzi
gbeardall 0:958661d88e40 113
gbeardall 0:958661d88e40 114 int man() {
gbeardall 0:958661d88e40 115 static int c = 0;
gbeardall 0:958661d88e40 116 static int b = 0;
gbeardall 0:958661d88e40 117 static int op = 0;
gbeardall 0:958661d88e40 118
gbeardall 0:958661d88e40 119 if(c == 0) {
gbeardall 0:958661d88e40 120 // bit start
gbeardall 0:958661d88e40 121 int d = rand()&1;
gbeardall 0:958661d88e40 122 b = scramble1(d,SCRAMBLE);
gbeardall 0:958661d88e40 123 op = !b; // setup for transition
gbeardall 0:958661d88e40 124 }
gbeardall 0:958661d88e40 125 else {
gbeardall 0:958661d88e40 126 // bit centre
gbeardall 0:958661d88e40 127 // transition: +ve=1, -ve=0
gbeardall 0:958661d88e40 128 op = b; // transition direction represents bit sense
gbeardall 0:958661d88e40 129 }
gbeardall 0:958661d88e40 130
gbeardall 0:958661d88e40 131 if(++c > 1) c = 0;
gbeardall 0:958661d88e40 132
gbeardall 0:958661d88e40 133 return op;
gbeardall 0:958661d88e40 134 } // man
gbeardall 0:958661d88e40 135
gbeardall 0:958661d88e40 136 int dman() {
gbeardall 0:958661d88e40 137 static int c = 0;
gbeardall 0:958661d88e40 138 static int b = 0;
gbeardall 0:958661d88e40 139 static int op = 0;
gbeardall 0:958661d88e40 140
gbeardall 0:958661d88e40 141 if(c == 0) {
gbeardall 0:958661d88e40 142 // bit start
gbeardall 0:958661d88e40 143 int d = rand()&1;
gbeardall 0:958661d88e40 144 b = scramble1(d,SCRAMBLE);
gbeardall 0:958661d88e40 145 if(b == 1) op = !op; // flip if 1
gbeardall 0:958661d88e40 146 }
gbeardall 0:958661d88e40 147 else {
gbeardall 0:958661d88e40 148 // bit centre
gbeardall 0:958661d88e40 149 op = !op; // flip always
gbeardall 0:958661d88e40 150 }
gbeardall 0:958661d88e40 151
gbeardall 0:958661d88e40 152 if(++c > 1) c = 0;
gbeardall 0:958661d88e40 153
gbeardall 0:958661d88e40 154 return op;
gbeardall 0:958661d88e40 155 } // dman
gbeardall 0:958661d88e40 156
gbeardall 0:958661d88e40 157 int dmfm() {
gbeardall 0:958661d88e40 158 static int c = 0;
gbeardall 0:958661d88e40 159 static int b = 0;
gbeardall 0:958661d88e40 160 static int b1 = 0;
gbeardall 0:958661d88e40 161 static int op = 0;
gbeardall 0:958661d88e40 162
gbeardall 0:958661d88e40 163
gbeardall 0:958661d88e40 164 if(c == 0) {
gbeardall 0:958661d88e40 165 // bit start
gbeardall 0:958661d88e40 166 int d = rand()&1;
gbeardall 0:958661d88e40 167 b = scramble1(d,SCRAMBLE);
gbeardall 0:958661d88e40 168 if(b1 == 0 && b == 0) op = !op; // flip if 2 zeros
gbeardall 0:958661d88e40 169 b1 = b;
gbeardall 0:958661d88e40 170 }
gbeardall 0:958661d88e40 171 else {
gbeardall 0:958661d88e40 172 // bit centre
gbeardall 0:958661d88e40 173 if(b == 1) op = !op; // flip if 1
gbeardall 0:958661d88e40 174 }
gbeardall 0:958661d88e40 175
gbeardall 0:958661d88e40 176 if(++c > 1) c = 0;
gbeardall 0:958661d88e40 177
gbeardall 0:958661d88e40 178 return op;
gbeardall 0:958661d88e40 179 } // dmfm
gbeardall 0:958661d88e40 180
gbeardall 0:958661d88e40 181 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 182
gbeardall 0:958661d88e40 183 void oscOut1() {
gbeardall 0:958661d88e40 184 osc1 = man();
gbeardall 0:958661d88e40 185 //osc1 = oscData[dx++];
gbeardall 0:958661d88e40 186 if(dx >= dx_max) dx = 0;
gbeardall 0:958661d88e40 187 }
gbeardall 0:958661d88e40 188
gbeardall 0:958661d88e40 189 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 190
gbeardall 0:958661d88e40 191 int main() {
gbeardall 0:958661d88e40 192
gbeardall 0:958661d88e40 193 scramble1(0,RESET);
gbeardall 0:958661d88e40 194
gbeardall 0:958661d88e40 195
gbeardall 0:958661d88e40 196 osc1 = 0;
gbeardall 0:958661d88e40 197 oscTick1.attach_us(&oscOut1, 500); // chip period
gbeardall 0:958661d88e40 198
gbeardall 0:958661d88e40 199
gbeardall 0:958661d88e40 200 // led1.period(1);
gbeardall 0:958661d88e40 201 // led1.write(50);
gbeardall 0:958661d88e40 202
gbeardall 0:958661d88e40 203 pc.printf("\n\rStart: wave1\n\r");
gbeardall 0:958661d88e40 204
gbeardall 0:958661d88e40 205 while (1) {
gbeardall 0:958661d88e40 206 led1 = 1;
gbeardall 0:958661d88e40 207 wait(0.25);
gbeardall 0:958661d88e40 208 led1 = 0;
gbeardall 0:958661d88e40 209 wait(0.25);
gbeardall 0:958661d88e40 210 //
gbeardall 0:958661d88e40 211 // pc.printf(".");
gbeardall 0:958661d88e40 212 //
gbeardall 0:958661d88e40 213 } // while
gbeardall 0:958661d88e40 214
gbeardall 0:958661d88e40 215 } // main
gbeardall 0:958661d88e40 216
gbeardall 0:958661d88e40 217 // ---------------------------------------------------------------------------
gbeardall 0:958661d88e40 218