OBJETIVO:
1. Configurar la FSUB par el IT
2. Configurar el IT
3. Crear la interrupción IT
4. Crear funciones delay_ms exactas.
DESARROLLO:
Del manual Renesas RL78G14 RDK User's Manual ubicamos el LED 3:
PASOS:
- Creación de un proyecto:
2.- New/ C Project
- Configurar proyecto:
2.- Seleccionar C/C++ Build / Settings / Linker / Device y establecer los siguientes parámetros:
OCD = 85
Option Byte = efffe8
Palomear: Use range of debug monitor area. Nota: No establecer ningún valor solo dejarlo en blanco.
Apply y después OK.
3.- Configuraremos el oscilador interno High Speed para obtener FCLK a 32 Mhz y el Oscilador de subsistema para obtener FSUB a 32.768 kHz para alimentar al IT.
RL78/G14 User's Manual: Hardware página 239.
4.- Configuramos IT para obtener una base de tiempo de 100 us:
5.- Creamos la interrupción IT
2.- Compilar con el icono del martillo y debug con el icono del insecto:
VÍDEO:
// Fclk
= 32 Mhz Fsub = 32.768 khz
para el IT (interval Timer)
void SR_Oscilador(void)
{
volatile uint32_t w_count;
/*The IT can
count one of two possible clock sources, based on the WUTMMCK0 bit in
the Operation Speed Mode Control Register
(OSMC):
A
0 selects the subsystem clock fSUB. This clock’s frequency is typically
32.768 kHz, so the period is about 30.5176 _s.
A
1 selects the internal low-speed oscillation clock fIL. This clock’s frequency
is
nominally 15 kHz but can vary by 15 percent.*/
/* Set fMX */
CMC = _00_CGC_HISYS_PORT |
_10_CGC_SUB_OSC | _00_CGC_SYSOSC_DEFAULT
| _00_CGC_SUBMODE_LOW;
MSTOP = 1U;
/* Set fMAIN */
MCM0 = 0U;
/* Set fSUB */
XTSTOP = 0U;
/* Change the
waiting time according to the system */
for (w_count = 0U; w_count <= CGC_SUBWAITTIME; w_count++)
{
__nop();
}
OSMC = _00_CGC_SUBINHALT_ON |
_00_CGC_RTC_CLK_FSUB;
/* Set fCLK */
CSS = 0U;
/* Set fIH */
HIOSTOP = 0U;
}
void R_IT_Create(void)
{
RTCEN = 1U; /* supply IT
clock */
ITMC = _0000_IT_OPERATION_DISABLE; /* disable IT
operation */
ITMK = 1U; /* disable INTIT
interrupt */
ITIF = 0U; /* clear INTIT
interrupt flag */
/* Set INTIT low
priority */
ITPR1 = 1U;
ITPR0 = 1U;
ITMC = _0002_ITMCMP_VALUE; // 100 us
}
#pragma interrupt r_it_interrupt(vect=INTIT)
static void __near r_it_interrupt(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