Proporcionar un evento de entrada al temporizador para ingresar al ISR en Tiva Launchpad TM4C123GH6PM en Code Composer Studio

0

Estoy escribiendo un programa en CCS para contar el tiempo de cada flanco positivo desde el temporizador de 32 bits, donde la hora se actualiza en el ISR del widetimer5 en Code Composer Studio. Leí la hoja de datos, pero no puedo entender cómo proporcionar dicho evento de entrada al temporizador.

He configurado el pin de señal GP (PD6) del widetimer5 pero el temporizador nunca ingresa a ISR. Por favor, ayúdeme a comprender cómo proporcionar un reloj al temporizador para hacer valer una interrupción en todos los aspectos positivos.

Fragmento de código:

inithw()

{

 SYSCTL_RCC_R = 
 SYSCTL_RCC_XTAL_16MHZ | SYSCTL_RCC_OSCSRC_MAIN | SYSCTL_RCC_USESYSDIV | (4 
 << SYSCTL_RCC_SYSDIV_S);

 SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOD
 //PORT D
 GPIO_PORTD_AFSEL_R |= 0x40;     // Configuring PD6                       
 GPIO_PORTD_PCTL_R |= GPIO_PCTL_PD6_WT5CCP0;
 GPIO_PORTD_DEN_R |= 0x40;

}

void setTimerMode()

{

SYSCTL_RCGCWTIMER_R |= SYSCTL_RCGCWTIMER_R5;     // turn-on timer
WTIMER5_CTL_R &= ~TIMER_CTL_TAEN;                // turn-off counter before 
reconfiguring
WTIMER5_CFG_R = 4;                               // configure as 32-bit 
counter (A only)
WTIMER5_TAMR_R = TIMER_TAMR_TACMR | TIMER_TAMR_TAMR_CAP | TIMER_TAMR_TACDIR; // configure for edge time mode, count up
WTIMER5_CTL_R = TIMER_CTL_TAEVENT_POS;           // measure time from 
positive edge to positive edge                             // Set initial 
value to zero
WTIMER5_IMR_R = TIMER_IMR_CAEIM;                 // turn-on interrupts
WTIMER5_TAV_R = 0;                               // zero counter for first 
period
WTIMER5_CTL_R |= TIMER_CTL_TAEN;                 // turn-on counter
NVIC_EN3_R |= 1 << (INT_WTIMER5A-16-96);         // turn-on interrupt 120 (WTIMER5A)
} 

void WideTimer5Isr()
{

        time = WTIMER5_TAV_R;                        // read counter input
        WTIMER5_TAV_R = 0;                           // zero counter for next edge
        time /= 40;                                  // scale to us units
        timeUpdate = true;                           // set update flag                             // status
        GREEN_LED ^= 1;
    WTIMER5_ICR_R = TIMER_ICR_CAECINT;               // clear interrupt flag
}
    

0 respuestas

Lea otras preguntas en las etiquetas