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:
3:8d5a9e3cd680
Parent:
2:a1b556d78a7f
Child:
4:552beeda4722

File content as of revision 3:8d5a9e3cd680:

/// 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;
}