Configurar timer0 como input capture para flancos ascendentes y descendentes en EDU-CIAA

86 views
Skip to first unread message

Matias

unread,
Oct 7, 2016, 6:06:26 PM10/7/16
to CIAA-Firmware
Hola, mi nombre es Matias, y junto con un amigo estamos hace varios dias intentando configurar el timer0 como entrada de captura para detectar flancos ascendentes y descendentes en el pin T0_CAP3, sin poder lograr que interrumpa cuando ocurre el flanco. A continuacion dejo una parte del codigo, solo el main. Espero que puedan ayudarme a detectar cual es el error
Muchas Gracias, Matias.

#define TIMER_NUMBER           0
#define CAP_NUMB                    3
#define TIMER0_PRESCALER   10

#define IC_SCU_PORT               1
#define IC_SCU_PIN                   17            

#define LPC_TIMER                  LPC_TIMER0
#define RGU_TIMER_RST        RGU_TIMER0_RST 
#define LPC_TIMER_IRQ          TIMER0_IRQn
#define INPUT                            0
#define OUTPUT                        1
#define ON                                  1
#define OFF                                0

volatile uint8_t STATUS=0;


__attribute__ ((section(".after_vectors")))
void TIMER0_IRQHandler(void){
   
   if (STATUS == 0)
         STATUS=1;
   else
         STATUS=0;
   
}

int main(void)
{
   
   SystemCoreClockUpdate();
   ledConfig();
   
   Chip_SCU_PinMuxSet(IC_SCU_PORT, IC_SCU_PIN,  SCU_MODE_FUNC4);
   Chip_TIMER_Init(LPC_TIMER);
   LPC_GIMA->CAP0_IN[TIMER_NUMBER][CAP_NUMB] = (1<<4);
   Chip_RGU_TriggerReset(RGU_TIMER_RST);
    
   while (Chip_RGU_InReset(RGU_TIMER_RST)); 

    Chip_TIMER_Reset(LPC_TIMER); 
    Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER, TIMER_CAPSRC_RISING_PCLK, CAP_NUMB); 
 
    Chip_TIMER_PrescaleSet(LPC_TIMER, TIMER0_PRESCALER);/
    Chip_TIMER_ClearCapture(LPC_TIMER, CAP_NUMB);
    Chip_TIMER_CaptureRisingEdgeEnable(LPC_TIMER, CAP_NUMB);
    Chip_TIMER_CaptureFallingEdgeEnable (LPC_TIMER, CAP_NUMB );
    Chip_TIMER_CaptureEnableInt(LPC_TIMER, CAP_NUMB);/
    
    NVIC_ClearPendingIRQ(LPC_TIMER_IRQ);
    NVIC_EnableIRQ(LPC_TIMER_IRQ);
    Chip_TIMER_Enable(LPC_TIMER);
     while(1) {
          ledSet(STATUS);//enciende el led como señal de detección de flanco
      }
    return 0;
}

La parte del LED es a modo de "prueba" para ver si la interrupcion sucede o no.

Nestor Cortez

unread,
Jun 30, 2017, 7:31:37 PM6/30/17
to CIAA-Firmware

Eric Pernia

unread,
Jul 1, 2017, 12:08:45 AM7/1/17
to Matias, CIAA-Firmware, Nestor Cortez
Buenas noches, este ejemplo funciona, lo armé hace un mes y pico para los cursos CAPSE y la idea es que pronto esté disponible esta funcionalidad en la biblioteca sAPI. 

Para probarlo tienen que conectar GPIO0 a ENET_TXD1 de la EDU-CIAA-NXP.  El GPIO0 se toglea a una frecuencia de 10Hz generada con TIMER1 en modo TICKER y el pin ENET_TXD1 es la entrada de captura 2 del TIMER0.

Les recomiendo usarlo desde Embedded IDE: https://github.com/martinribelotta/embedded-ide-builder/releases asi no se marean.

Otra opción es compilarlo directo desde dentro de la carpeta del proyecto con: 

make Grabar_proyecto_en_flash

Esto compila y lo baja a la placa. Las funciones de Servo de la biblioteca sAPI están anuladas en el ejemplo porque usan los timers 0 a 3., las funciones de manejo de timers están en:

timerInputCapture/libs/sapi/src/sapi_timer.c y timerInputCapture/libs/sapi/inc/sapi_timer.h

Van a ver que está bastante harcodeado a los timers elegidos porque está incompleta esa parte de la biblioteca.

Pruebenlo y cualquier cosa me avisan.


Saludos.
Eric.


--
Has recibido este mensaje porque estás suscrito al grupo "CIAA-Firmware" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a ciaa-firmware+unsubscribe@googlegroups.com.
Visita este grupo en https://groups.google.com/group/ciaa-firmware.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

timerInputCapture.zip
Reply all
Reply to author
Forward
0 new messages