Some code for a eavesdropper device.
Dependencies: FastIO FastPWM mbed
Revision 0:050184ab5c0d, committed 2014-09-02
- Comitter:
- Josvth
- Date:
- Tue Sep 02 08:20:13 2014 +0000
- Commit message:
- Commit!
Changed in this revision
diff -r 000000000000 -r 050184ab5c0d FastIO.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FastIO.lib Tue Sep 02 08:20:13 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/FastIO/#b0d725519c4f
diff -r 000000000000 -r 050184ab5c0d FastPWM.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FastPWM.lib Tue Sep 02 08:20:13 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/FastPWM/#cdefd9d75b64
diff -r 000000000000 -r 050184ab5c0d main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Sep 02 08:20:13 2014 +0000 @@ -0,0 +1,131 @@ +#include "mbed.h" +#include "FastIO.h" +#include "FastPWM.h" + +FastOut<LED1> led; + +//Pin 29 and 30 are connected to pin 21 +FastIn<p29> CAP_2_1_input; +FastIn<p30> CAP_2_0_input; +FastPWM pwm(p21); + + +Serial pc(USBTX, USBRX); // tx, rx + +#define TIM2CR0 LPC_TIM2->CR0 +#define TIM2CR1 LPC_TIM2->CR1 + +//void _cap_2_1_falling() { + // pc.printf("Interrupt: %X\n", LPC_TIM2->IR); + //led = 1; +//} + +int main() +{ + + unsigned int ticks = 226; + + // This signal should give a manchester encoded 101010101 + pwm.period_ticks(ticks); + pwm.pulsewidth_ticks(ticks / 2); + + // Setup TIM2 + + // SC + LPC_SC->PCONP |= (1<<22); // Power on the Timer2 + LPC_SC->PCLKSEL1 &= ~(3<<12); // Select CCLK/4 for TIM2 (whipes previous clock setting) + LPC_SC->PCLKSEL1 |= (1<<12); // Select CCLK for TIM2 + + // CCR + LPC_TIM2->CCR |= (3 << 1); // Set CAP2.0 on falling edge with interrupt + LPC_TIM2->CCR |= (1 << 3); // Set CAP2.1 on rising edge + + pc.printf("CCR: %X\n", LPC_TIM2->CCR); + + // TCR + LPC_TIM2->TCR = 0x0002; // Reset TIM2 + LPC_TIM2->TCR = 0x0001; // Enable TIM2 + + bool buffer [16]; + int bits = 0; + + //NVIC_DisableIRQ(TIMER2_IRQn); + //NVIC_SetVector(TIMER2_IRQn, (uint32_t)&_cap_2_1_falling); + //NVIC_EnableIRQ(TIMER2_IRQn); + + while(1) { + + //pc.printf("Interrupt: %X\n", LPC_TIM2->IR); + + // Poll CRO (falling edge) intterupt + if (LPC_TIM2->IR & (1 << 4)) { + + led = 1; + + wait(100); + + led = 0; + + int diff = (TIM2CR0 - TIM2CR1) % 0xFFFFFFFF; + + if (diff > 90 && diff < 136) { // Check if diff is equal to T=1/848kHz with 20% error + // bit transition + + if (bits == 0) { // Start of sequence + buffer[0] = 1; + } else { + buffer[bits] = !buffer[bits-1]; + } + + pc.printf("Trasition: %u\n", diff); + + } else if (diff > 45 && diff < 68) { // Check if diff is equal to T/2 + // repeat last bit + + if (bits == 0) { // Start of sequence + buffer[0] = 1; + } else { + buffer[bits] = buffer[bits-1]; + } + + pc.printf("Repeat: %u\n", diff); + + } else { + // error, default to 1 + pc.printf("Error: %u\n", diff); + } + + bits = bits + 1 % 16; + + LPC_TIM2->IR |= (1 << 4); // Clear IR by writing a one + + } + +// if (bits == 0) { +// +// for (int i = 0; i< 16; i++) { +// pc.printf("%u", (int) buffer[i]); +// } +// +// pc.printf("\n"); +// +// } + +// // Poll CRO (rising edge) intterupt +// if (LCP_TIM2-IR != (1 << 5)) { +// +// int diff = (TIM2CR1 - TIM2CR2) % 0xFFFFFFFF; +// +// // Do checks +// +// // End checks +// +// +// LCP_TIM2->IR &= ~(1 << 5); +// } + + + + } + +}
diff -r 000000000000 -r 050184ab5c0d mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Sep 02 08:20:13 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013 \ No newline at end of file