Kevin Anderson
/
DataCommFreedom
Using FRDM Board to output data and a clock for communications example.
Diff: main.cpp
- Revision:
- 3:027d30718bbc
- Parent:
- 2:11f32d8cfa11
- Child:
- 4:39a777388acd
--- a/main.cpp Sun Mar 15 03:02:48 2015 +0000 +++ b/main.cpp Tue Mar 17 03:02:38 2015 +0000 @@ -5,14 +5,16 @@ #include "stdio.h" #define MAX 100 //set the size of the character data storage array +#define PREAMBLE 0x7E //preamble of 01111110 DigitalOut myled(LED1); // red led on board DigitalOut clock_pin(D8), serial_out(D7); //send clock pulse and tx Timer t; //timer for controlling the clock and data skew int msecs, sksecs; //clock time needed for data transfer and skew time int skew_flag; //skew flag for while loop -char data[100] = "Hi!"; //data output -int i = 0, j = 128; //increment variables +unsigned char pre = PREAMBLE; +unsigned char data[100] = "Hi!"; //data output +int done = 0, i = 0, j = 128; //increment variables int main() { @@ -27,8 +29,44 @@ msecs = 2000; sksecs = 1800; + //output preamble + while(!done) + { + //start timer for clock + t.start(); + //wait until the timer has reached the set time. + while(t.read_ms() < msecs) + { + //extract data just before clock goes high + if(!clock_pin && skew_flag && t.read_ms() > sksecs) + { + //extract data bit + serial_out = (pre / j) % 2; + skew_flag = 0; + j /= 2; //decrement j to get to next bit location + } + } + //stop and reset the timer + t.stop(); + t.reset(); + //switch clock signal + clock_pin = !clock_pin; + //reset skew flag + skew_flag = 1; + //last preamble bit sent - reset/increment variables + if(j==0) + { + + done = 1; + j = 128; + } + } + + //reset done + done = 0; + //output a clock pulse and data. - while(i < 3) + while(!done) { //start timer for clock t.start(); @@ -57,7 +95,14 @@ j=128; i++; } + //finished sending data + if(i>2) + { + done = 1; + } } + //turn off red led to show sending has finished + myled = 1; } //crc = x^4+x+1 \ No newline at end of file