Kevin Anderson
/
DataCommFreedom
Using FRDM Board to output data and a clock for communications example.
main.cpp@3:027d30718bbc, 2015-03-17 (annotated)
- Committer:
- askksa12543
- Date:
- Tue Mar 17 03:02:38 2015 +0000
- Revision:
- 3:027d30718bbc
- Parent:
- 2:11f32d8cfa11
- Child:
- 4:39a777388acd
preamble finished
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
askksa12543 | 2:11f32d8cfa11 | 1 | //project to include preamble, addressing, control, error control. |
askksa12543 | 2:11f32d8cfa11 | 2 | //currently fixed size data field but doesn't have to be. (post amble if not fixed size) |
askksa12543 | 2:11f32d8cfa11 | 3 | |
askksa12543 | 0:7c7f4b30d64f | 4 | #include "mbed.h" |
askksa12543 | 0:7c7f4b30d64f | 5 | #include "stdio.h" |
askksa12543 | 0:7c7f4b30d64f | 6 | |
askksa12543 | 2:11f32d8cfa11 | 7 | #define MAX 100 //set the size of the character data storage array |
askksa12543 | 3:027d30718bbc | 8 | #define PREAMBLE 0x7E //preamble of 01111110 |
askksa12543 | 2:11f32d8cfa11 | 9 | |
askksa12543 | 2:11f32d8cfa11 | 10 | DigitalOut myled(LED1); // red led on board |
askksa12543 | 2:11f32d8cfa11 | 11 | DigitalOut clock_pin(D8), serial_out(D7); //send clock pulse and tx |
askksa12543 | 0:7c7f4b30d64f | 12 | Timer t; //timer for controlling the clock and data skew |
askksa12543 | 2:11f32d8cfa11 | 13 | int msecs, sksecs; //clock time needed for data transfer and skew time |
askksa12543 | 0:7c7f4b30d64f | 14 | int skew_flag; //skew flag for while loop |
askksa12543 | 3:027d30718bbc | 15 | unsigned char pre = PREAMBLE; |
askksa12543 | 3:027d30718bbc | 16 | unsigned char data[100] = "Hi!"; //data output |
askksa12543 | 3:027d30718bbc | 17 | int done = 0, i = 0, j = 128; //increment variables |
askksa12543 | 0:7c7f4b30d64f | 18 | |
askksa12543 | 0:7c7f4b30d64f | 19 | int main() { |
askksa12543 | 0:7c7f4b30d64f | 20 | |
askksa12543 | 0:7c7f4b30d64f | 21 | //turn on red led to show programming has worked |
askksa12543 | 0:7c7f4b30d64f | 22 | myled = 0; |
askksa12543 | 0:7c7f4b30d64f | 23 | //initialize output pins |
askksa12543 | 0:7c7f4b30d64f | 24 | clock_pin = 0; |
askksa12543 | 0:7c7f4b30d64f | 25 | serial_out = 0; |
askksa12543 | 0:7c7f4b30d64f | 26 | //skew flag |
askksa12543 | 0:7c7f4b30d64f | 27 | skew_flag = 1; |
askksa12543 | 0:7c7f4b30d64f | 28 | //set timers |
askksa12543 | 1:4c0c28cc2b2c | 29 | msecs = 2000; |
askksa12543 | 1:4c0c28cc2b2c | 30 | sksecs = 1800; |
askksa12543 | 0:7c7f4b30d64f | 31 | |
askksa12543 | 3:027d30718bbc | 32 | //output preamble |
askksa12543 | 3:027d30718bbc | 33 | while(!done) |
askksa12543 | 3:027d30718bbc | 34 | { |
askksa12543 | 3:027d30718bbc | 35 | //start timer for clock |
askksa12543 | 3:027d30718bbc | 36 | t.start(); |
askksa12543 | 3:027d30718bbc | 37 | //wait until the timer has reached the set time. |
askksa12543 | 3:027d30718bbc | 38 | while(t.read_ms() < msecs) |
askksa12543 | 3:027d30718bbc | 39 | { |
askksa12543 | 3:027d30718bbc | 40 | //extract data just before clock goes high |
askksa12543 | 3:027d30718bbc | 41 | if(!clock_pin && skew_flag && t.read_ms() > sksecs) |
askksa12543 | 3:027d30718bbc | 42 | { |
askksa12543 | 3:027d30718bbc | 43 | //extract data bit |
askksa12543 | 3:027d30718bbc | 44 | serial_out = (pre / j) % 2; |
askksa12543 | 3:027d30718bbc | 45 | skew_flag = 0; |
askksa12543 | 3:027d30718bbc | 46 | j /= 2; //decrement j to get to next bit location |
askksa12543 | 3:027d30718bbc | 47 | } |
askksa12543 | 3:027d30718bbc | 48 | } |
askksa12543 | 3:027d30718bbc | 49 | //stop and reset the timer |
askksa12543 | 3:027d30718bbc | 50 | t.stop(); |
askksa12543 | 3:027d30718bbc | 51 | t.reset(); |
askksa12543 | 3:027d30718bbc | 52 | //switch clock signal |
askksa12543 | 3:027d30718bbc | 53 | clock_pin = !clock_pin; |
askksa12543 | 3:027d30718bbc | 54 | //reset skew flag |
askksa12543 | 3:027d30718bbc | 55 | skew_flag = 1; |
askksa12543 | 3:027d30718bbc | 56 | //last preamble bit sent - reset/increment variables |
askksa12543 | 3:027d30718bbc | 57 | if(j==0) |
askksa12543 | 3:027d30718bbc | 58 | { |
askksa12543 | 3:027d30718bbc | 59 | |
askksa12543 | 3:027d30718bbc | 60 | done = 1; |
askksa12543 | 3:027d30718bbc | 61 | j = 128; |
askksa12543 | 3:027d30718bbc | 62 | } |
askksa12543 | 3:027d30718bbc | 63 | } |
askksa12543 | 3:027d30718bbc | 64 | |
askksa12543 | 3:027d30718bbc | 65 | //reset done |
askksa12543 | 3:027d30718bbc | 66 | done = 0; |
askksa12543 | 3:027d30718bbc | 67 | |
askksa12543 | 0:7c7f4b30d64f | 68 | //output a clock pulse and data. |
askksa12543 | 3:027d30718bbc | 69 | while(!done) |
askksa12543 | 0:7c7f4b30d64f | 70 | { |
askksa12543 | 0:7c7f4b30d64f | 71 | //start timer for clock |
askksa12543 | 0:7c7f4b30d64f | 72 | t.start(); |
askksa12543 | 0:7c7f4b30d64f | 73 | //wait until the timer has reached the set time. |
askksa12543 | 0:7c7f4b30d64f | 74 | while(t.read_ms() < msecs) |
askksa12543 | 0:7c7f4b30d64f | 75 | { |
askksa12543 | 2:11f32d8cfa11 | 76 | //extract data just before clock goes high |
askksa12543 | 0:7c7f4b30d64f | 77 | if(!clock_pin && skew_flag && t.read_ms() > sksecs) |
askksa12543 | 0:7c7f4b30d64f | 78 | { |
askksa12543 | 2:11f32d8cfa11 | 79 | //extract data bit |
askksa12543 | 2:11f32d8cfa11 | 80 | serial_out = (data[i] / j) % 2; |
askksa12543 | 0:7c7f4b30d64f | 81 | skew_flag = 0; |
askksa12543 | 2:11f32d8cfa11 | 82 | j /= 2; //decrement j to get to next bit location |
askksa12543 | 0:7c7f4b30d64f | 83 | } |
askksa12543 | 0:7c7f4b30d64f | 84 | } |
askksa12543 | 0:7c7f4b30d64f | 85 | //stop and reset the timer |
askksa12543 | 0:7c7f4b30d64f | 86 | t.stop(); |
askksa12543 | 0:7c7f4b30d64f | 87 | t.reset(); |
askksa12543 | 0:7c7f4b30d64f | 88 | //switch clock signal |
askksa12543 | 0:7c7f4b30d64f | 89 | clock_pin = !clock_pin; |
askksa12543 | 0:7c7f4b30d64f | 90 | //reset skew flag |
askksa12543 | 0:7c7f4b30d64f | 91 | skew_flag = 1; |
askksa12543 | 2:11f32d8cfa11 | 92 | //last bit sent - reset/increment variables |
askksa12543 | 2:11f32d8cfa11 | 93 | if(j==0) |
askksa12543 | 2:11f32d8cfa11 | 94 | { |
askksa12543 | 2:11f32d8cfa11 | 95 | j=128; |
askksa12543 | 2:11f32d8cfa11 | 96 | i++; |
askksa12543 | 2:11f32d8cfa11 | 97 | } |
askksa12543 | 3:027d30718bbc | 98 | //finished sending data |
askksa12543 | 3:027d30718bbc | 99 | if(i>2) |
askksa12543 | 3:027d30718bbc | 100 | { |
askksa12543 | 3:027d30718bbc | 101 | done = 1; |
askksa12543 | 3:027d30718bbc | 102 | } |
askksa12543 | 0:7c7f4b30d64f | 103 | } |
askksa12543 | 3:027d30718bbc | 104 | //turn off red led to show sending has finished |
askksa12543 | 3:027d30718bbc | 105 | myled = 1; |
askksa12543 | 1:4c0c28cc2b2c | 106 | } |
askksa12543 | 1:4c0c28cc2b2c | 107 | |
askksa12543 | 2:11f32d8cfa11 | 108 | //crc = x^4+x+1 |