jueves, 5 de enero de 2017

PRACTICA # 20 Compare Match Timer (CMT)

OBJETIVO:
       Se configurará el Compare Match Timer (CMT) con la que cuenta el MCU R5F562N8 de la tarjeta de evaluación YRDKRX62N. Este CMT 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 CMT de 16 bits 
  •  Crear interrupción CMT0 CMI0
  •  Parpadear un Led cada segundo utilizando las funciones delay_ms

DESARROLLO:

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 el CMT 0 e iniciamos interrupción CMI0 en el archivo CMT.c:
/* The CMT in this example is clocked at a rate of
   (PCLK / 32) or (48 MHz / 32) = 1500000  cuentas para llegar a 1000 ms
 1500000      --  1000 ms
    x        --    0.1 ms = 100 us
  x = 150
 */
void CMT_0_init (void)
{
    /* Power up CMT0 */
    MSTP(CMT0) = 0;  
   
    /* Stop the clock */
    CMT.CMSTR0.BIT.STR0 = 0;

    /* Trigger 100 us from now */
    CMT0.CMCOR =  150;

   
    /* CMCR - Compare Match Timer Control Register
    b6      CMIE: 1 = Compare match interrupt (CMIn) enabled
    b1:b0   CKS:  1 = Clock selects is PCLK/32
    */
    CMT0.CMCR.BIT.CMIE = 0x01;
    CMT0.CMCR.BIT.CKS  = 0x01;
   
    /* Set interrupt priority in ICU */
    IPR(CMT0, CMI0) = 0x01;
   
    /* Enable the interrupt in the ICU */
    IEN(CMT0, CMI0) = 1;
   
    /* Start the clock running */
    CMT.CMSTR0.BIT.STR0 = 1;
} /* End of function CMT_init() */

6.- Agregaremos el siguiente código a la interrupción que está en el archivo interrupt_handlers.c
// CMT0 CMI0
void Excep_CMT0_CMI0(void)
{
            G_100usTimer++;
            if ((G_100usTimer % 10) == 0)
                        G_msTimer++;
}

7.- La function main queda como sigue:
void main(void)
{
         set_ipl( 0 );     // enable interrupts
         SR_Oscilador();   //  F = 96 Mhz
         SR_INIT_PORTS();  // Inicializa los I/O
         SR_CMT_0();       // Inicializa el Compare Match Timer 0

         while(1)
         {
                   LED1 = ~LED1;
                   delay_ms(1000);
         }

}  

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

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



VÍDEO:

No hay comentarios.:

Publicar un comentario