Usando TIMER 1 sin habilitar la interrupción en C en dsPIC33E

1

Estoy intentando descifrar un código C en el que se está utilizando Timer1 para medir el período de una señal digital, usando dsPIC33EP256MC506. La interrupción del temporizador no se está habilitando y no hay una rutina de servicio de interrupción para este temporizador. Publicaré solo las partes relevantes del código, ya que el código real es enorme! El programa simplemente está inicializando el temporizador de la siguiente manera en la rutina main() :

    volatile unsigned int ContinueTimeStep __attribute__ ((near)) = 0;
    int main() {
          PR1 = 0xFFFF;        /* Period */
          T1CON = 0x8030;      /* enable timer, 1:256 input clock prescaler */
     /* Main Loop */
      for (;;) {
        while (!ContinueTimeStep) ;
        asm("BCLR.b _ContinueTimeStep,#0");/* ContinueTimeStep--; */
        MyFunction();
      }                                    /* End for(;;) */
    }

En MyFunction() no se está haciendo nada con el temporizador. La lectura del temporizador solo se utiliza en el cálculo del período en el flanco ascendente. Esto se hace dentro del ISR de notificación de cambios de la siguiente manera:

void __attribute__((__interrupt__,__auto_psv__)) _CNInterrupt(void)
{
      /* Change Notification on Port F0*/
      if (portF_Xor & 1) {
        if (portF_Copy & 1)                /* rising edge detection*/
        {
          CN80_RisingPeriode = Timer1 - TimerCN80_Old;
          TimerCN80_Old = Timer1;
          CN80_ChangeDetectedFlag++;
        }

        TimerCN80_Old = Timer1;
        }
}

Como mencioné, miré a mi alrededor en el código, pero no pude encontrar un ISR Timer 1. Así que estoy bastante seguro de que no hay uno. Mi pregunta es, ¿es esto incluso válido? ¿El temporizador se desbordará automáticamente y comenzará desde cero, una vez que se alcance el período? ¿Qué sucede si la interrupción ocurre justo después de que el temporizador 1 se haya desbordado? ¿Se calculará el período como negativo? ¡Gracias por su valiosa aportación!

    
pregunta Adeel

1 respuesta

1

No hay nada de malo en habilitar un temporizador pero no su interrupción.
Simplemente se desbordará y continuará contando desde 0.

Sí, tiene razón en que, si se produce una interrupción de CN después de un desbordamiento, el cálculo producirá un resultado negativo.
Idealmente, esto debería ser capturado y corregido en el código.

    
respondido por el brhans

Lea otras preguntas en las etiquetas