Laboratorio de Sistemas Embebidos - um.es
Transcript of Laboratorio de Sistemas Embebidos - um.es
Laboratorio de Sistemas Embebidos
Conceptos generales
(2009)
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Introducción a los PIC (1)
PIC Microchip no usa PIC como un acrónimo, pero
son conocidos como Peripheral Interface Controllers
Familia de microcontroladores con arquitectura Harvard
Amplia funcionalidad de I/O Populares por su bajo coste, amplia disponibilidad
y uso, y gran cantidad de recursos sobre ellos Usado en una amplia gama de dispositivos (ej.
PlayStation)
Introducción a los PIC (2)
Familia PIC
PICs de gama baja Memoria de código
direccionable por 12 bits Pila de llamada de dos
niveles Programación por
acumulador PIC10, PIC12, y algunos
PIC16
Introducción a los PIC (3)
Familia PIC
PICs de gama media Memoria de código
direccionable por 14 bits Pila de llamada de 8
niveles Leve modificación del
conjunto de instrucciones
Mayoritariamente PIC12 y PIC16
Introducción a los PIC (4)
Familia PIC
PIC17 Nunca llegó a ser popular Fue absorbido por el PIC18 Mayor cantidad de
instrucciones Pila de 16 niveles Movimiento de datos
registro a registro Opción de memoria externa Multiplicador
Introducción a los PIC (5)
Familia PIC
PIC18 El más popular de toda
la gama Hereda las nuevas
funcionalidades del PIC17
Pila de 31 niveles Mejora del
direccionamiento
Introducción a los PIC (6)
Familia PIC
PIC24 Mejora significativa de la
arquitectura Mayor frecuencia de
reloj Capacidades DSP Primeros PIC de 16 bits
reales (direccionamiento y registros de 16 bits)
Multiplicación mejorada División
Introducción a los PIC (7)
Familia PIC
dsPIC30 Arquitectura
prácticamente equivalente a PIC24
El dsPIC30 fue anterior a los PIC24
Incluye capacidades como procesador de señales digitales
Canales A/D: 16 canales de 10 bits y 16 canales de 12 bits
Introducción a los PIC (8)
Familia PIC
dsPIC33 Incremento del número
de interrupciones disponibles
Mayor número de timers Incremento en el número
de líneas de captura de señales de entrada
Incremento del número de líneas para señales de salida
Introducción a los PIC (9)
PIC18 -> PIC24 Salto cualitativo en la arquitectura Paso de tamaño de instrucción de 16 a 24 bits Frecuencia de reloj doblada 16 registros de trabajo, frente a un único registro
en PIC18 De un registro de estado a dos La pila pasa a ser software El multiplicador pasa de 8x8 a 17x17 Inclusión de un divisor
Introducción a los PIC (10) Resumen comparativo de la familia PIC
Precio ($)
CPU (MIPS)
Flash (KB)
RAM (KB)
EEPROM (KB)
Puertos I/
O
ADC (cha) Input Capture
(cha)
Output Compare (cha)
Motor Control
(cha)
Timers UART SPI I2C CAN
PIC10F222 0.47 0.002 0.75 0.02 0 4 2 8-bit 0 0 0 1 8-bit 1 WDT
0 0 0 0
PIC12HV615 0.71 0.005 1.75 0.0625 0 6 4 10-bit 1 1 0 2 8-bit 2 16-bit 1 WDT
0 0 0 0
PIC14000 5.49 0.005 7 (OTP)
0.1875 0 20 8 8-bit 1 1 0 1 8-bit 1 16-bit 1 WDT
0 0 0 0
PIC16HV785 1.18 0.005 3.5 0.125 0.25 18 12 10-bit 1 1 0 2 8-bit 1 16-bit 1 WDT
0 0 0 0
PIC18F8722 7.41 10 0.125 3.84 1 70 16 10-bit 5 5 0 2 8-bit 3 16-bit 1 WDT
2 1 2 0
PIC24FJ128GA010 5.05 16 128 8 0 86 16 10-bit 5 5 0 5 16-bit 2 2 2 0
PIC24HJ64GP510 4.90 40 64 8 0 85 32 10-bit 32 12-bit
8 8 0 9 16-bit 4 32-bit
2 2 2 1
dsPIC30F6010A 8.31 30 144 8 4 68 16 10-bit 8 8 8 5 16-bit 2 32-bit
2 2 1 2
dsPIC33FJ64MC710 5.82 40 64 16 0 85 24 12-bit 24 10-bit
8 8 8 9 16-bit 4 32-bit
2 2 2 2
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Conceptos generales sobre el dsPIC30F (1)
Arquitectura optimizada para programación en alto nivel
144 KB de memoria de programa 12 KB de memoria de datos (8 KB SRAM y 4
KB EEPROM) Hasta 30 MIPS Capacidades DSP, comunicación, conversión
analógica. (No trataremos estas características en las prácticas)
Conceptos generales sobre el dsPIC30F (2)
Modelo de programación 16 registros de trabajo Pila implementada en
software W15 -> Puntero a pila SPLIM -> Límite pila Pila en espacio de datos
Registro de estado Todos los registros están
mapeados en memoria de datos, salvo los que contienen la configuración inicial
Conceptos generales sobre el dsPIC30F (3)
Memoria de código Dirección para empezar a ejecutar código
(Reset-GOTO Instruction) Tabla de vectores de interrupción (normal
y alternativa) Memoria flasheable de instrucciones EEPROM que amplia los 8 KB de
memoria de datos Registros de configuración
Conceptos generales sobre el dsPIC30F (4)
Memoria de datos Espacio para los
registros del PIC (Special Function Registers)
8 KB para datos de programa.
Direccionamiento opcional hacia memoria en el espacio de código (EEPROM)
Conceptos generales sobre el dsPIC30F (5)
Primeros registros del PIC y su mapeo en memoria
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Reloj del sistema (1)
El reloj del sistema viene dado por la selección de una fuente de oscilación y una configuración de la señal dada por éste.
Tipos de osciladores: Interno: Disponible en el propio PIC. Externo: Generalmente instalado en la placa en donde se inserta
el PIC. Tratamientos posibles a la señal dada por el oscilador:
Phase Locked Loop (PLL): Multiplica una señal de reloj (aumenta la frecuencia).
Programmable Clock Divider: Divide una señal de reloj (disminuye la frecuencia).
La selección del reloj y sus propiedades se guardan en los registros de configuración del sistema (memoria de código).
Reloj del sistema (2)
Posibles configuraciones de reloj
Reloj del sistema (3)
Esquema general de funcionamiento del reloj del sistema
Reloj del sistema (4)
La frecuencia a la que funciona el PIC (Fcy), es decir, a la que se ejecutan las instrucciones, se calcularía según la siguiente expresión:
Fcy = (Fosc*PLL)/Post/4, , donde:
Fosc: Frecuencia del oscilador usado. PLL: Multiplicador que implica el preescaler. Post: Divisor que implica el 4: Indica los ciclos necesarios para completar una
instrucción (considerar que no existe pipeline)
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Entrada/salida con puertos paralelos (1)
La E/S del PIC permite conectar éste a diversos dispositivos. Aunque los PIC suelen diponer de otros tipos de comunicación
(RS232, SPI, I2C, CAN, etc), los puertos de comunicación paralelos, o Parallel I/O (PIO) Ports, son los más comunes.
La mayoría de las pines (patillas) de un PIC pueden usarse como líneas de E/S, aunque también pueden tener un uso específico en su conexión con diversos periféricos.
Las líneas de E/S se organizan en puertos para facilitar su identificación.
El dsPIC30F6014 dispone de 68 líneas PIO, divididas en 6 puertos.
Entrada/salida con puertos paralelos (2)
Cada puerto tiene tres registros para su operación TRISx: Indica la dirección de los datos (1 entrada y 0
salida) PORTx: Lee el nivel lógico de la línea en cuestión. LATx: Lee el valor del latch del puerto.
Accediendo a los bits individuales de estos registros se puede acceder a una línea concreta de I/O.
Por ejemplo, el bit 15 del registro LATA permite leer el valor de la línea 15 del puerto A.
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Timers (1)
Un timer es un reloj que periódicamente emite una señal.
Los timers en el PIC están implementados como contadores que se incrementan con el reloj del sistema (generalmente).
Útiles para programar tareas periódicas o basadas en control temporal.
El dsPIC30F6014 dispone de 5 timers de 16 bits: Timer1, Timer2/3 y Timer 4/5. Los cuatro últimos pueden agruparse para formar timers de 32 bits.
Timers (2)
Esquema general Registros:
TMRx: Valor actual del timer.
PRx: Periodo del timer. TxCON: Configuración
del timer Cuando TMRx=PRx se
habilita la bandera asociada al timer.
En timers de 32 bits el esquema variaría ligeramente
Timers (3)
El registro asociado TxCON establece: La habilitación del timer. El funcionamiento en diversos estados de ejecución (bajo
consumo, etc). El preescaler usado. El reloj del sistema (o reloj externo)
funciona demasiado rápido para un timer. Preescaler disponibles: 1:1, 1:8, 1:64 y 1:256.
El periodo de un timer viene dado por: P= (Fcy / PRx) / Pre ,donde Pre es el divisor de frecuencia que implica el
preescaler.
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
Interrupciones (1)
Las interrupciones sirven para controlar de forma asíncrona el flujo del software y para que el PIC informe de determinados eventos.
Existen dos tipos de interrupciones: Interrupciones controladas por el usuario. Son configuradas
por el usuario y sirven para gestionar el funcionamiento del hardware y actuar ante determinados eventos. Interrupciones internas. Son las más comunes, y están
relacionadas con los interfaces de comunicación, los timers, etc. Interrupciones externas. Están conectadas a líneas externas
(pines), y son activadas cuando éstas reciben un valor lógico alto. Excepciones del procesador (traps). Las genera el PIC ante
situaciones anómalas. Pueden ser tratadas, pero no desactivadas.
El dsPIC30F6014 dispone de 41 interrupciones de usuario (4 de ellas externas) y 4 traps.
Interrupciones (2)
La parte del código que debe ejecutarse ante una interrupción se direcciona a partir de la Tabla de Vectores de Interrupción, o Interrupt Vector Table (IVT).
Dicha dirección equivale al comienzo de la Rutina de Servicio a la Interrupción, o Interrupt Service Routine (ISR).
Se incluye, además, una tabla alternativa (AIVT) que se usa en situaciones de depuración o pruebas.
Interrupciones (3)
Control de las interrupciones 28 registros de control
INTCON1: Contiene los bits de bandera (flags) para los traps. INTCON2: Configura el comportamiento de las interrupciones
externas y el uso de la AIVT. IFS0-4: Contienen los bits de estado o flags para todas las
interrupciones de usuario. IEC0-4: Bits de habilitación de las interrupciones de usuario.
Los bits usados para cada interrupción de usuario en los registros IFS e IEC están asignados en el mismo orden en el que se encuentran en la IVT.
Por ejemplo, la primer interrupción de la IVT (INT0), está en el bit 0 de los registros IFS0 y del IEC0..
Interrupciones (4)
Prioridad de las interrupciones (1) La prioridad es útil para establecer un
orden de preferencia ante la ocurrencia de dos o más interrupciones simultáneas.
Por defecto, la estrategia seguida sigue el orden natural de las prioridades, que no es más que el orden en la IVT.
Adicionalmente existe un sistema de asignación de prioridades
Interrupciones (5) Prioridad de las interrupciones (y 2)
Registros usados: IPC0-10: Indican el valor de prioridad asignado a una interrupción,
desde 0 hasta 7 (la mayor prioridad). CORCON: Contiene los bits menos significativos, y asignables por el
usuario, del valor de Nivel de Prioridad de las Interrupciones, o Interrupt Priority Level (IPL). Desde 0 hasta 7.
STATUS: Contiene el bit más significativo del valor de IPL, que permite establecer un valor de IPL mayor a 7. Este bit solamente puede establecerlo el núcleo.
De esta manera, una interrupción será tratada si IPC>IPL. Si saltasen dos interrupciones con mismo valor de IPC, se seguirá la prioridad natural.
Si se asigna un valor de IPL=7 se deshabilitarían todas las interrupciones de usuario.
Cuando salta un trap el valor de IPL es siempre >=8.
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
La placa dsPICDEM 1.1 (1)
La placa dsPICDEM 1.1 dispone de diverso hardware que permite la creación de software de evaluación con los dsPIC30f: Interfaz para programación/
depuración del PIC Puertos de comunicación
RS232 y CAN Codec de sonido Osciladores Pulsadores y LEDs Pantalla LCD Área de prototipado
La placa dsPICDEM 1.1 (2)
Índice
Introducción a los PIC Conceptos generales sobre el dsPIC30F Reloj del sistema Entrada/salida con puertos paralelos Timers Interrupciones La placa dsPICDEM 1.1 El compilador C30
El compilador C30 (1)
El compilador C30 usa un lenguaje de programación prácticamente equivalente al C de ANSI.
Diversas librerías facilitan la programación del PIC y abstraen (en lo posible) al programador de los detalles del microcontrolador usado.
Existe un conjunto de estructuras que permite la asignación de valores a los registros, tal y como aparecen en el data sheet del fabricante.
Un conjunto de macros facilita el establecimiento de la configuración inicial del PIC
Las ISR pueden declararse fácilmente.
El compilador C30 (2) Estructura general de un programa en C30
// Fichero de cabecera del PIC #include <p24fj128ga010.h>
// Configuración del PIC (las macros disponibles dependen del .h del PIC) _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) _CONFIG2( FCKSM_CSDCMD & POSCMOD_XT & FNOSC_PRIPLL )
// Prototipos de funciones void configButtons(); //…
// Rutina principal del programa int main(void) {
//…
// Operaciones a realizar continuamente while (1) { //… } }
// Rutinas de tratamiento de interrupción (ISR) void _ISR _T1Interrupt(void) { //… }
// Resto de funciones void configButtons() {
// Habilitar los pulsadores como entradas TRISDbits.TRISD6 = 1; // S3 TRISDbits.TRISD13 = 1; // S4 TRISAbits.TRISA7 = 1; // S5 TRISDbits.TRISD7 = 1; // S6 } //… Nota: El ejemplo es para el PIC24F128GA010
El compilador C30 (3)
El .h asociado al PIC incluye el conjunto necesario de definiciones para acceder a los registros, usar macros y realizar declaracion de ISR.
La configuración del PIC es necesaria para establecer los parámetros de funcionamiento iniciales del PIC.
Las ISR se pueden declarar de forma fácil siguiendo la nomenglatura:
void _ISR _<nombre_int>Interrupt(void) { , donde nombre_int correspondería al nombre de la
interrupción a tratar, que puede extraerse directamente de la IVT del data sheet expuesta anteriormente.
El compilador C30 (4)
El acceso a los registros del PIC se puede realizar mediante dos métodos: <nombre_reg> <nombre_reg>bits.<nombre_bit>
En el primero de los casos se asignaría directamente un valor (16 bits) al registro completo (ej. IFS0=0x0001 ó IFS=1)
En el segundo caso se podría acceder al valor para un bit concreto (ej. IFS0bits.INT0IF=1).
En algunas ocasiones el uso de máscaras puede ser tedioso, y el acceso por bit es muy útil.