Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prácticas de Laboratorio
El KL27 es un microcontrolador con características bien interesantes, en las que podemos destacar
su oscilador interno que soporta USB, el módulo RTC, el bootloader entre otras.
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
La distribución de memoria en los MCU ARM CORTEX M es diferente con respecto a los MCU
S08 y COLDFIRE V1. Dicho mapa de memoria podemos apreciarlo en la siguiente figura
Es de notar que las regiones de memoria delimitadas en el grafico anterior aplican para todos
los MCU cuyo core sea un CORTEX M*, sin importar el fabricante del mismo. Sin embargo, es el
fabricante quien determina cuanta RAM y el tamaño de la FLASH, así como también los periféricos
que este pueda incluir.
Otra de las grandes diferencias de los Kinetis con respecto a las familias S08 y COLDFIRE está en
el uso de los pines, no solo un pin puede tener más de una función, como es el caso de los S08 y
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
COLDFIRE, también es posible que un periférico tenga múltiples alternativas para llevar a cabo una
tarea determinada, por ejemplo, el pin TX de la UART1 puede utilizar el PTE0, PTA19 o el PTC4, esta
característica se denomina “signal multiplexing”. Para mayor información se sugiere al estudiante
revisar la sección número 10 del manual de referencia 10.3 KL27 Signal Multiplexing and Pin
Assignments.
1. Procedimiento:
Antes de comenzar, es necesario verificar que contamos con el ultimo software para
programación de los microcontroladores NXP. De no ser así, debemos actualizarla. Es
necesario actualizar el bootloader del OPEN SDA, así como también la aplicación de
DEBUG, para esta última existen muchas opciones; entre ellas contamos con el J-link de
Segger, el USBDM_OpenSDA, entre otros. Para empezar con la actualización del
bootloader, debemos conectar la freedom por el puerto SDA con el botón de reset
presionado, Windows debería de detectarla como una memoria USB.
La unidad bootloader debería lucir similar a la imagen que aparece a continuación. Para
actualizar el bootloader es suficiente con copiar el archivo
BOOTUPDATEAPP_Pemicro_v111.SDA (o su última versión) en la unidad. Una vez hecho
esto, desconectamos el cable USB y lo conectamos nuevamente al OpenSDA, debería
de ingresar en modo bootloader sin necesidad de presionar el botón de reset; debería
de mostrarnos, nuevamente, algo similar a la imagen que aparece a continuación. Ahora
copiamos el archivo DEBUG-APP_Pemicro_v108.SDA (o su última versión) para finalizar
la actualización, desconectamos y conectamos nuevamente el cable USB. En esta
ocasión Windows debería de encontrar nuevo hardware, una vez termine de instalar los
correspondientes drivers podremos continuar (los drivers están incluidos en el software
de desarrollo para el microcontrolador).
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
Actividad: Realizar un programa que permita controlar el encendido del LED rojo mediante la
orden del pulsador SW3. Y el LED verde median el pulsador SW1 el cual está conectado a la
interrupción no enmascarable “Non-maskable interrupt (NMI)”.
Tenga en cuenta que los vectores de interrupción se encuentran definidos en la carpeta startup de
su proyecto.
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
Realice debug del programa paso a paso y observe el estado de los registros de los puertos en la
posición de memoria correspondiente.
Para establecer los pines de conexión de los suiches consulte los planos de la FRDM-KL27Z “SPF-
28303_B.pdf”
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
Main:
/**
* @file MKL27Z64_GPIO_ISR.c
* @brief Application entry point.
*/
#include <stdio.h>
#include "board.h"
#include "peripherals.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "MKL27Z644.h"
/*
* @brief Application entry point.
*/
void NMI_LED_HANDLER(void)
{
NMIIsrFlag = true;
}
int main(void) {
printf("Hello World\n");
while(1) {
i++ ;
if(GPIOC->PDIR && 0x2) // if SW3 PRESS
GPIOB->PDOR |= RED_LED; // PTB18 = 1 (Red LED OFF)
//GPIOB->PSOR= RED_LED; // PTB18 = 1 (Red LED OFF)
else
GPIOB->PDOR &= ~RED_LED; // PTB18 = 0 (Red LED ON)
//GPIOB->PCOR= RED_LED; // PTB18 = 1 (Red LED OFF)
}
return 0 ;
}
Sistemas Embebidos y Laboratorio
Prácticas de Laboratorio
void BOARD_InitPins(void)
{
/* Port A Clock Gate Control: Clock enabled */
CLOCK_EnableClock(kCLOCK_PortA);
SIM->SCGC5|= SIM_SCGC5_PORTB_MASK; //Port B Clock Gate Control: Clock enabled
SIM->SCGC5|= SIM_SCGC5_PORTC_MASK; //Port C Clock Gate Control: Clock enabled
PORTC->PCR[1] |= PORT_PCR_MUX(1)| PORT_PCR_PE_MASK; //SW3 (PTC1 is configured as GPIO with Pull Enable)
// FTFA->FOPT &= ~NV_FOPT_NMI_DIS_MASK; //NMI pin function is disabled, then PTA4 is free to be
GPIO
PORTA->PCR[4] |= PORT_PCR_MUX(1)| PORT_PCR_PE_MASK; //SW1 (PTA4 is configured as GPIO with Pull Enable)
Taller GPIO:
Interrupciones:
Actividad:
Ayuda:
void PTC1_SW3_IRQ(void)
{
GPIOB->PTOR=RED_LED;
PORTC->PCR[1] |= PORT_PCR_ISF_MASK;
}
NVIC_EnableIRQ(PORTB_PORTC_PORTD_PORTE_IRQn);
Taller Interrupciones:
DUI0662B_cortex_m0p_r0p1_dgug.pdf
Bibliografía:
http://www.keil.com/pack/doc/CMSIS/Core/html/group__NVIC__gr.html
http://infocenter.arm.com/help/topic/com.arm.doc.dui0662b/DUI0662B_cortex_m0p_r0p1_dgug.pdf
https://www.nxp.com/docs/en/reference-manual/KL27P64M48SF6RM.pdf