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
}