Attempt to read the AD9951 DSP serial output via SSP and \"IRQ driven bit-reading\".

Committer:
AjK
Date:
Tue Jan 18 01:27:57 2011 +0000
Revision:
0:e45bbd4486df
0.1 A test failure case!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:e45bbd4486df 1
AjK 0:e45bbd4486df 2 #include "mbed.h"
AjK 0:e45bbd4486df 3
AjK 0:e45bbd4486df 4 bool doPrint;
AjK 0:e45bbd4486df 5 InterruptIn ad9951_clk(p13);
AjK 0:e45bbd4486df 6 InterruptIn ad9951_sync(p14);
AjK 0:e45bbd4486df 7 DigitalIn ad9951_data(p11);
AjK 0:e45bbd4486df 8
AjK 0:e45bbd4486df 9 int bitCount, bitCountR;
AjK 0:e45bbd4486df 10 uint16_t dsp_value, dsp_value_shift;
AjK 0:e45bbd4486df 11
AjK 0:e45bbd4486df 12 void ad9951_sync_rise(void) {
AjK 0:e45bbd4486df 13 dsp_value = dsp_value_shift;
AjK 0:e45bbd4486df 14 dsp_value_shift = 0;
AjK 0:e45bbd4486df 15 bitCountR = bitCount;
AjK 0:e45bbd4486df 16 bitCount = 0;
AjK 0:e45bbd4486df 17 doPrint = true;
AjK 0:e45bbd4486df 18 }
AjK 0:e45bbd4486df 19
AjK 0:e45bbd4486df 20 void ad9951_clk_fall(void) {
AjK 0:e45bbd4486df 21 bitCount++;
AjK 0:e45bbd4486df 22 dsp_value_shift = dsp_value_shift << 1;
AjK 0:e45bbd4486df 23 dsp_value_shift |= ad9951_data == 1 ? 1 : 0;
AjK 0:e45bbd4486df 24 }
AjK 0:e45bbd4486df 25
AjK 0:e45bbd4486df 26 void rx(Serial *pc, DigitalOut *led1) {
AjK 0:e45bbd4486df 27 doPrint = false;
AjK 0:e45bbd4486df 28 dsp_value = dsp_value_shift = 0;
AjK 0:e45bbd4486df 29 bitCount = 0;
AjK 0:e45bbd4486df 30
AjK 0:e45bbd4486df 31 pc->printf("Starting MBED as the receiver...\n");
AjK 0:e45bbd4486df 32
AjK 0:e45bbd4486df 33 ad9951_sync.rise(&ad9951_sync_rise);
AjK 0:e45bbd4486df 34 ad9951_clk.fall(&ad9951_clk_fall);
AjK 0:e45bbd4486df 35
AjK 0:e45bbd4486df 36 while(1) {
AjK 0:e45bbd4486df 37 if (doPrint) {
AjK 0:e45bbd4486df 38
AjK 0:e45bbd4486df 39 pc->printf("Got %04x from %d\n", dsp_value, bitCountR);
AjK 0:e45bbd4486df 40 doPrint = false;
AjK 0:e45bbd4486df 41 }
AjK 0:e45bbd4486df 42 }
AjK 0:e45bbd4486df 43 }
AjK 0:e45bbd4486df 44
AjK 0:e45bbd4486df 45 #ifdef NO_COMPILE
AjK 0:e45bbd4486df 46
AjK 0:e45bbd4486df 47 #include "AD9951DSPSERIAL.h"
AjK 0:e45bbd4486df 48
AjK 0:e45bbd4486df 49 Ticker led1Flasher;
AjK 0:e45bbd4486df 50 DigitalOut *pLed1;
AjK 0:e45bbd4486df 51 AD9951DSPSERIAL *myDevice;
AjK 0:e45bbd4486df 52
AjK 0:e45bbd4486df 53 bool irqCalled;
AjK 0:e45bbd4486df 54 uint16_t dsp_value;
AjK 0:e45bbd4486df 55
AjK 0:e45bbd4486df 56 void flashLed1(void) {
AjK 0:e45bbd4486df 57 pLed1->write( !pLed1->read() );
AjK 0:e45bbd4486df 58 }
AjK 0:e45bbd4486df 59
AjK 0:e45bbd4486df 60 void dspReadCallback(uint16_t value) {
AjK 0:e45bbd4486df 61 if (!irqCalled) {
AjK 0:e45bbd4486df 62 dsp_value = value;
AjK 0:e45bbd4486df 63 irqCalled = true;
AjK 0:e45bbd4486df 64 }
AjK 0:e45bbd4486df 65 }
AjK 0:e45bbd4486df 66
AjK 0:e45bbd4486df 67 void rx(Serial *pc, DigitalOut *led1) {
AjK 0:e45bbd4486df 68 pLed1 = led1;
AjK 0:e45bbd4486df 69
AjK 0:e45bbd4486df 70 irqCalled = false;
AjK 0:e45bbd4486df 71
AjK 0:e45bbd4486df 72 pc->printf("Starting MBED as the receiver...\n");
AjK 0:e45bbd4486df 73
AjK 0:e45bbd4486df 74 myDevice = new AD9951DSPSERIAL(p11, p12, p13, p14);
AjK 0:e45bbd4486df 75
AjK 0:e45bbd4486df 76 led1Flasher.attach(&flashLed1, 0.1);
AjK 0:e45bbd4486df 77
AjK 0:e45bbd4486df 78 myDevice->attach_dspread(&dspReadCallback);
AjK 0:e45bbd4486df 79
AjK 0:e45bbd4486df 80 while(1) {
AjK 0:e45bbd4486df 81 if (irqCalled) {
AjK 0:e45bbd4486df 82 pc->printf("Got %04x\n", dsp_value);
AjK 0:e45bbd4486df 83 irqCalled = false;
AjK 0:e45bbd4486df 84 }
AjK 0:e45bbd4486df 85 }
AjK 0:e45bbd4486df 86 }
AjK 0:e45bbd4486df 87
AjK 0:e45bbd4486df 88 #endif