Andy K
/
AD9951TEST
Attempt to read the AD9951 DSP serial output via SSP and \"IRQ driven bit-reading\".
rx.cpp@0:e45bbd4486df, 2011-01-18 (annotated)
- 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?
User | Revision | Line number | New 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 |