Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Revision:
3:8d5a9e3cd680
Parent:
2:a1b556d78a7f
Child:
4:552beeda4722
--- a/setup.cpp	Sat Mar 24 04:40:21 2012 +0000
+++ b/setup.cpp	Sat Mar 24 17:37:20 2012 +0000
@@ -1,108 +1,110 @@
-/// Codigo Fuente para configurar al 
-
-#include "setup.h"
-#include "mbed.h"
-
-
-// Esta variable global determina
-// los incrementos del Preescaler
-extern uint32_t PRESCALER_STEP; 
-
-// Salida Serial de mbed
-extern Serial pc;
-
-
-/** @brief: Esta función configura al Timer2
- *  para que las salidas p5 y p6 del mbed
- *  se alternen cada vez que se iguala al
- *  registro MR2 y MR3.
- */
-void Setup_PTO_Timer2()
-{
-	// Encender Timer2 (PCONP[22])
-    LPC_SC->PCONP |= 1 << 22; 
-
-    // Resetear y parar el Timer
-    LPC_TIM2->TCR  = 0x2; 
-    LPC_TIM2->CTCR = 0x0; 
-
-    // Establecer el Preescaler inicial 0.5 seg
-    LPC_TIM2->PR = 100;
-
-    // Calcular el periodo 
-    uint32_t periodo = ( SystemCoreClock / 4000 ); 
-
-	// Establecer los Registros de Coincidencia
-	// ( Match Register )
-    LPC_TIM2->MR2 = periodo;
-    LPC_TIM2->MR3 = periodo * 2;
-    
-    LPC_TIM2->MCR |= 1 << 10;    // Resetear Timer en MR3
-    
-    LPC_TIM2->EMR |= 15UL << 8;  // Alternar Pin MAT2.2 
-                                //      y MAT2.3
-
-    LPC_PINCON->PINSEL0 |= 15UL << 16;  //Activar  MAT2.2 
-                                       // y MAT2.3 como salidas
-
-    // Arrancer el Timer 2
-    LPC_TIM2->TCR = 1;
-
-}
-
-
-/** @brief: Esta es la rutina que maneja las interrupciones
- *  seriales, al recibir un caracter.
- */
-void ISR_Serial()
-{
-    char c = pc.getc();
-
-    if( c == 'w')
-       setPeriodUp();
-    else if( c == 's')
-       setPeriodDown();
-    
-    else if( c == 'z')
-    {
-        float newStep;
-        pc.printf("\nIntroducir nuevo paso: ");
-        pc.scanf( "%d", &newStep );
-        setPeriodStep( newStep );
-    }
-
-}
-
-
-/** @brief: Esta Funcion incrementará el preescaler
- *  del timer en un paso.
- */
-void setPeriodUp()
-{
-	// Es muy dícil llegar a un límite superior
-	// de 4294967295 para los 32bit del preescaler
-	// Pero quizás haga falta chequear el
-
-	LPC_TIM2->PR += PRESCALER_STEP; 
-}
-
-
-/** @brief: Esta Funcion decrementará el preescaler
- *  del timer en un paso.
- */
-void setPeriodDown()
-{
-	uint32_t prescaler = (uint32_t ) LPC_TIM2->PR ;
-
-	if( prescaler > PRESCALER_STEP )
-	   LPC_TIM2->PR -= PRESCALER_STEP;
-}
-
-
-/** @brief: Esta Funcion Cambiara los pasos en los que
- *  se aumenta o disminuye el Preescaler.
- */
-void setPeriodStep( uint32_t newStep )
-{
-	PRESCALER_STEP = newStep;
+/// Codigo Fuente para configurar al 
+
+#include "setup.h"
+#include "mbed.h"
+
+
+// Esta variable global determina
+// los incrementos del Preescaler
+extern uint32_t PRESCALER_STEP; 
+
+// Salida Serial de mbed
+extern Serial pc;
+
+
+/** @brief: Esta función configura al Timer2
+ *  para que las salidas p5 y p6 del mbed
+ *  se alternen cada vez que se iguala al
+ *  registro MR2 y MR3.
+ */
+void Setup_PTO_Timer2()
+{
+    // Encender Timer2 (PCONP[22])
+    LPC_SC->PCONP |= 1 << 22; 
+
+    // Resetear y parar el Timer
+    LPC_TIM2->TCR  = 0x2; 
+    LPC_TIM2->CTCR = 0x0; 
+
+    // Establecer el Preescaler inicial 0.5 seg
+    LPC_TIM2->PR = 100;
+
+    // Calcular el periodo 
+    uint32_t periodo = ( SystemCoreClock / 4000 ); 
+
+    // Establecer los Registros de Coincidencia
+    // ( Match Register )
+    LPC_TIM2->MR2 = periodo;
+    LPC_TIM2->MR3 = periodo * 2;
+    
+    LPC_TIM2->MCR |= 1 << 10;    // Resetear Timer en MR3
+    
+    LPC_TIM2->EMR |= 15UL << 8;  // Alternar Pin MAT2.2 
+                                //      y MAT2.3
+
+    LPC_PINCON->PINSEL0 |= 15UL << 16;  //Activar  MAT2.2 
+                                       // y MAT2.3 como salidas
+
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 1;
+
+}
+
+
+/** @brief: Esta es la rutina que maneja las interrupciones
+ *  seriales, al recibir un caracter.
+ */
+void ISR_Serial()
+{
+    int newValue;
+    char command;
+
+    pc.scanf( "%d-%c", &newValue, &command ) ;
+    pc.printf("\n %d-%c \n", newValue, command );
+
+    if( command == 'p')
+       setPrescaler( newValue );
+    else if( command == 'm')
+        setMR2( newValue );
+    else if( command == 'n')
+        setMR3( newValue );
+    else if( command == 'a')
+        startTimer2();
+    else if( command == 's')
+        stopTimer2();
+
+
+}
+
+
+/** @brief: Esta Funcion cambia el preescaler
+ *  directamente
+ */
+void setPrescaler( int newValue)
+{
+    LPC_TIM2->PR = newValue; 
+}
+
+
+void setMR2( int newValue )
+{
+    LPC_TIM2->MR2 = newValue;
+}
+
+
+void setMR3( int newValue )
+{
+    LPC_TIM2->MR3 = newValue;
+}
+
+void startTimer2()
+{
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 1;
+}
+
+void stopTimer2()
+{
+    // Arrancer el Timer 2
+    LPC_TIM2->TCR = 0x2;
 }
\ No newline at end of file