File

Anuncio
Introducción a la Tiva TM4C123G Launchpad
Rodrigo Chang
Universidad de San Carlos de Guatemala
[email protected]
14 de febrero de 2015
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
1 / 18
Lo que veremos hoy...
1
Microcontrolador Tiva TM4C123G
2
Proceso de desarrollo en Code Composer Studio
3
Introducción a la librerı́a de periféricos Tivaware
4
Fuentes de reloj para el sistema
5
Introducción a las entradas y salidas de propósito general
Caracterı́sticas y configuración
6
Conceptos necesarios antes de programar
Configuración básica
Configuración con la TivaWare
Configurando salidas
Nuestro primer programa
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
2 / 18
Microcontrolador Tiva™ TM4C123G
Bajo consumo de energía
 Tan
bajo como 370 µA/MHz
 Despierta
en 500µs de los modos de bajo
consumo.
 Corriente
en modo RTC tan baja como
1.7µA
 Control
de energía interno y externo.
Core and FPU ...
Núcleo M4 y unidad de punto flotante


Núcleo de 32-bit ARM® Cortex™-M4
Juego de instrucciones Thumb2 de 16/32-bit :





Frecuencia de reloj del sistema hasta 80 MHz
100 DMIPS @ 80MHz
Flexibilidad en el reloj del sistema










26% menos memoria y
25% más rápido que Instrucciones puras 32-bit
Oscilador de precisión interno.
Oscilador principal externo con soporte de PLL.
Oscilador interno de baja frecuencia.
Real-time-clock (RTC) a través del módulo de Hibernación
Aritmética saturada para procesamiento de señales
Manipulación atómica de bits. Leer-Modificar-Escribir usando bit-banding.
Multiplicación y división por hardware en un sólo ciclo.
Acceso desalineado a los datos para un uso más eficiente de la memoria.
Unidad de punto flotante de precisión simple de acuerdo al IEEE754
JTW y Serial Wire Debug como acceso de depuración.
Memory ...
Memoria del TM4C123GH6PM
256KB de memoria Flash


Ciclo-simple a 40MHz
Búfer de pre-búsqueda y rama especulativa mejora el
desempeño arriba de 40 MHz
32KB SRAM de ciclo-simple con bit-banding
ROM interna cargada con el software TivaWare




Librería manejadora de periféricos
Gestor de arranque
Tablas de criptografía del Advanced Encryption
Standard (AES)
Funcionalidad de detección de errores utilizando
Cyclic Redundancy Check (CRC)
2KB EEPROM (rápida, ahorra memoria)





500K ciclos de programación/borrado.
32 bloques de 16-palabras
Borrado por masa o por bloques.
Retención de datos de 10 años
Tiempo de lectura de 4 ciclos de reloj.
0x00000000 Flash
0x01000000 ROM
0x20000000 SRAM
0x22000000 Bit-banded SRAM
0x40000000 Periféricos y EEPROM
0x42000000 Periféricos Bit-banded
0xE0000000 Instrumentación, ETM, etc.
Peripherals ...
Periféricos del TM4C123GH6PM
Conectividad serial




Conexión USB 2.0 (OTG/Host/Dispositivo)
8 - UART with IrDA, 9-bit y soporte ISO7816
6 – Módulos I2C
4 – Módulos SPI, con formatos:




Microwire
Interfaz serial síncrona de Texas Instruments
Freescale SPI
2 – Módulos CAN
More ...
Periféricos TM4C123GH6PM
Dos “simples ADC’s” de 1MSPS y 12-bit SAR









12 entradas compartidas.
Medición diferencial y de terminación única
Sensor de temperatura interno.
4 secuenciadores de muestras programables
Control flexible de trigger: SW, Timers, comparadores analógicos, GPIO
Referencias de voltaje VDDA/GNDA
Promediado opcional por hardware
3 comparadores analógicos y 16 digitales
Habilitación de µDMA
0 - 43 GPIO
Cualquier GPIO puede activar una interrupción externa por nivel
o por flanco.
 Pueden iniciar los secuenciadores de muestras o las transferencias
µDMA directamente.
 Tasa de conmutación hasta la velocidad del reloj del CPU en el Advanced
High-Performance Bus
 Configuración de entradas tolerantes a 5V
(excepto por PB0/1 y los pines de datos USB cuando funcionan como GPIO)
 Fuerza de manejo programable (2, 4, 8 mA or 8 mA con control de slew rate)
 Resistencias débiles programables pull-up, pull-down, y drenador abierto.

More ...
TM4C123GH6PM Peripherals
Unidad de protección de memoria - Memory Protection Unit (MPU)

Genera una falla en el manejo de memoria en el acceso incorrecto a la región.
Timers






2 Watchdog timers con relojes separados.
Temporizador SysTick. 24-bit RTOS de alta velocidad.
Seis timers de propósito general de 32-bit y seis de 64-bit
Modos PWM y CCP
Conexión en cadena de timers.
User enabled stalling on CPU Halt flag from debugger for all timers
32 canales de µDMA




Basic, Ping-pong and scatter-gather modes
Dos niveles de prioridad
Tamaños de datos de 8,16 y 32-bit
Habilitación de interrupciones.
More...
Periféricos TM4C123GH6PM
Nested-Vectored Interrupt Controller (NVIC)




7 excepciones y 71 interrupciones con 8 niveles de prioridad programables
Encadenamiento de interrupciones y otras características de baja latencia.
Determinística: siempre 12 ciclos o 6 con encadenamiento de cola.
Sistema automático de guardado y restauración de registros.
Dos módulos de control de movimiento. Cada uno con:
8 salidas PWM de alta resolución.
Puentes H generadores de banda muertacontrol de polaridad
por hardware.
 Falla de entrada para apagado de baja latencia.
 Quadrature Encoder Inputs (QEI)
 Sincronización en los módulos y entre los mismos.


Board...
Tiva™ EK-TM4C123GXL LaunchPad

ARM® Cortex™-M4F
64-pin 80MHz TM4C123GH6PM

Interfaz en la placa USB ICDI
(In-Circuit Debug Interface)

Puerto micro AB USB

Switch de control de Dispositivo/ICDI

Arreglo de pines BoosterPack XL
con soporte para el convencional
BoosterPack

2 botones para el usuario
(SW2 conectado al pin WAKE)

Botón de reset

3 LEDs para usuario (1 disp. tri-color)

Puntos de medición de corriente.

Cristal de 16MHz como osc. principal

Cristal de 32.768kHz para RTC

Regulador de 3.3V

Soporte para distintos IDEs:
Lab...
Herramientas de desarrollo
Proceso de desarrollo en CCS
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
3 / 18
Proceso de desarrollo en Code Composer Studio
Compilador
.asm
Librerías
Estándar
.out
.obj
.asm
Linker
Ensamblador
Archivo de
configuración
Simulador
.ccxml
.lib
.c
Edición
SYS/BIOS
Librerías
Debug
Emulador/
LaunchPad
.
.
.
SYS/BIOS
Config
(.cfg)
User.cmd
.map
.gel
Emulador
Standalone
Bios.cmd

Integrated Development Environment (IDE) basado en Eclipse

Contiene todas las herramientas de desarrollo – compiladores,
ensamblador, linker, depurador, BIOS and includes one target –
the Simulator

Los archivos GEL inicializan el depurador para que entienda
donde está la memoria, los periféricos, etc.
Placa objetivo
Configuración objetivo y emuladores…
Proyectos y Workspaces (como se ve en CCS)
Código
fuente
Proyecto
Espacio de
trabajo
WORKSPACE
Proyectos y espacios de trabajo…
Proyectos y espacios de trabajo
Proyecto
• Proyecto 1
• Código fuente
• Proyecto 2
Link
• Cabeceras
• Librerías
• Configuraciones/
• Preferencias de
construcción
El WORKSPACE contiene:
• Configuraciones y preferencias del
IDE
• Los proyectos pueden residir en el
workspace or ser vinculados de
cualquier ubicación.
• Cuando importamos proyectos al
workspace se recomienda vincularlos
• Borrar un proyecto en el Explorador
de Proyectos sólo borra el vínculo.

• Código y datos
Link Cabeceras
• Declaraciones
• Proyecto 3
preferencias

Link Código fuente
Workspace
Link Librerías
• Código y datos
La carpeta del proyecto contiene:
• Configuraciones de
construcción.
• Los archivos pueden ser
vinculados o copiados al
directorio del proyecto.
• Borrar un archivo vinculado
solamente elimina el vínculo.
Creating a New Project …
¿Cómo programar más fácil?
Librerı́a de periféricos Tivaware
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
4 / 18
Características de la TivaWare™
Librería de manejo de periféricos
 API
de alto nivel como interfaz para el conjunto de periféricos.
Licencia & royalty free uso para las partes TI Cortex-M
 Disponible como objeto de librería y como código fuente
 Pre-programada en la ROM interna del chip

Extras
USB y ejemplos


Dispositivo USB y host embebido

Dispositivo, Host, OTG y ejemplos en Windows


Programa gratuito VID/PID


Protocolos inalámbricos
Ejemplos de matemática IQ
Gestores de arranque
Aplicaciones del lado de Windows.
Ethernet

Pilas lwip y uip con 1588 modificaciones PTP

Ejemplos extensivos
Librería de gráficos
Librería de sensores
Primitivas de gráficos y
componentes.
 153 fuentes
 Herramientas de utilidad gráfica





Un manejador de interrupciones
I2C para
manejar las transferencias I2C
Un conjunto de drivers para los sensores I2C
conectados.
Conjunto de rutinas para operaciones
comunes.
Tres capas: Transporte, Sensado y
Procesamiento.
Opciones ISP...
Reloj del sistema
Fuentes de reloj del sistema
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
5 / 18
Fuentes fundamentales de reloj
Oscilador interno de precisión (PIOSC)

16 MHz ± 3%
Oscilador principal (MOSC) usando…

Fuente externa de reloj de terminación única.

Un cristal externo.
Oscilador interno de 30 kHz


30 kHz ± 50%
Para el uso durante los modos Deep-Sleep ahorradores de
energía.
Fuente de reloj del módulo de hibernación


Cristal de 32,768Hz
Para proveer un sistema con una fuente de reloj de tiempo
real.
Fuentes de reloj SysClk...
Fuentes de reloj del sistema (CPU)
El CPU puede ser manejada desde cualquiera de las fuentes
fundamentales:




Interna de 16 MHz
Principal
Interna de 30 kHz
Externa de tiempo-real
- Además 

El PLL interno(400 MHz)
El oscilador interno de 16MHz dividido por cuatro (4MHz ± 3%)
Fuente de reloj
Interna16MHz
Interna 16Mhz/4
Oscilador principal
Interna de 30 kHz
Modulo de hibernación
PLL
Maneja el
PLL?
Sí
No
Sí
No
No
-
Usada como
SysClk?
Sí
Sí
Sí
Sí
Sí
Sí
Árbol de reloj...
Árbol de reloj de la Tiva C Series
La función del API SysCtlClockSet()
selecciona:




Configuración de SYSDIV
OSC or PLL
Oscilador principal o interno
Frecuencia del cristal
GPIO...
GPIO
Caracterı́sticas y configuración
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
6 / 18
Entradas y salidas de propósito general (GPIO)

Cualquier GPIO puede ser una fuente de interrupción:








Activadas por flanco, en el de subida, bajada o ambos.
Sensibles al nivel en valores altos o bajos.
Pueden iniciar los secuenciadores de muestras o las
transferencias µDMA
Tasa de conmutación hasta la velocidad de reloj del CPU en el
Advanced High-Performance Bus. ½ velocidad de reloj del CPU
Standard Bus.
Configuración de entradas tolerantes a 5V.
Fuerza de manejo programable (2, 4, 8mA u 8mA con control de
pendiente)
Resistencias programables pull-up, pull-down, y drenador
abierto.
El estado del pin se mantiene durante el modo de hibernación.
Utilidad Pin Mux...
Utilidad Pin Mux

Permite al usuario configurar gráficamente los pines del dispositivo.

Genera el código y las cabeceras para usar con cualquiera de los IDEs
http://www.ti.com/tool/tm4c_pinmux
Enmascarando bits...
Enmascaramiento de direcciones GPIO
Cada puerto GPIO tiene una dirección base. Si queremos modificar bits específicos,
podemos utilizar una máscara para indicar los bits se quieren modificar. Esto está hecho
en hardware, mapeando cada puerto GPIO a 256 direcciones. Los bits 9:2 del bus de
direcciones se usan como la máscara.
El registro que queremos cambiar es el GPIO Puerto D
(0x4005.7000)
El actual contenido es:
Escribiremos el valor 0xEB:
En lugar de escribir directamente al puerto, escribimos
en la dirección 0x4005.7098. Los bits 9:2 (mostrados)
se vuelven una máscara para los bits a escribir.
Sólo los bits marcados como “1” en la máscara son
cambiados.
GPIO Port D (0x4005.7000)
00011101
Escribir valor (0xEB)
11101011
…0 0 0 0 0 1 0 0 1 1 0 0 0
00111011
Nuevo valor en el GPIO Puerto D
(sólo los bits en rojo se escribieron)
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_5|GPIO_PIN_2|GPIO_PIN_1, 0xEB);
Note: especificamos la dirección base, la máscara y el valor a escribir.
La función GIPOPinWrite() determina la dirección correcta para la máscara.
Desbloqueo de GPIO...
Protección de funciones críticas GPIO

Seis pines en el dispositivo están protegidos contra
programación accidental:
•
•

Cualquier escritura a los siguientes registros para estos pines
no será guardado a menos que el registro GPIOLOCK se
desbloquee:
•
•
•

PC3,2,1 & 0: JTAG/SWD
PD7 & PF0: NMI
GPIO Alternate Function Select register
GPIO Pull Up or Pull Down select
GPIO Digital Enable register
La siguiente secuencia desbloquea el registro GPIOLOCK para
PF0 usando programación directa de registros:
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;

Leer el registro GPIOLOCK lo vuelve a su estado de bloqueo.
Lab...
Conceptos necesarios
Iniciando con la programación
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
7 / 18
Cabeceras para programar
La librerı́a TivaWare está escrita utilizando ANSI C (C99). Debemos
incluir algunas cabeceras para escribir nuestros programas.
1
4
# include
# include
# include
# include
# include
# include
< stdint .h >
< stdbool .h >
" inc / hw_memmap . h "
" inc / hw_types . h "
" driverlib / sysctl . h "
" driverlib / gpio . h "
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
8 / 18
Acceso a los registros del microcontrolador
TM4C123GH6PM
Para tener acceso a los registros del microcontrolador incluimos el archivo
de definiciones para el mismo.
# include " inc / tm4c123gh6pm . h "
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
9 / 18
Acceso a los registros del microcontrolador
TM4C123GH6PM
Para tener acceso a los registros del microcontrolador incluimos el archivo
de definiciones para el mismo.
# include " inc / tm4c123gh6pm . h "
Este archivo define los registros de la siguiente forma:
# define GPIO_PORTA_DATA_R (*(( volatile uint32_t *) 0 x400043FC
))
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
9 / 18
Acceso a los registros del microcontrolador
TM4C123GH6PM
Para tener acceso a los registros del microcontrolador incluimos el archivo
de definiciones para el mismo.
# include " inc / tm4c123gh6pm . h "
Este archivo define los registros de la siguiente forma:
# define GPIO_PORTA_DATA_R (*(( volatile uint32_t *) 0 x400043FC
))
Esto facilita el acceso a los registros, evitando que utilicemos algo como
esto cada vez que modifiquemos el contenido de una dirección de memoria.
(*(( volatile uint32_t *) 0 x400043FC ) ) = 0 x2f ;
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
9 / 18
Pregunta
¿Registros o librerı́a de periféricos?
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
10 / 18
Configuración básica utilizando los registros
2
5
8
11
void PLL_Init ( void ) {
SYSCTL_RCC2_R |= 0 x80000000 ; // USERCC2
SYSCTL_RCC2_R |= 0 x00000800 ; // BYPASS2 , PLL bypass
SYSCTL_RCC_R = ( SYSCTL_RCC_R &~0 x000007C0 )
// clear
XTAL field , bits 10 -6
+ 0 x00000540 ;
// 10101 , configure for 16 MHz crystal
SYSCTL_RCC2_R &= ~0 x00000070 ; // configure for main
oscillator source
SYSCTL_RCC2_R &= ~0 x00002000 ;
SYSCTL_RCC2_R |= 0 x40000000 ;
// use 400 MHz PLL
SYSCTL_RCC2_R = ( SYSCTL_RCC2_R &~ 0 x1FC00000 ) // clear
system clock divider
+ (4 < <22) ;
// configure for 80 MHz clock
while (( SYSCTL_RIS_R &0 x00000040 ) ==0) {}; // wait for
PLLRIS bit
SYSCTL_RCC2_R &= ~0 x00000800 ;
}
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
11 / 18
Configuración básica con la TivaWare
2
// Configura el reloj del sistema a 40 MHz utilizando un
cristal de 16 MHz
SysCtlClockSet ( SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ |
SYSCTL_USE_PLL | SYSCTL_SYSDIV_5 ) ;
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
12 / 18
Configuración básica con la TivaWare
1
// Configura el reloj del sistema a 40 MHz utilizando un
cristal de 16 MHz
SysCtlClockSet ( SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ |
SYSCTL_USE_PLL | SYSCTL_SYSDIV_5 ) ;
Conclusión
La librerı́a de periféricos es la forma más fácil.
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
12 / 18
Configuración básica con la TivaWare
1
// Configura el reloj del sistema a 40 MHz utilizando un
cristal de 16 MHz
SysCtlClockSet ( SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ |
SYSCTL_USE_PLL | SYSCTL_SYSDIV_5 ) ;
Conclusión
La librerı́a de periféricos es la forma más fácil.
Pero cuidado...
No siempre es la mejor forma, a veces debemos configurar antes con los
registros para entender el funcionamiento de la librerı́a de periféricos. Y
otras veces no la utilizamos porque necesitamos un acceso más inmediato.
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
12 / 18
Configuración de periféricos
Para configurar periféricos en el microcontrolador, la fórmula es casi
siempre la misma cuando utilicemos la librerı́a.
Activar el reloj para el periférico.
Configurar los pines para el periférico (si es que utiliza).
Configurar el periférico (Temporizadores, USCI’s, ADC, etc).
Configurar las interrupciones y la prioridad del periférico.
Habilitar el periférico para que empiece a funcionar.
Finalmente, interactuar con el periférico.
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
13 / 18
Configuración de GPIO
1
// Habilita el reloj al periferico ( GPIOF )
S y s C tl Per i p h e r a l E n a b le ( SYSCTL_PERIPH_GPIOF ) ;
4
// Configura los pines 1 , 2 y 3 del puerto F como salidas
G P I OPin Typ e G P I O O u t p u t ( GPIO_PORTF_BASE , GPIO_PIN_1 | GPIO_PIN_2
| GPIO_PIN_3 ) ;
7
// Escribe el valor ui8PinData utilizando la direccion donde
se mapeen los pines 1 , 2 y 3 del puerto F
GPIOPinWrite ( GPIO_PORTF_BASE , GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3 , ui8PinData ) ;
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
14 / 18
Retardando la ejecución
Podemos crear un retardo o un delay en el programa utilizando la
instrucción:
1
SysCtlDelay (2000000) ;
El parámetro que recibe es el número de ciclos de 3 ciclos de reloj a
esperar. Por lo tanto, si queremos esperar T segundos y fosc es la
frecuencia del bus del sistema (e.g. 40MHz) entonces el parámetro x a
colocar serı́a:
x=
Rodrigo Chang (USAC)
T fosc
3
Laboratorio de Comunicaciones 4
14 de febrero de 2015
15 / 18
Retardando la ejecución
Podemos crear un retardo o un delay en el programa utilizando la
instrucción:
SysCtlDelay (2000000) ;
El parámetro que recibe es el número de ciclos de 3 ciclos de reloj a
esperar. Por lo tanto, si queremos esperar T segundos y fosc es la
frecuencia del bus del sistema (e.g. 40MHz) entonces el parámetro x a
colocar serı́a:
x=
T fosc
3
Cuidado
Esta instruccion bloquea la ejecución del programa, el CPU se dedica solo
a perder tiempo, a menos que hayan interrupciones configuradas.
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
15 / 18
Fin del contenido
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
16 / 18
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
17 / 18
Nuestro primer programa
Empecemos a programar...
Rodrigo Chang (USAC)
Laboratorio de Comunicaciones 4
14 de febrero de 2015
18 / 18
Descargar