Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
setup.cpp
- Committer:
- Yo_Robot
- Date:
- 2012-03-24
- Revision:
- 2:a1b556d78a7f
- Child:
- 3:8d5a9e3cd680
File content as of revision 2:a1b556d78a7f:
/// 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; }