CarApp
Notificaciones a celulares al detectar la alarma del auto activada.
 Todo Estructuras de Datos Archivos Funciones Variables Enumeraciones Valores de enumeraciones 'defines'
timer.c
Ir a la documentación de este archivo.
1 //******************************************************************************
2 // Nombre: timer.c
3 // Versión: 1.0
4 // Descripción: Módulo encargado del control de tiempos del sistema. El mismo
5 // se usa tanto para medir el tiempo entre las distintas notificaciones,
6 // como también para implementar los time out en caso de que el sistema
7 // tenga algún problema imprevisto.
8 // Autores: Juan Martín Ortega, Ramiro Barrón, Andrea Cukerman
9 // IIE, Facultad de Ingeniería, UdelaR
10 // Uruguay
11 // Fecha: Junio 2012
12 //******************************************************************************
13 
24 #include "timer.h"
25 #include <stdlib.h>
26 #include <io430x22x4.h>
27 #include "car-app.h"
28 #include "uart.h"
29 
30 /*
31  * Definición de Constantes Privadas
32  */
33 #define MINUTE_TO_SECOND 60
34 
35 /*
36  * Declaración de variables Privadas
37  */
38 
43 static int control_time_counter;
44 
50 static int control_time = 60;
51 
56 static int timeout_counter = 0;
57 
63 extern int alarm_control_state;
64 
65 
72  {
73  control_time_counter++; //
74  if(control_time_counter >= control_time) //
75  { //
76  TACCTL1 &= 0xEF; //
77  if(P2IN_bit.P4) //
78  { //
79  P1OUT ^= 0x02; //
80  set_control_flag(); //
81  }
82  else
83  { //
84  P2IE |= 0x10; // P1.2 interrupt enabled
85  alarm_control_state = 0; //
86  set_control_flag(); //
87  }
88  }
89  }
90 
96  {
97  timeout_counter++; //
98  if(timeout_counter>5) //
99  { //
100  TBCCTL1 &= 0xEF; //
101  cargarTXbuffer("\x1B"); //
102  //reiniciar sistema; //
103  set_eofl('\n'); //
104  set_number_eofl(3); //
105  reset_sendingFlag(); //
106  }
107  }
108 
115 void set_control_time(char* time)
116  {
117  int time_aux = atoi(time); // Convierte el tiempo recibido como char a int
118  control_time = time_aux * MINUTE_TO_SECOND; // Guarda el tiempo en segundos
119  }
120 
127  {
128  return control_time/MINUTE_TO_SECOND; // Retorna el tiempo en minutos
129  }
130 
136  {
137  control_time_counter = 0; // Reinicia el contador del tiempo entre avisos
138  TACCTL1 |= CCIE; // Habilita interrupcion del timer A
139  }
140 
148  {
149  P1DIR |= 0x01; // Selecciona P1.0 luz roja salida
150  P1OUT &= 0xFE; // Apaga luz roja
151  BCSCTL3 |= LFXT1S_2; // Configura VLO del timer en 12000Hz
152  TACCR1 = 12000; // Configura frecuencia de interrupción del timer
153  TACTL |= TASSEL_1 + MC_2; // Configura modo del timer en ACLK, modo continuo
154  TACCTL1 = 0x00; // Deshabilita interrupción del timer
155  }
156 
164  {
165  TBCCR1 = 48000; // Configura frecuencia de interrupción del timer
166  TBCTL |= TBSSEL_1 + MC_2; // Configura modo del timer en ACLK, modo continuo
167  TBCCTL1 = 0x00; // Deshabilita interrupción del timer
168  }
169 
175  {
176  timeout_counter = 0; // Reinicia contador de timeout
177  TBCCTL1 |= CCIE; // Habilita interrupcion del timer B
178  }
179 
180 
184 #pragma vector=TIMERA1_VECTOR
185 __interrupt void Timer_A(void)
186  {
187  switch (TAIV) //
188  {
189  case 2: P1OUT ^= 0x01; //
190  TACCR1 += 12000; //
191  control_counter(); //
192  case 4: break; // TACCR2 not used
193  case 10: break; // overflow not used
194  default: break;
195  }
196  }
197 
201 #pragma vector=TIMERB1_VECTOR
202 __interrupt void Timer_B(void)
203  {
204  switch (TBIV) //
205  {
206  case 2: TBCCR1 += 48000; //
207  control_timeout(); //
208  case 4: break; // TACCR2 not used
209  case 10: break; // Overflow not used
210  default: break;
211  }
212  }