APP Team
/
app3
led example with 2 timers
Diff: receiver.cpp
- Revision:
- 5:726d7857fd33
- Parent:
- 4:af325c921e79
diff -r af325c921e79 -r 726d7857fd33 receiver.cpp --- a/receiver.cpp Tue Feb 11 20:38:43 2014 +0000 +++ b/receiver.cpp Wed Feb 12 07:07:48 2014 +0000 @@ -1,34 +1,109 @@ #include "main.h" extern Serial pc; -DigitalOut myled2(LED2); +DigitalOut myled2(LED2); +char s[300]; +enum steps {STEP_A,STEP_B,STEP_C}; +steps state; +int t[7]; +int temps; +int b_count; +int last_value; + +// TEST +bool msgReady; +string testString; void Receiver_init(void) { myled2 = 0; + // s = ""; + msgReady = false; + state = STEP_A; - LPC_SC->PCONP |=1<<22; //timer1 power on - LPC_TIM2->MR0 = 2398000; //100 msec - LPC_TIM2->MCR = 3; //interrupt and reset control - //3 = Interrupt & reset timer1 on match - //1 = Interrupt only, no reset of timer0 - NVIC_EnableIRQ(TIMER2_IRQn); //enable timer1 interrupt - LPC_TIM2->TCR = 1; //enable Timer1 + + + // Enable the pins on the device to use TIMER CAP2.0 on pin 30 + LPC_PINCON->PINSEL0 |= 3<<8; + + NVIC_SetVector(TIMER2_IRQn, uint32_t(TIMER2_IRQHandler)); + + // init Timer 2 (cap2.0 = DIP30, cap2.1 = DIP29) + LPC_SC->PCONP |= (1 << 22); // Timer2 power on + //LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2 + LPC_TIM2->TC = 0; // clear timer counter + LPC_TIM2->PC = 0; // clear prescale counter + LPC_TIM2->PR = 0; // clear prescale register + LPC_TIM2->TCR = (1 << 1); // reset timer + LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag + LPC_TIM2->CCR |= (7 << 0); // enable cap2.0 rising-edge capture and falling-edge; interrupt on cap2.0 + //LPC_TIM2->TCR = 1; // start Timer2 + + NVIC_EnableIRQ(TIMER2_IRQn); //enable timer2 interrupt + + b_count = 0; } extern "C" void TIMER2_IRQHandler (void) -{ - - - if((LPC_TIM2->IR & 0x01) == 0x01) // if MR0 interrupt, proceed - { - LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag +{ + int ecart = 0; + char buffer[1]; + myled2 =!myled2; + string endChar; + + LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag + + switch (state) + { + case STEP_A: LPC_TIM2->TCR = 1; // start Timer2 + state = STEP_B; + b_count = 0; + s[0] = '0'; + break; + + case STEP_B: t[b_count-1] = LPC_TIM2->CR0; + LPC_TIM2->TCR = (1 << 1); + LPC_TIM2->TCR = 1; + if(b_count>6) + { + state = STEP_C; + //temps = (t[0] + t[1] + t[2] + t[3] + t[4] + t[5] + t[6])/7; + temps = TIME; + s[1] = '1';s[2] = '0';s[3] = '1';s[4] = '0';s[5] = '1';s[6] = '0';s[7] = '1'; + last_value = 1; + } + + + break; + case STEP_C: /*ecart = LPC_TIM2->CR0; + if(ecart*1.5<temps) + { + sprintf(buffer, "%d", last_value); + s+= buffer[0]; + } + else + { + last_value = 1-last_value; + sprintf(buffer, "%d", last_value); + s+= buffer[0]; + } - - myled2 =!myled2; - - } + endChar = s.substr((s.size()-8), 8); + if(endChar == "00111110") + {*/ + state = STEP_A; + testString = s; + // s = ""; + msgReady= true; + // } + + LPC_TIM2->TCR = (1 << 1); + LPC_TIM2->TCR = 1; + + break; + } + b_count++; } void Receiver_thread(void const *args) @@ -37,6 +112,11 @@ while(1) { - // wait forever... + if(msgReady == true) + { + pc.printf("\n\rmessage recu: %d", b_count); + b_count =0; + msgReady= false; + } } } \ No newline at end of file