lunes, 23 de enero 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 R5F562N8 de la tarjeta de evaluación YRDKRX62N. 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 RX62N RDK User's Manual ubicamos el LED 8



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



3.- Seleccionar el target R5F562N8, 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)
{
         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
}

void Timer_0_1_Start(void)
{
IR(TMR0,CMIA0) = 0;    // Clear IRQ if it was on for some reason
         IEN(TMR0,CMIA0) = 1;  // Enable TMR0.CMIA0 IRQ in the Interrupt Control Unit
}


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:

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


VÍDEO:

No hay comentarios.:

Publicar un comentario