sábado, 25 de febrero de 2017

PRACTICA # 2 TIMER 0 y 1 (Cascada a 16 bits)


OBJETIVO: 
       Se configurará el Timer 0 y el Timer 1 en cascada para generar uno de 16 bits con la que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. Este nuevo Timer de 16 bits lo utilizaremos para generar funciones de retardo de tiempo como delay_100us y delay_ms por medio de su interrupción.
  • Configurar el Timer 0 y Timer 1 ambos de 8 bits a uno de 16 bits 
  • Crear interrupción overflow de timer TMR0 CMIA0
  • Parpadear un Led cada segundo utilizando las funciones delay_ms

DESARROLLO:
  • Del manual Renesas RX63N RDK User's Manual ubicamos el LED 4 

PASOS:
  • Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F563NB, debug hardware Segger jLink, después next


4.- Seleccionar C/C++ Source file y por ultimo Finish.


5.- Configuraremos Timer 0 y 1 en cascada de 16 bits e iniciamos interrupción CMIA0 en el archivo delay.c:

void InitTimer_0_1(void)
{
            /* Enable the timers. */
            //SYSTEM.MSTPCRA.BIT.MSTPA5 = 0;

            MSTP(TMR0) = 0; //Activate TMR0 unit
            MSTP(TMR1) = 0; //Activate TMR1 unit
            TMR1.TCCR.BIT.CSS = 1;
            TMR1.TCCR.BIT.CKS = 1;  //x = (1/48 Mhz)*(2)*(65535) = 2730.6 us  Count source is PCLK/2 for TMR1
            TMR0.TCCR.BIT.CSS = 3;  // 16-bit mode
            TMR0.TCCR.BIT.CKS = 0;

            TMR0.TCR.BIT.CCLR = 1;  //Count source is TMR1 for TMR0
            TMR0.TCR.BIT.CMIEA = 1; // Enable Interrupt on Compare Match A inside the peripheral module
            IR(TMR0,CMIA0)= 0;    // Clear IRQ if it was on for some reason
            IPR(TMR0,CMIA0)= 2;  // IRQ priority for TMR0.CMIA0 = 2
            IEN(TMR0,CMIA0)= 1; // Enable TMR0.CMIA0 IRQ in the Interrupt Control Unit

            //65535  ---  2730.6 us
            //   T   ---  100 us
            //T = 2400
            TMR01.TCORA = 2400;
            //TMR0.TCORA = 9;    // high 8 bits
            //TMR1.TCORA = 96;    // low 8 bits
}

  
6.- Agregaremos el siguiente código a la interrupción que está en el archivo interrupt_handlers.c

// TMR0 CMIA0
void Excep_TMR0_CMIA0(void)
{
         G_100usTimer++;
                   if((G_100usTimer % 10) == 0)
                             G_msTimer++;
}


  • Agregar código, compilar y debug:
1.- Bajar el código de:
--> Practica #2

2.- Compilar con el icono del martillo y debug con el icono del insecto:


VÍDEO:
                                                                                                                                                  

No hay comentarios.:

Publicar un comentario