led example with 2 timers

Dependencies:   mbed mbed-rtos

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?

UserRevisionLine numberNew 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 }