APP Team
/
app3
led example with 2 timers
receiver.cpp@5:726d7857fd33, 2014-02-12 (annotated)
- Committer:
- passelin
- Date:
- Wed Feb 12 07:07:48 2014 +0000
- Revision:
- 5:726d7857fd33
- Parent:
- 4:af325c921e79
02:07
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
passelin | 1:6e31c704f4d6 | 1 | #include "main.h" |
passelin | 1:6e31c704f4d6 | 2 | |
passelin | 2:124a066878cc | 3 | extern Serial pc; |
passelin | 5:726d7857fd33 | 4 | DigitalOut myled2(LED2); |
passelin | 5:726d7857fd33 | 5 | char s[300]; |
passelin | 5:726d7857fd33 | 6 | enum steps {STEP_A,STEP_B,STEP_C}; |
passelin | 5:726d7857fd33 | 7 | steps state; |
passelin | 5:726d7857fd33 | 8 | int t[7]; |
passelin | 5:726d7857fd33 | 9 | int temps; |
passelin | 5:726d7857fd33 | 10 | int b_count; |
passelin | 5:726d7857fd33 | 11 | int last_value; |
passelin | 5:726d7857fd33 | 12 | |
passelin | 5:726d7857fd33 | 13 | // TEST |
passelin | 5:726d7857fd33 | 14 | bool msgReady; |
passelin | 5:726d7857fd33 | 15 | string testString; |
passelin | 4:af325c921e79 | 16 | |
passelin | 2:124a066878cc | 17 | |
passelin | 2:124a066878cc | 18 | void Receiver_init(void) |
passelin | 2:124a066878cc | 19 | { |
passelin | 2:124a066878cc | 20 | myled2 = 0; |
passelin | 5:726d7857fd33 | 21 | // s = ""; |
passelin | 5:726d7857fd33 | 22 | msgReady = false; |
passelin | 5:726d7857fd33 | 23 | state = STEP_A; |
passelin | 2:124a066878cc | 24 | |
passelin | 5:726d7857fd33 | 25 | |
passelin | 5:726d7857fd33 | 26 | |
passelin | 5:726d7857fd33 | 27 | // Enable the pins on the device to use TIMER CAP2.0 on pin 30 |
passelin | 5:726d7857fd33 | 28 | LPC_PINCON->PINSEL0 |= 3<<8; |
passelin | 5:726d7857fd33 | 29 | |
passelin | 5:726d7857fd33 | 30 | NVIC_SetVector(TIMER2_IRQn, uint32_t(TIMER2_IRQHandler)); |
passelin | 5:726d7857fd33 | 31 | |
passelin | 5:726d7857fd33 | 32 | // init Timer 2 (cap2.0 = DIP30, cap2.1 = DIP29) |
passelin | 5:726d7857fd33 | 33 | LPC_SC->PCONP |= (1 << 22); // Timer2 power on |
passelin | 5:726d7857fd33 | 34 | //LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2 |
passelin | 5:726d7857fd33 | 35 | LPC_TIM2->TC = 0; // clear timer counter |
passelin | 5:726d7857fd33 | 36 | LPC_TIM2->PC = 0; // clear prescale counter |
passelin | 5:726d7857fd33 | 37 | LPC_TIM2->PR = 0; // clear prescale register |
passelin | 5:726d7857fd33 | 38 | LPC_TIM2->TCR = (1 << 1); // reset timer |
passelin | 5:726d7857fd33 | 39 | LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag |
passelin | 5:726d7857fd33 | 40 | LPC_TIM2->CCR |= (7 << 0); // enable cap2.0 rising-edge capture and falling-edge; interrupt on cap2.0 |
passelin | 5:726d7857fd33 | 41 | //LPC_TIM2->TCR = 1; // start Timer2 |
passelin | 5:726d7857fd33 | 42 | |
passelin | 5:726d7857fd33 | 43 | NVIC_EnableIRQ(TIMER2_IRQn); //enable timer2 interrupt |
passelin | 5:726d7857fd33 | 44 | |
passelin | 5:726d7857fd33 | 45 | b_count = 0; |
passelin | 2:124a066878cc | 46 | } |
passelin | 2:124a066878cc | 47 | |
passelin | 4:af325c921e79 | 48 | extern "C" void TIMER2_IRQHandler (void) |
passelin | 5:726d7857fd33 | 49 | { |
passelin | 5:726d7857fd33 | 50 | int ecart = 0; |
passelin | 5:726d7857fd33 | 51 | char buffer[1]; |
passelin | 5:726d7857fd33 | 52 | myled2 =!myled2; |
passelin | 5:726d7857fd33 | 53 | string endChar; |
passelin | 5:726d7857fd33 | 54 | |
passelin | 5:726d7857fd33 | 55 | LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag |
passelin | 5:726d7857fd33 | 56 | |
passelin | 5:726d7857fd33 | 57 | switch (state) |
passelin | 5:726d7857fd33 | 58 | { |
passelin | 5:726d7857fd33 | 59 | case STEP_A: LPC_TIM2->TCR = 1; // start Timer2 |
passelin | 5:726d7857fd33 | 60 | state = STEP_B; |
passelin | 5:726d7857fd33 | 61 | b_count = 0; |
passelin | 5:726d7857fd33 | 62 | s[0] = '0'; |
passelin | 5:726d7857fd33 | 63 | break; |
passelin | 5:726d7857fd33 | 64 | |
passelin | 5:726d7857fd33 | 65 | case STEP_B: t[b_count-1] = LPC_TIM2->CR0; |
passelin | 5:726d7857fd33 | 66 | LPC_TIM2->TCR = (1 << 1); |
passelin | 5:726d7857fd33 | 67 | LPC_TIM2->TCR = 1; |
passelin | 5:726d7857fd33 | 68 | if(b_count>6) |
passelin | 5:726d7857fd33 | 69 | { |
passelin | 5:726d7857fd33 | 70 | state = STEP_C; |
passelin | 5:726d7857fd33 | 71 | //temps = (t[0] + t[1] + t[2] + t[3] + t[4] + t[5] + t[6])/7; |
passelin | 5:726d7857fd33 | 72 | temps = TIME; |
passelin | 5:726d7857fd33 | 73 | s[1] = '1';s[2] = '0';s[3] = '1';s[4] = '0';s[5] = '1';s[6] = '0';s[7] = '1'; |
passelin | 5:726d7857fd33 | 74 | last_value = 1; |
passelin | 5:726d7857fd33 | 75 | } |
passelin | 5:726d7857fd33 | 76 | |
passelin | 5:726d7857fd33 | 77 | |
passelin | 5:726d7857fd33 | 78 | break; |
passelin | 5:726d7857fd33 | 79 | case STEP_C: /*ecart = LPC_TIM2->CR0; |
passelin | 5:726d7857fd33 | 80 | if(ecart*1.5<temps) |
passelin | 5:726d7857fd33 | 81 | { |
passelin | 5:726d7857fd33 | 82 | sprintf(buffer, "%d", last_value); |
passelin | 5:726d7857fd33 | 83 | s+= buffer[0]; |
passelin | 5:726d7857fd33 | 84 | } |
passelin | 5:726d7857fd33 | 85 | else |
passelin | 5:726d7857fd33 | 86 | { |
passelin | 5:726d7857fd33 | 87 | last_value = 1-last_value; |
passelin | 5:726d7857fd33 | 88 | sprintf(buffer, "%d", last_value); |
passelin | 5:726d7857fd33 | 89 | s+= buffer[0]; |
passelin | 5:726d7857fd33 | 90 | } |
passelin | 1:6e31c704f4d6 | 91 | |
passelin | 5:726d7857fd33 | 92 | endChar = s.substr((s.size()-8), 8); |
passelin | 5:726d7857fd33 | 93 | if(endChar == "00111110") |
passelin | 5:726d7857fd33 | 94 | {*/ |
passelin | 5:726d7857fd33 | 95 | state = STEP_A; |
passelin | 5:726d7857fd33 | 96 | testString = s; |
passelin | 5:726d7857fd33 | 97 | // s = ""; |
passelin | 5:726d7857fd33 | 98 | msgReady= true; |
passelin | 5:726d7857fd33 | 99 | // } |
passelin | 5:726d7857fd33 | 100 | |
passelin | 5:726d7857fd33 | 101 | LPC_TIM2->TCR = (1 << 1); |
passelin | 5:726d7857fd33 | 102 | LPC_TIM2->TCR = 1; |
passelin | 5:726d7857fd33 | 103 | |
passelin | 5:726d7857fd33 | 104 | break; |
passelin | 5:726d7857fd33 | 105 | } |
passelin | 5:726d7857fd33 | 106 | b_count++; |
passelin | 1:6e31c704f4d6 | 107 | } |
passelin | 1:6e31c704f4d6 | 108 | |
passelin | 1:6e31c704f4d6 | 109 | void Receiver_thread(void const *args) |
passelin | 1:6e31c704f4d6 | 110 | { |
passelin | 1:6e31c704f4d6 | 111 | Receiver_init(); |
passelin | 1:6e31c704f4d6 | 112 | |
passelin | 1:6e31c704f4d6 | 113 | while(1) |
passelin | 1:6e31c704f4d6 | 114 | { |
passelin | 5:726d7857fd33 | 115 | if(msgReady == true) |
passelin | 5:726d7857fd33 | 116 | { |
passelin | 5:726d7857fd33 | 117 | pc.printf("\n\rmessage recu: %d", b_count); |
passelin | 5:726d7857fd33 | 118 | b_count =0; |
passelin | 5:726d7857fd33 | 119 | msgReady= false; |
passelin | 5:726d7857fd33 | 120 | } |
passelin | 1:6e31c704f4d6 | 121 | } |
passelin | 1:6e31c704f4d6 | 122 | } |