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:
2:a1b556d78a7f
Child:
3:8d5a9e3cd680
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/setup.cpp	Sat Mar 24 04:40:21 2012 +0000
@@ -0,0 +1,108 @@
+/// 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;
+}
\ No newline at end of file