Some code for a eavesdropper device.
Dependencies: FastIO FastPWM mbed
main.cpp
- Committer:
- Josvth
- Date:
- 2014-09-02
- Revision:
- 0:050184ab5c0d
File content as of revision 0:050184ab5c0d:
#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); // } } }