Está en la página 1de 77

GPIO – General purpose I/O

28/05/2020 1
Lo que se verá en Informática
Aplicada

28/05/2020 2
GPIO - General Purpose (Digital!)
Input/Output
 Implementadas por pines de conexión
directa al exterior que representan la
interfaz física entre el microcontrolador
(MCU) y el mundo exterior al mismo.
 El MCU detecta eventos en sus entradas
y genera cambios en sus salidas. En
general estos pines pueden configurarse
como entradas o salidas. Además pueden
tener otras funciones alternativas.
 La lógica puede ser positiva o negativa.

28/05/2020 3
GPIO - General Purpose (Digital!)
Input/Output
 Pueden utilizarse como interfaz con dispositivos
externos simples
◦ Entradas: pulsadores
◦ Salidas: LEDs
 Por ejemplo: encender LED1 o LED2 según la posición
del pulsador SW1

28/05/2020 4
GPIO - General Purpose (Digital!)
Input/Output
 En general, casi todos los MCUs separan los
pines en grupos llamados ports. En los Kinetis
cada port tienen 32 pines [31:0].

28/05/2020 5
100 LQFP Pinout Diagram
El encapsulado cuadrado plano de perfil bajo o Low-profile Quad Flat
Package (LQFP) es un encapsulado de circuito integrado para montaje
superficial con los conectores de componentes extendiéndose por los
cuatro lados. Los pines se numeran en sentido contrario a las agujas
del reloj a partir del punto guía.

28/05/2020 6
GPIO-Puertos
 GPIO contiene 5 Puertos de 32 bits c/u
◦ PORTA[31:0]
◦ PORTB[31:0]
◦ PORTC[31:0]
◦ PORTD[31:0]
◦ PORTE [31:0]
 En página 172 de KL46P121M48SF4RM.pdf (KL46
Sub-Family Reference Manual) puede apreciarse
la asociación de cada uno de ellos (columna Pin name)
a cada pin (columna 100 LQFP) del encapsulado. No
todos los pines de los ports están disponibles. Se
puede observar también las distintas funciones que
cumple cada pin (para limitar el tamaño del
dispositivo).

28/05/2020 7
GPIO - Ports
 Como los pines están agrupados en ports,
el MCU puede leer todos los pines
del mismo a la vez y lo mismo para
modificarlos.
 Cada port tiene asociado un conjunto de
registros de control de 32 bits, donde
cada bit del mismo se corresponde con
un bit del port.

28/05/2020 8
GPIO - Ports
 Cada uno de estos registros está mapeado en
memoria. A partir de página 833 de
KL46P121M48SF4RM.pdf, para el port A:

28/05/2020 9
Diagrama en Bloques
GPIO PORT

28/05/2020 10
GPIO - PUERTOS
 Configuración
◦ Direction (I o O)
◦ MUX (GPIO)

 Datos
◦ Output (diferentes
formas de acceder a ellas)
◦ Input

28/05/2020 11
GPIO – PUERTOS - ESTRUCTURA
GPIO Peripheral Access Layer

Port Data Output Register (GPIOX_PDOR)[31:0]


Port Set Output Register (GPIOX_PSOR) [31:0]
Port Clear Output Register (GPIOX_PCOR) [31:0]
 PORTX Port Toggle Output Register (GPIOX_PTOR) [31:0]
Port Data Input Register (GPIOX_PDIR) [31:0]
Port Data Direction Register (GPIOX_PDDR) [31:0]

 X=A,B,C,D,E

28/05/2020 12
PDDR: Port Data Direction
 Cada pin puede
configurarse distinto
 Input: 0
 Output: 1
 Reset clears port bit
direction to 0, por
seguridad. Apenas
se pone PDDR a 1,
el MCU excita el pin
de acuerdo al
registro del port
correspondiente

28/05/2020 13
PDDR: Port Data Direction (pag.
838 de KL46P121M48SF4RM.pdf)

28/05/2020 14
Escribir en un puerto de salida
 Directo: escribir
valor en PDOR o:
 Toggle: escribir 1
en PTOR
 Clear (a 0):
Escribir 1 en
PCOR
 Set (a 1): escribir 1
a PSOR

28/05/2020 15
PDOR (pag. 835 de
KL46P121M48SF4RM.pdf)

28/05/2020 16
PSOR (pag. 836 de
KL46P121M48SF4RM.pdf)

28/05/2020 17
PCOR (pag. 836 de
KL46P121M48SF4RM.pdf)

28/05/2020 18
PTOR (pag. 837 de
KL46P121M48SF4RM.pdf)

28/05/2020 19
Leer de un puerto de entrada-
PDIR

28/05/2020 20
PDIR (pag. 837 de
KL46P121M48SF4RM.pdf)

28/05/2020 21
Filosofía de desarrollo de software
para microcontroladores ARM
Cortex-M
 Esta arquitectura está pensada para
desarrollo en lenguaje C
 Los microcontroladores ARM Cortex-M
son complejos
 Primera solución
◦ Cada fabricante crea sus bibliotecas C para
simplificar

28/05/2020 Laboratorio de Microprocesadores 22


El caos de las librerías
(armcortexm.blogs.upv.es)
 Esto es bueno para unos y malos para otros
◦ Incompatibles entre fabricantes
◦ Dificulta la migración entre fabricantes
 A ARM (y a nosotros) no le convenía esto y puso
orden

28/05/2020 Laboratorio de Microprocesadores 23


CMSIS: la solución
 CMSIS: Cortex Microcontroller Software
Interface Standard
 Fruto de la coordinación entre ARM,
fabricantes, desarrolladores de entornos,
desarrolladores de bibliotecas, ...
 Pretende establecer abstracción del
hardware común a todos los fabricantes
de procesadores ARM Cortex-M

28/05/2020 Laboratorio de Microprocesadores 24


CMSIS: la solución

28/05/2020 Laboratorio de Microprocesadores 25


CMSIS: La solución
 Arquitectura de CMSIS:
◦ Funcionalidades para arranque del sistema
hasta llegar a ejecutar main( )
◦ Funciones de acceso estandarizadas/API para
acceso a características específicas del núcleo
y periféricos básicos
◦ Visión consistente de registros de periféricos
y servicios de interrupción

28/05/2020 Laboratorio de Microprocesadores 26


CMSIS: La solución

28/05/2020 Laboratorio de Microprocesadores 27


CMSIS: La solución
 CMSIS intenta ser simple, y propone (y no obliga) una
manera de desarrollar el código siguiendo una reglas
sencillas que se basan en la experiencia de los
ingenieros y, en buenas prácticas de desarrollo de
código como por ejemplo cumplir MISRA 2004 de la
Motor Industry Research Academy como base para
aplicaciones en sistema críticos,
 documentar el código fuente empleando doxygen
para que se automatice la generación de manuales,
 el empleo de la estandarización de datos enteros
(stdint),
 el uso de camelCase (separación por mayúsculas)
para nombres de variables, etc.

28/05/2020 Laboratorio de Microprocesadores 28


28/05/2020 Laboratorio de Microprocesadores 29
CMSIS –Acceso a los registros de
hardware
 El archivo de cabecera MKL46Z4.h, interface abstracta del
hardware, describe las características mas importantes del
MCU, en particular define punteros a los registros. El
modificador volatile le indica al compilador que la variable
declarada puede sufrir modificaciones que no estén explícitas
en el código, en caso de leer una variable me garantiza que
efectivamente sea leída, aún cuando no haya habido una
operación de escritura sobre la misma.
// de core_cm0plus.h (CMSIS)
#define __I volatile const /*!< Defines 'read
only' permissions */
#define __O volatile /*!< Defines 'write
only' permissions */
#define __IO volatile /*!< Defines 'read /
write' permissions */

28/05/2020 30
CMSIS –Acceso a los registros de
hardware
 En el archivo de cabecera MKL46Z4.h se definen estructuras
(struct) en C para representar registros de hardware del MCU
/** GPIO - Register Layout Typedef */
typedef struct {
__IO uint32_t PDOR; /**< Port Data Output Register, offset: 0x0 */
__O uint32_t PSOR; /**< Port Set Output Register, offset: 0x4 */
__O uint32_t PCOR; /**< Port Clear Output Register, offset: 0x8 */
__O uint32_t PTOR; /**< Port Toggle Output Register, offset: 0xC */
__I uint32_t PDIR; /**< Port Data Input Register, offset: 0x10 */
__IO uint32_t PDDR; /**< Port Data Direction Register, offset: 0x14 */
} GPIO_Type;
 Este header define punteros a los registros

28/05/2020 Laboratorio de Microprocesadores 31


CMSIS –Acceso a los registros de
hardware
 Por ejemplo para port A
/* GPIO - Peripheral instance base addresses */
/** Peripheral GPIOA base address, sólo muestro para port A*/
#define GPIOA_BASE (0x400FF000u)
/** Peripheral GPIOA base pointer */
#define GPIOA ((GPIO_Type *)GPIOA_BASE)
/* ----------------------------------------------------------------------------
-- SDK Compatibility
---------------------------------------------------------------------------- */
#define PTA_BASE GPIOA_BASE
#define PTA GPIOA
Entonces puedo escribir PTA->PDOR = …

28/05/2020 Laboratorio de Microprocesadores 32


CMSIS –Acceso a los registros de
hardware
En lugar de direcciones uso macros (ejemplo: PTA->PDOR),
hace el software más portable y permite escribir código de
forma mas intuitiva y mucho más fácil de leer. Para acceder a
bits individuales?

Bitfields, Masks , …..

28/05/2020 33
Se usan muchos los operadores a
nivel de bits!!, por ejemplo

/* PDDR Bit Fields */


#define GPIO_PDDR_PDD_MASK 0xFFFFFFFFu
#define GPIO_PDDR_PDD_SHIFT 0
#define GPIO_PDDR_PDD(x)
(((uint32_t)(((uint32_t)(x))<<GPIO_PDDR_PDD_SHIFT))&GPIO_PD
DR_PDD_MASK)

Veremos cómo aplicar máscaras para leer o escribir a los distintos


registros para el caso particular de las I/O digitales que usaremos: 2
leds y 2 pulsadores

28/05/2020 34
Pulsadores (del esquemático FRDM-
KL46ZSCH)

28/05/2020 35
Pulsadores (pags. 174 y 175 de
KL46P121M48SF4RM.pdf)

Pulsador SW1 en pin 73 port PTC3 de GPIO


Pulsador SW2 en pin 88 port PTC12 de GPIO (El nombre del pulsador
tal como figura en la foto que trae el MCU es SW3, pero está
conectado al pin SW2)
Podemos apreciar en la figura anterior que, cuando el respectivo
switch es presionado, en los pines asociados a los puertos PTC3 y
PTC12, quedan en cero lógico(0). Cuando el pulsador está abierto para
garantizar un 1 lógico se debe conectar una resistencia de pull-up
interna.
28/05/2020 36
LEDs (del esquemático FRDM-
KL46ZSCH)

Como podemos apreciar en la figura, los LEDs se activan


cuando el pin del puerto correspondiente, tiene un 0 lógico
puesto que, el ánodo de los leds tiene un 1 como entrada. O
sea se apagan con un 1 lógico

28/05/2020 37
LEDs verde y rojo (del esquemático
FRDM-KL46ZSCH)

28/05/2020 38
LEDs verde y rojo (pags. 172 y 175
de KL46P121M48SF4RM.pdf)

LED1 verde pin 98 port PTD5 de GPIO


LED2 rojo pin 26 port PTE29 de GPIO

28/05/2020 39
Pseudocódigo-primer intento
(incompleto)
// Make PTD5 (LED1) and PTE29 (LED2) outputs
set bit 5 of GPIOD_PDDR and bit 29 of GPIOE_PDDR
// Make PTC3 input (SW1)
clear bit 3 of GPIOC_PDDR
// Initialize the output data values: LED 1 off, LED 2
//on, aquí usa PDOR podría haber usado los otros reg.
set bit 5 of GPIOD_PDOR, clear bit 29 of GPIOE_PDOR
// read switch, light LED accordingly
do forever {
if bit 3 of GPIOC_PDIR is 1 {
// switch is not pressed, then LED 1 off, LED 2 on
set bit 5 of GPIOD_PDOR
clear bit 29 of GPIOE_PDOR
} else {
// switch is pressed, so light LED 1, LED 2 off
clear bit 5 of GPIOD_PDOR
set bit 29 of GPIOE_PDOR
}
}

28/05/2020 40
Acceso a los bits de los ports –
Estilo de codificación
 Es probable que se cometan errores al usar literales binarias y
hexadecimales
◦ “To set bits 13 and 19 of n, use 0000 0000 0000 1000 0010 0000 0000
0000 or 0x00082000”

 Usar valores literales y shifts hacia la izquierda para ello


n = (1UL << 19) | (1UL << 13);
 Defina macros (conviene ponerlas en un .h) para indicar la posición
de un bit en un port, no tenemos que mirar a cada rato el manual!
#define GREEN_LED_POS (19)
#define YELLOW_LED_POS (13)
n = (1UL << GREEN_LED_POS) | (1UL<< YELLOW_LED_POS);
 Cree otras macros para generar una máscara para el
desplazamiento, usando las macros anteriores
#define MASK(x) (1UL << (x))
n = MASK(GREEN_LED_POS) |
MASK(YELLOW_LED_POS);

28/05/2020 41
Repaso de máscaras con
operadores a nivel de bits
 Para sobrescribir el valor existente en n con una máscara
n = MASK(foo);
 Set en n todos los bits de una máscara que son 1s, no
modificando los demás
n |= MASK(foo);//read-modify-write
 Complementar el valor de un bit de la máscara
~MASK(foo);
 Clear en n todos los bits que son 0s en una máscara, no
modificando los demás
n &= ~ MASK(foo); //read-modify-write
• Verificar el valor de un bit en un registro
• Si es 0: if ( n & MASK(foo) == 0 ) ...
• Si es 1: if ( n & MASK(foo)) ...

28/05/2020 42
Repaso

28/05/2020 43
Repaso

28/05/2020 44
Repaso

28/05/2020 45
Ejemplos de uso de máscaras con
operadores a nivel de bits

28/05/2020 Laboratorio de Microprocesadores 46


Clock Gating
 Los procesadores modernos poseen mecanismos para reducir el
consumo del chip apagando todos los recursos que no son
usados. Esto se logra apagando el clock de dichos módulos (clock
gating).
 Para configurar que módulos reciben clock se deben habilitar los
bits correspondientes en los registros SCGCx (System Clock
Gating Control Register x).
 Después del reset estos bits están apagados para ahorrar energía.
 Los SCGCx. se encuentran dentro del modulo SIM (System
Integration Module).
 Antes de usar un modulo se debe habilitar el clock de lo
contrario se genera un error!. De igual forma antes de apagar un
clock, se deberá deshabilitar el modulo.

28/05/2020 47
Port Clock Gating
La lógica de PORT requiere clock para funcionar el registro
correspondiente es SCGC5.

Pág. 216-217 y 202 de


KL46P121M48SF4RM.pdf

28/05/2020 48
En MKL46Z4.h
/** SIM - Register Layout Typedef */
typedef struct {/* SIM - Peripheral instance base addresses */
...
__IO uint32_t SCGC5; /**< System Clock Gating Control Register 5,
offset: 0x1038 */
...
} SIM_Type, *SIM_MemMapPtr;

/* SIM - Peripheral instance base addresses */


/** Peripheral SIM base address */
#define SIM_BASE (0x40047000u)
/** Peripheral SIM base pointer */
#define SIM ((SIM_Type *)SIM_BASE)

28/05/2020 49
En MKL46Z4.h - Macros
/* SCGC5 Bit Fields, hay más */
#define SIM_SCGC5_PORTA_MASK 0x200u
#define SIM_SCGC5_PORTC_MASK 0x800u
#define SIM_SCGC5_PORTD_MASK 0x1000u
#define SIM_SCGC5_PORTE_MASK 0x2000u

#define SIM_SCGC5_PORTA_MASK (0x200U)


#define SIM_SCGC5_PORTA_SHIFT (9U)
#define SIM_SCGC5_PORTA(x)
(((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PORTA_SHIFT))
& SIM_SCGC5_PORTA_MASK)
Entonces, para habilitar el clock para PORTA:
SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK;
O, SIM->SCGC5 |=SIM_SCGC5_PORTA(1);

28/05/2020 Laboratorio de Microprocesadores 50


Port Data
D Direction Q
Register

Configurando un pin como GPIO


Freescale: is the pin
mux location in this
PDOR select diagram accurate?

PSOR select
Set
PCOR select
Rst Port Data
PTOR select Pin or
Tgl Output
Pad on
D Register Q package

I/O Clock
PDIR select
Port Data Pin Control
D Input Q Register
Register MUX field

 Se usa un multiplexor para incrementar la configurablidad de los pines. ¿Cómo


conectamos un pin a la circuitería interna?
 Cada pin configurable tiene asociado un Pin Control Register (PCR) de 32 bits,
el cual tiene un campo MUX para definir qué función tendrá el pin
 PORTX_PCRn X=A,B,C,D,E n=0:31

28/05/2020 51
Pin Control Register (pág. 193-195 y
187 de KL46P121M48SF4RM.pdf)

28/05/2020 52
PIN CONTROL REGISTER
Descripción de señales según el encapsulado

MK64FN1M0VLL12 (FRDM-K64 Board)

LL = 100 LQFP (14 mm x 14 mm)

28/05/2020 53
Soporte de CMSIS para PCR en C
/** PORT - Register Layout Typedef */
typedef struct {
__IO uint32_t PCR[32]; /**< Pin Control Register n,
array offset: 0x0, array step: 0x4 */
__O uint32_t GPCLR; /**< Global Pin Control Low
Register, offset: 0x80 */
__O uint32_t GPCHR; /**< Global Pin Control High
Register, offset: 0x84 */
uint8_t RESERVED_0[24];
__IO uint32_t ISFR; /**< Interrupt Status Flag Register, offset:
0xA0 */
} PORT_Type;

28/05/2020 Laboratorio de Microprocesadores 54


Soporte de CMSIS para PCR en C
 El header define punteros a los registros PORT_Type
/* PORT - Peripheral instance base addresses */
/** Peripheral PORTA base address */
#define PORTA_BASE (0x40049000u)
/** Peripheral PORTA base pointer */
#define PORTA ((PORT_Type *)PORTA_BASE)
 También se definen macros y constantes
#define PORT_PCR_MUX_MASK (0x700U)
#define PORT_PCR_MUX_SHIFT (8U)
#define PORT_PCR_MUX(x)
(((uint32_t)(((uint32_t)(x)) << PORT_PCR_MUX_SHIFT)) &
PORT_PCR_MUX_MASK)

m Laboratorio de Microprocesadores 55
28/05/2020 Laboratorio de Microprocesadores 56
MUX del Pin control Register
//Set PT5 (connected to green LED) for GPIO functionality
PORTD->PCR[5] |=PORT_PCR_MUX(1);

MUX (bits 10-8) Configuration


000 Pin disabled (analog)
001 Alternative 1 – GPIO
010 Alternative 2
011 Alternative 3
100 Alternative 4
101 Alternative 5
110 Alternative 6
111 Alternative 7

28/05/2020 57
PCR – Pull UP/DOWN
La resistencia de Pull-Up fuerza a nivel
alto el pin, cuando el pulsador está
abierto.

28/05/2020 58
PCR – Pull UP/DOWN (pág. 95 de
KL46P121M48SF4RM.pdf)

28/05/2020 59
PCR – Pull UP/DOWN
 En el header existen macros y constantes
/*! @name PCR - Pin Control Register n */
#define PORT_PCR_PS_MASK (0x1U)
#define PORT_PCR_PS_SHIFT (0U)
#define PORT_PCR_PS(x)
(((uint32_t)(((uint32_t)(x)) << PORT_PCR_PS_SHIFT))
& PORT_PCR_PS_MASK)

#define PORT_PCR_PE_MASK (0x2U)


#define PORT_PCR_PE_SHIFT (1U)
#define PORT_PCR_PE(x)
(((uint32_t)(((uint32_t)(x)) <<
PORT_PCR_PE_SHIFT)) & PORT_PCR_PE_MASK)

28/05/2020 Laboratorio de Microprocesadores 60


PCR – Pull UP/DOWN
 Ejemplo de configuración de un pin como
GPIO con resistencia de pull-up (SW1)

PORTC->PCR[3] |= PORT_PCR_MUX(1) |
PORT_PCR_PE_MASK |
PORT_PCR_PS_MASK;

28/05/2020 61
Pasos a seguir en la configuración
(para Informática Aplicada)
 Verificar en el pinout a qué puerto (y bit)
está conectado el SW o LED a usar
 Habilitar los respectivos clocks de los ports
a utilizar, a través del registro SIM->SCGC5
 Use PORTx->PCR[n] (x es el PORT y n
número de pin del PORT) para seleccionar la
opción ALT1 (con el campo MUX), además si
uso el pin como entrada (SW) debe habilitar
y conectar la resistencia de pull-up
 Si quiere inicializar algún LED apagado use
PTx->PSOR(x es el PORT)

28/05/2020 62
Pasos a seguir en la configuración
(para Informática Aplicada)
 Configurar el pin como entrada (SW) o
como salida (LED) usando PTx->PDDR,
donde x es el PORT correspondiente
 Una vez configurado los pines: si es un pin
de entrada (SW), puede leerse el estado
con PTx->PDIR. Si es un pin de salida
(LED) puede controlarse con varios
registros: PTx->PCOR, PTx->PSOR, PTx-
>PTOR (toggle) o con PTx->PDOR

28/05/2020 63
Flujo de una aplicación en un MCU
 Hay diferentes formas de estructurarlo. En la materia
veremos sólo una, en los siguientes cuatrimestres se
verán otras
◦ “The difference between polling and interrupt is whether
software asks, or whether the hardware tells it!”
 A diferencia de una aplicación en una PC, en una de un
MCU, el flujo no tiene fin, es decir existe un programa
que se ejecuta indefinidamente mientras el MCU esté
alimentado o no se resetee.
 Casi siempre ejecutan un único programa (sistemas
dedicados).

28/05/2020 64
Polling o encuesta
 A veces se lo suele llamar super loop
 En aplicaciones sencillas es fácil de implementar y
funciona bastante bien con tareas simples. Su principal
ventaja es la simplicidad.

28/05/2020 65
Polling o encuesta
 Sin embargo cuando las aplicaciones son más complejas
y demandan mayor capacidad de procesamiento no es
adecuado. Se pueden llegar a perder eventos, debido a
que el código se ejecuta en un determinado orden y, no
en respuesta a un evento.

28/05/2020 66
Polling o encuesta
 Otra desventaja: el procesador tiene que ejecutar el
polling todo el tiempo, aún sino se requiere
procesamiento, reduciendo por tanto la eficiencia
energética.
 Por ejemplo: si el polling se hace sobre un teclado que,
como mucho puede producir 10 eventos de entrada
por segundo, el mismo debe ser encuestado millones de
veces (aún en los CPU más lentos) por el pulsado de
teclas. Por tanto el CPU pierde casi todo su tiempo
comprobando que no hay ningún evento de entrada y,
una vez cada algunos millones de iteraciones encuentra
algo útil para hacer

28/05/2020 67
Polling o encuesta
 Como verán al escribir programas para el MCU,
el procesador gasta un gran número de ciclos
de CPU en un lazo que sirve sólo para generar
un retardo

28/05/2020 68
Conviene usar polling cuando…
 El operador es humano
 No se requiere una temporización precisa
 El estado es más importante que el cambio
 Los “impulsos” duran mucho
 Hay ruido en la señal
 Hay cosas para hacer en el main (pero no
demasiado)

28/05/2020 69
Cómo programarán el MCU?
 El software se ejecuta directamente sobre el hardware
(bare metal), sin sistema operativo. El software tiene
acceso directo a los recursos del hardware.
 Existe un término específico para el software de un
MCU: firmware, un software que maneja físicamente al
hardware, grabado en una memoria de tipo no volátil
(ROM, EEPROM, flash,...). Es una combinación de
software y hardware.
 Contiene el bootloader

28/05/2020 70
Bootloader
 Pieza de código (en nuestro MCU reside en flash)
que se encarga de :
◦ Inicializar el hardware de forma básica
◦ Gestiona de forma automática (sin ningún hardware
adicional) el proceso de grabación en flash del programa
que queremos que el MCU ejecute, transferirle el control
así como, permitir su actualización
◦ Es siempre la primera aplicación que se ejecuta después de
un reinicio; decide si la aplicación principal está lista para
iniciar su ejecución o no y, si se procede a realizar una
actualización. El beneficio de tener un bootloader es
principalmente permitir la reprogramación del sistema.

28/05/2020 71
Bootloader
 La descarga se hace a través de un puerto serie
virtual en un USB (OpenSDA USB)
 OpenSDA (Open-standard serial and
debug adapter), actúa como un puente entre
la PC (donde tendremos instalado nuestro IDE)
y el MCU; se usa para debug, programación en
flash (en nuestro caso a través de CodeWarrior,
IDE open source), y comunicación serie a través
de un cable USB.

28/05/2020 72
Bootloader

http://electronicams.blogspot.com.ar/2013/10/primeros-pasos-con-la-
interfaz-opensda.html o en
http://www.dsi.fceia.unr.edu.ar/images/downloads/InformaticaAplicada
/SASE_2014_FREESCALE_Workshop_Microcontroladores_Kinetis.p
df

28/05/2020 73
Cómo programarán el MCU?
 Usaremos una herramienta de desarrollo de
software del MCU (target) que se ejecutará en
la PC (host)
 Cross-compiler: traductor de lenguaje de alto
nivel a código ejecutable que se ejecuta en una
plataforma pero que genera código de otra
plataforma diferente
 Toolchain: conjunto de herramientas que
permiten realizar la compilación cruzada
◦ Compilador, linker, librerias, debbuger

28/05/2020 74
El 1° programa en el MCU
 Hello World!...???

28/05/2020 75
Hello World!

void delay(int ms){


int i;
for(i=ms*1500;i>0;i--) // 1000 is about 1 s at 20 - 25 Mhz
{

}}

28/05/2020 76
Referencias
Algunas transparencias se extrajeron de:
http://ik.itba.edu.ar/~jacoby/Lab%20micros%202015/Teoricas/Kinetis/
Letct00/GPIOv003.pdf
Peripherals of Freescale Kinetis microcontrolers –ARM University
Program. Gracias!

77
28/05/2020

También podría gustarte