APP 4
Dependencies: mbed CRC16 mbed-rtos
Diff: APP.cpp
- Revision:
- 20:f0932bfe09ed
- Parent:
- 19:41e914ab0d19
- Child:
- 21:137d010e7469
- Child:
- 22:b855dbf3a8c1
- Child:
- 23:d41a23d8f2d7
diff -r 41e914ab0d19 -r f0932bfe09ed APP.cpp --- a/APP.cpp Mon Feb 22 18:38:53 2016 +0000 +++ b/APP.cpp Tue Feb 23 00:22:49 2016 +0000 @@ -8,17 +8,21 @@ DigitalIn in(p30); bool clockTick = false; -bitset<FRAMESIZE> message;// (string("1010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")); +bitset<FRAMESIZE> message; bitset<MAX_DATA> decodedMessage; +int debugMessage; +bool debugMessageReady = false; bool dataReady; bool frameDropped; int counter = 0; unsigned int period = 0; -bool readBuffer[2] = {false, false}; -bool readBufferReady = false; +unsigned int currentClocks = 0; +bool periodCalculated = false; +bool firstBit = true; bool value = false; MEF mef; STATES mefSTATE; +int payloadSize = 0; int benchmark(void (*function) (void)) { @@ -33,7 +37,7 @@ { LPC_TIM1->IR |= 1 << 0; // Clear MR0 interrupt flag clockTick = !clockTick; - out = encode(message[counter] & 0x1, clockTick); + out = encode(message[counter], clockTick); if (clockTick) { @@ -42,7 +46,7 @@ if (counter >= FRAMESIZE) { - counter = 0; + LPC_TIM1->MR0 = 1000000000; } } } @@ -50,20 +54,34 @@ extern "C" void TIMER2_IRQHandler() { unsigned int clocks = LPC_TIM2->CR0; - period = clocks; // preambule 01010101 + bool inputValue = in.read(); - if (!readBufferReady) + // Discard first bit + if (!periodCalculated && !firstBit) { - readBuffer[0] = in.read(); + period = clocks / 2; + periodCalculated = true; } - else + + if (firstBit) { - readBuffer[1] = in.read(); - value = decode(readBuffer[0], readBuffer[1]); - mef.ReceiveBit(value); + mef.ReceiveBit(!inputValue); + firstBit = false; } - readBufferReady = !readBufferReady; + if (periodCalculated) + { + if (clocks >= period*1.5 || (currentClocks + clocks) >= period*1.5) + { + currentClocks = 0; + mef.ReceiveBit(!inputValue); + } + else + { + currentClocks += clocks; + } + } + LPC_TIM2->TC = 0; LPC_TIM2->IR |= 0xFFFFFFFF; // clear Timer interrupt register @@ -74,7 +92,7 @@ //Timer 1 (match) LPC_SC->PCLKSEL0 |= (1 << 4); // pclk = cclk timer1 LPC_SC->PCONP |= (1 << 2); // timer1 power on - LPC_TIM1->MR0 = CLOCKS_TO_SECOND / 10; // 100 ms + LPC_TIM1->MR0 = CLOCKS_TO_SECOND / 1000; // 100 ms LPC_TIM1->MCR = 3; // interrupt and reset control // Interrupt & reset timer on match LPC_TIM1->EMR = (3 << 4); @@ -97,7 +115,7 @@ int main() { - message = buildFrame(convertToBits("ASDF", 4, &pc), 4, &pc); + message = buildFrame(convertToBits("BLUBLUBLUBLUBLU", 17), 17); LPC_PINCON->PINSEL0 |= (3 << 8); // P0.4 = CAP2.0 initTimers(); @@ -106,24 +124,44 @@ { if (dataReady) { - pc.printf("ASDF"); + for (int i = 0; i < payloadSize * 8; i++) + { + + if((i + 1) % 8 == 0) + { + char tempChar = (decodedMessage[i] << 0) | (decodedMessage[i - 1] << 1) | (decodedMessage[i - 2] << 2) | (decodedMessage[i - 3] << 3) | (decodedMessage[i - 4] << 4) | (decodedMessage[i - 5] << 5) | (decodedMessage[i - 6] << 6) | (decodedMessage[i - 7] << 7); + pc.printf("%c", tempChar); + } + } + dataReady = false; } if (tempState != mefSTATE) { - pc.printf("BluBlu new state: %i \r\n", mefSTATE); + pc.printf("\r\nNew state: %i \r\n", mefSTATE); tempState = mefSTATE; } - pc.printf("%i ", period); - pc.printf("%i ", value); - pc.printf("%i \r\n", in.read()); - //pc.printf("%i ", decode(in.read(), clockTick)); - wait(0.1); + if(frameDropped) + { + pc.printf("Frame dropped\r\n"); + frameDropped = false; + } + if(debugMessageReady) + { + pc.printf("%i\r\n", debugMessage); + debugMessageReady = false; + } } } -void _decodeCallback(bitset<MAX_DATA> decMessage) +void bSToChar(bitset<8> bs) +{ + +} + +void _decodeCallback(bitset<MAX_DATA> decMessage, int size) { decodedMessage = decMessage; + payloadSize = size; dataReady = true; } @@ -137,7 +175,8 @@ mefSTATE = state; } -void _readDephased() +void _mefDebug(int blu) { - readBufferReady = !readBufferReady; -} \ No newline at end of file + debugMessage = blu; + debugMessageReady = true; +}