Acá tienen algunos archivos útiles para la programación y desarrollo de aplicaciones en el KL25Z:
MKL25Zxx - Manual de Usuario - Acá encuentran todo lo referido a registros y cómo configurar y usar los periféricos del microcontrolador.
MKL25Zxx - Datasheet - Acá encuentran todo lo referido a las especificaciones eléctricas del microcontrolador.
FRDM-KL25Z - Esquemático de la placa de desarrollo - Acá tienen un esquemático de qué es todo lo que hay en la placa de desarrollo y cómo se encuentra conectado entre sí.
Biblioteca - LCD comunicación paralelo - Biblioteca de código C para manejar un LCD (en modo 4 bits) con comunicación en paralelo
Biblioteca - I2C (con librerias de LCD con comunicación I2C) - Biblioteca de código C para controlar el módulo I2C. Contiene biblioteca de LCD con comunicación I2C.
Aclaración importante: están invertidos PTA1 y PTA2. El pin PTA1 se encuentra en la esquina inferior derecha y PTA2 está por encima.
void Init_MCU(void) {
SIM_COPC=0; // Desactivo el Watchdog
//PLL
SIM_CLKDIV1 = (SIM_CLKDIV1_OUTDIV1(0x01) | SIM_CLKDIV1_OUTDIV4(0x01)); //Actualizo los prescalers del core
SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK; //Selecciona al PLL como fuente de reloj para varios periféricos
SIM_SOPT1 &= ~SIM_SOPT1_OSC32KSEL(0x03); //System oscillator drives 32 kHz clock for various peripherals
//Cambio a modo FBE
MCG_C2 = (MCG_C2_RANGE0(2) | MCG_C2_EREFS0_MASK);
OSC0_CR = OSC_CR_ERCLKEN_MASK;
MCG_C1 = (MCG_C1_CLKS(2) | MCG_C1_FRDIV(3) | MCG_C1_IRCLKEN_MASK);
MCG_C4 &= (uint8_t)~(uint8_t)((MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(3)));
MCG_C5 = MCG_C5_PRDIV0(1);
MCG_C6 = MCG_C6_VDIV0(0);
while ((MCG_S & MCG_S_IREFST_MASK) != 0) { //Espero hasta que el clock de referencia del FLL sea el clock externo
}
while ((MCG_S & 0x0CU) != 0x08) { //Espero hasta que el clock externo sea la referencia del módulo MCG
}
//Cambio a modo PBE
MCG_C6 = (MCG_C6_PLLS_MASK | MCG_C6_VDIV0(0));
while ((MCG_S & 0x0C) != 0x08) { //Espero hasta que el clock externo sea la referencia del módulo MCG
}
while ((MCG_S & MCG_S_LOCK0_MASK) == 0x00) { //Espero hasta que se fije la frecuencia
}
//Cambio a modo PEE
MCG_C1 = (MCG_C1_CLKS(0) | MCG_C1_FRDIV(3) | MCG_C1_IRCLKEN_MASK);
while ((MCG_S & 0x0C) != 0x0C) { //Espero hasta que se seleccione la salida del PLL
}
}