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:
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
}
// TMR0
CMIA0
void Excep_TMR0_CMIA0(void)
{
G_100usTimer++;
if((G_100usTimer % 10) == 0)
G_msTimer++;
}
- Agregar código, compilar y debug:
--> Practica #2
VÍDEO:
No hay comentarios.:
Publicar un comentario