sistemas empotrados - sis-embebidos

Anuncio
SISTEMAS EMPOTRADOS
Optativa de 2º ciclo
Ingeniería Informática
Ingeniería de Telecomunicación
José Luis Villarroel Salcedo
Departamento de Informática e Ingeniería de Sistemas
Centro Politécnico Superior
Universidad de Zaragoza
ÍNDICE
•
•
•
•
•
•
•
•
•
•
•
Introducción
El 68HC08
El TMS320F2812
Herramientas de desarrollo
Gestión del tiempo
Sistemas discretos secuenciales
Sistemas muestreados
Procesos concurrentes
Ejecutivos cíclicos
Prioridades e interrupciones
Núcleos multitarea
1
40
100
157
202
237
298
353
368
410
437
1
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
INTRODUCCIÓN
2
SISTEMAS EMPOTRADOS
DEFINICIÓN
Sistema de Tiempo Real: Es un sistema informático en el que es
significativo el tiempo en el que se producen sus acciones.
No basta que las acciones de un sistema sean correctas, sino que,
además, deben ocurrir dentro de un intervalo de tiempo determinado.
Los sistemas tiempo real suelen estar integrados en un sistema de
ingeniería más general, en el que realizan funciones de control,
procesamiento y/o monitorización:
SISTEMAS EMPOTRADOS
(embedded systems)
Ejemplos: Vídeo, lavadora, ABS, …, computadora de vuelo
3
SISTEMAS EMPOTRADOS
EJEMPLO
Computador
de un coche
Km
Km/h
Cont. Velocidad
Tª
Hora
Computador
Control
Empotrado
Calefacción
Aire
Acondicionado
Pedales
Ruedas
Sistema Inyección
4
SISTEMAS EMPOTRADOS
EJEMPLO
Varias tareas:
Control automático de velocidad
Ordenes del conductor:
Control climatización
» comienzo cont. velocidad
Visualización:
» establecimiento temperatura
interior
» velocidad
» rpm
» consumo
» niveles
» alarmas
» ...
» puesta en hora
» ...
5
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Concurrencia
Los componentes del sistema controlado o monitorizado funcionan
simultáneamente
El sistema de control debe atenderlo y generar las acciones de control
o visualización de forma simultánea
Un computador ejecuta sus acciones de forma secuencial
RAPIDEZ
se puede hacer que el computador ejecute sus acciones de forma
aparentemente simultánea
Computadores multiprocesador o sistemas con varios computadores
6
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Fiabilidad y seguridad
Un fallo en un sistema de control puede hacer que el sistema
controlado se comporte de forma peligrosa o antieconómica
Es importante asegurar que si el sistema de control falla lo haga de
forma que el sistema controlado quede en un estado seguro => hay
que tener en cuenta los posibles fallos o excepciones en el diseño
Eficiencia
Gran parte de los sistemas de control deben responder con gran
rapidez a los cambios en el sistema controlado
7
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Interacción con dispositivos físicos
Los sistemas empotrados interaccionan con su entorno mediante
diversos tipos de dispositivos que normalmente no son convencionales
(teclados, impresoras, ...): convertidores A/D y D/A, pwm, entradas y
salidas digitales paralelo y serie, ... (interfases con sensores,
actuadores, periféricos especiales, ...)
Los componentes del software que controlan el funcionamiento de
estos dispositivos (manejadores, "drivers") son, en general,
dependientes del sistema concreto
8
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Robustez
Embarcados en sistemas con movimiento o que pueden ser
transportados, sujetos a vibraciones e incluso impactos (coches,
robots, instrumentación portátil, ...)
No siempre trabajan en condiciones óptimas de temperatura, humedad,
limpieza.
Factor de protección IP: IP65
» Primer dígito: protección ante entrada de sólidos (polvo)
» Segundo dígito: protección ante la entrada de líquidos
9
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Bajo consumo
Muchos de estos sistemas están alimentados con baterías o pilas.
Menor consumo => mayor autonomía
En muchos casos necesidades de bajo voltaje (3V)
Bajo peso
Característica de agradecer en sistemas portátiles
No depende únicamente del computador embarcado y su periferia sino
también de la alimentación (baterías) o de los sensores y actuadores
10
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS
Bajo precio
Aplicable a electrónica de consumo y otros dispositivos con mercados
muy competitivos (p.e. telefonía móvil)
Pequeñas dimensiones
Las dimensiones de un sistema empotrado no dependen sólo de sí
mismo sino también del espacio disponible en el sistema que controla
y/o monitoriza.
Característica a tener muy en cuenta por los problemas que acarrea
11
SISTEMAS EMPOTRADOS
EJEMPLOS
Ejemplos de sistemas empotrados
Electrónica de consumo
» Videos, HIFI, televisión, ...
» Lavadoras, frigoríficos, lavaplatos,
...
Automóviles
» Control velocidad, climatización,
visualización
» ABS, ASR
» Inyección
Telecomunicaciones
» Radios, teléfonos móviles
» GPS
Aviónica, espacial
» Computadores de vuelo, de
misión
» Path-finder
Defensa
» Bombas y misiles inteligentes
» Vehículos, dirección de tiro, ...
Instrumentación
12
SISTEMAS EMPOTRADOS
CLASIFICACIÓN COMPUTADORES
EMPOTRADOS
NO
EMPOTRADOS
PROPÓSITO GENERAL
Supercomputadores
Servidores
Estaciones de trabajo
PC's
Calculadoras
Cálculo científico
Gestión (bancos, empresas)
Bases de datos
TIEMPO REAL
Tarjetas microprocesadores
+ tarjetas E/S + bus
Autómatas Programables
Reguladores digitales
Control industrial
Simuladores de vuelo
Robótica
Tarjetas microprocesadores
+ tarjetas E/S + bus
Microcontroladores, DSPs
Electrodomésticos
Aeronáutica
Teléfonos móviles
13
SISTEMAS EMPOTRADOS
LOS MICROS
Microprocesadores
Propósito general
Potente CPU
Caches y manejo eficiente de memoria
SI
CPU especializada:
•Instrucción MAC
•Manejo buffers, ...
Memoria interna (RAM/ROM)
Periféricos:
•Timers
•Líneas serie alta velocidad
Memoria interna (RAM/ROM)
Periféricos:
•E/S digitales
•Conversores A/D
•PWM
•Timers
•Líneas serie (SCI, SPI)
SI
Memoria externa
Caches
NO
Caches
NO
Microcontroladores
DSPs
Control digital
La CPU no necesita potencia
Todo en un CHIP
Procesado Digital de Señal
Potente CPU especializada
Comunicación con conversores A/D externos
14
SISTEMAS EMPOTRADOS
EL MERCADO
10000
9000
8000
7000
6000
5000
4000
3000
8-bit
2000
4-bit
1000
0
16-bit
91
90
92
93
94
µC
DSP
95
96
97
98
99
SISTEMAS EMPOTRADOS
15
CARACTERÍSTICAS DE LOS µC y DSP
Técnica de fabricación
CMOS: Complementary Metal Oxide Semiconductor
» La inmensa mayoría de los procesadores para sistemas empotrados se
fabrican en esta tecnología
» Menor consumo (alimentación a baterías)
» Mayor inmunidad al ruido
» Son chips casi o totalmente estáticos (no necesidad de refresco) => el reloj
puede ser ralentizado o detenido: seelp mode
SISTEMAS EMPOTRADOS
16
CARACTERÍSTICAS DE LOS µC y DSP
Arquitecturas
Von-Neuman (µC)
» Programa y datos son almacenados en la misma memoria principal. Un
único bus de datos.
» Primero se busca la instrucción y entonces el dato involucrado => Dos
búsquedas en secuencia.
Harvard (µC y DSP)
» Bus de datos y bus de instrucciones separados.
» Arquitectura segmentada => búsquedas en paralelo
» Pre-búsqueda de siguiente instrucción en paralelo con acceso a los datos
de la instrucción en ejecución
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS DE LOS µC y DSP
CISC: Complex Instruction Set Computer
» Muchas instrucciones diferentes. Potentes y especializadas.
» Facilita la programación.
» Código muy compacto
» P.e.: Motorola
RISC: Reduced Instruction Set Computer
» Pocas instrucciones muy sencillas.
» La sencillez de las instrucciones permite liberar área de silicio para
implementar características que mejoren las prestaciones.
» Chips más baratos, de menor consumo, de menos pines.
» P.e.: PIC
17
18
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS DE LOS µC y DSP
Memorias
PROGRAMA
PARÁMETROS
DATOS NO VOLÁTILES
VARIABLES
PILA
ROM
OTP
EPROM
EEPROM
FLASH
EEPROM
FLASH
RAM con batería
RAM
SISTEMAS EMPOTRADOS
19
CARACTERÍSTICAS DE LOS µC y DSP
Máscara
» Memoria ROM
» Programada en fábrica
OTP: One Time Programmable
» Es un dispositivo PROM. En realidad una EPROM sin ventana de borrado.
» Una vez que el programa ha sido grabado no puede ser borrado ni
modificado
» Alternativa a la máscara ROM para series pequeñas
Reprogramación
» El uso de EPROM, EEPROM, EPROM y FLASH para la memoria de
programa facilita el desarrollo y puesta a punto de dispositivos
» El uso de EEPROM, EPROM y FLASH permite la reprogramación del
procesador sin extraerlo del sistema que controla
–
Nuevas versiones, eliminación de errores
SISTEMAS EMPOTRADOS
20
CARACTERÍSTICAS DE LOS µC y DSP
Alimentación
Bajo voltaje
» Alimentación a 5V (µC)
» Alimentación a 3V (µC y DSP)
IDLE/HALT
» Modos de bajo consumo, manteniendo valores de registros, memoria y
salidas
» IDLE: se para la CPU
–
El micro se despierta con una interrupción externa o interna (timers) o
con el RESET
–
Actividad periódica del micro -> timer dedicado a despertar
» HALT: se para todo (CPU, timers, periféricos), el micro se despierta sólo
con una interrupción externa o RESET
SISTEMAS EMPOTRADOS
CARACTERÍSTICAS DE LOS µC y DSP
Entradas / salidas
UART: Universal Asynchronous Receiver Transmitter
» SCI: Serial Comunication Interface.
Synchronous Serial Port
» SPI: Serial Periferal Interface
» McBSP: Multi Channel Buffered Serial Port
I2C: Inter-Integrated Circuit bus
» Bus serie de dos hilos
» Multi-master, multi-slave, detección de colisiones. 128 dispositivos, 10
metros
CAN: Controller Area Network
» Bus con prioridades
21
SISTEMAS EMPOTRADOS
22
CARACTERÍSTICAS DE LOS µC y DSP
Conversión Analógico-Digital (sólo µC, algún DSP)
» Dada la dificultad de integrar circuitos analógicos con digitales no suelen
tener gran precisión
» Normalmente 8 ó 10 bits
Conversión Digital-Analógica (sólo µC , algún DSP)
» No suele estar implementada
» PWM: Pulse Width Modulator. Se usa como técnica de conversión D/A
Contadores de pulsos (sólo µC)
» Cada pulso/evento incrementa un registro acumulador -> número de veces
que ha sucedido el evento
SISTEMAS EMPOTRADOS
23
CARACTERÍSTICAS DE LOS µC y DSP
Interrupciones
Desde los periféricos: timers, UARTS, A/D, E/S paralelo, componentes
externos.
Interrupciones enmascarables -> se pueden activar y desactivar
Interrupciones vectorizadas: una dirección de salto para cada
interrupción
Prioridades
SISTEMAS EMPOTRADOS
24
CARACTERÍSTICAS DE LOS µC y DSP
Características especiales
Watchdog timer
» Si el programa no reinicializa el watchdog antes de un cierto tiempo, éste
procede a hacer el RESET del sistema
Monitor del reloj
» Circuito que detecta si el reloj funciona demasiado despacio => RESET
Monitor
» Programa residente que facilita el desarrollo y la puesta a punto (carga,
break points, ...)
Floating point vs fixed point (DSPs)
25
SISTEMAS EMPOTRADOS
µC POPULARES
8051 (Intel)
Arquitectura Harvard (direccionamiento separado para datos e
instrucciones)
Bus de 8 bits de datos
Puede direccionar 64K de programa (los 4K ó 8K bajos pueden residir
en chip) y 64K de memoria de datos externa. 128 bytes de RAM interna
+ registros especiales. E/S direccionadas en espacio propio.
» Bus de direcciones de 16 bits
Gran potencia en instrucciones de bit
Timers y puertos serie (no A/D ni PWM)
8048 serie baja
80c196 de 16 bits
80186: microcontrolador con un 8086 como núcleo (PC XT)
26
SISTEMAS EMPOTRADOS
µC POPULARES
68HC11 (Motorola)
Arquitectura Von Neuman (datos, programa, E/S, timers comparten el
mismo espacio de memoria)
Bus de 8 bits de datos, 16 bits de direcciones
Pueden tener: EEPROM/OTPROM, RAM, E/S digitales, timers, A/D,
PWM, acumuladores de pulsos, comunicación serie síncrona y
asíncrona
Serie baja 68HC05
683xx: microcontrolador con un 68xxx como núcleo
27
SISTEMAS EMPOTRADOS
µC POPULARES
68HC08 (Motorola)
Arquitectura Von Neuman (datos, programa, E/S, timers comparten el
mismo espacio de memoria)
Bus de 8 bits de datos, 16 bits de direcciones
Pueden tener: ROM/FLASH, RAM, E/S digitales, timers, A/D, PWM,
acumuladores de pulsos, comunicación serie síncrona y asíncrona
Existen elementos de la familia con USB, IIC, CAN
Hasta 60K de Flash, hasta 2K de RAM
28
SISTEMAS EMPOTRADOS
µC POPULARES
PIC (MicroChip)
Arquitectura Harvard (direccionamiento separado para datos e
instrucciones)
» solapamiento de instrucciones
Primer microcontrolador RISC
16Cxx principal línea de la casa
» 35 instrucciones
» 8 bits de datos
» 14 bits de instrucción (hasta 8K instrucciones)
» Pueden tener: EEPROM/OTPROM, RAM, E/S digitales, timers, A/D, PWM,
acumuladores de pulsos, comunicación serie síncrona y asíncrona
29
SISTEMAS EMPOTRADOS
DSPs POPULARES
Las familias de Texas Instruments
C2000
C5000
C6000
Lowest Cost
Efficiency
Performance &
Best Ease-of-Use
Control Systems
Motor Control
Storage
Digital Ctrl Systems
Best MIPS per
Watt / Dollar / Size
Wireless phones
Internet audio players
Digital still cameras
Modems
Telephony
VoIP
Multi Channel and
Multi Function App's
Comm Infrastructure
Wireless Base-stations
DSL
Imaging
Multi-media Servers
Video
30
SISTEMAS EMPOTRADOS
DSPs POPULARES
Familia 6000
(Texas Intruments)
Program
RAM
Data Ram
Addr (32)
Internal Buses
DMA
D (32)
EMIF
.M1 .M2
.L1 .L2
.S1 .S2
Control Regs
CPU
Regs (B0-B15)
Regs (A0-A15)
Ext’l
Memory
.D1 .D2
Serial Port
Host Port
Boot Load
Timers
Pwr Down
31
SISTEMAS EMPOTRADOS
DSPs POPULARES
Familia 6000 (Texas Instruments)
Device
MHz
Kbytes
pins
mm
W
6201B
1600 200
128
352
27
6202
2000 250
384
352
6211
1200 150
72
MHz
6701
6711
TMS320
MIPS
$
Periphs
1.9
80-110
D2H
27
1.9
120-150
D3X
256
27
1.5
20-40
E2H
Kbytes
pins
mm
W
$
Periphs
1000 167
128
352
35
1.9
170-200
D2H
600 100
72
256
27
0.9
20-40
E2H
MFLOPS
Peripherals Legend:
D,E: DMA,EDMA
2,3: # of McBSPs
H,X: HPI, XBUS
32
SISTEMAS EMPOTRADOS
DSPs POPULARES
Familia 2000 (Texas Instruments)
C24x
» 16-bit data Fixed-Point
» SCI, SPI, CAN, A/D, event manager, watchdog timers, on-chip Flash
memory, 20-40 MIPS
C28x
» 32-bit data Fixed-Point
» SCI, SPI, CAN, 12-bit A/D, McBSP, watchdog timers, on-chip Flash
memory, up to 400 MIPS
33
SISTEMAS EMPOTRADOS
DSPs POPULARES
Otros fabricantes importantes:
Analog Devices (www.analog.com/dsp)
» ADSP-21xx 16 bit, fixed point
» ADSP-21xxx 32 bit, floating and fixed point
Lucent Technologies (www.lucent.com)
» DSP16xxx 16 bit fixed point
» DSP32xx 32 bit floating point
Motorola (www.mot.com)
» DSP561xx 16 bit fixed point
» DSP560xx 24 bit, fixed point
» DSP96002 32 bit, floating point
SISTEMAS EMPOTRADOS
LENGUAJES DE PROGRAMACIÓN
Ensamblador
Permiten el uso eficiente de los recursos
Programación costosa y casi imposible la modificación
» El código debe ser documentado, empleo de símbolos
» Programación estructurada
Lenguajes de alto nivel
Desarrollo más rápido, mantenimiento menos costoso
↓ eficiencia
↑ ocupación en memoria
Ada --> grandes sistemas empotrados
C --> ¡La estrella!
» Permite el acceso a los recursos hardware
34
35
SISTEMAS EMPOTRADOS
LENGUAJES DE PROGRAMACIÓN
Uso de C y Ensamblador
Programación en C
» Puesta a punto de la lógica del
programa
Reescritura de algunas partes
críticas en ensamblador
» Disminución de la ocupación de
memoria
Fuente
Ensamblador
Fuente C
Compilador
Cruzado
Ensamblador
Cruzado
Objeto
Relocalizable
Objeto
Relocalizable
Librerías
» Aumento de las prestaciones
Fichero
Configuración
Montador de
Enlaces
Ejecutable
No Relocalizable
Cargador
Máscara
Microcontrolador
DSP
SISTEMAS EMPOTRADOS
36
HERRAMIENTAS DE DESARROLLO
Simuladores
Un simulador ejecuta un programa de un microcontrolador o DSP en un
computador de propósito general (p.e. un PC)
Los contenidos de la memoria y registros pueden ser observados y
alterados
No soporta interrupciones reales ni (generalmente) hardware adicional
La velocidad de ejecución es menor que en el procesador real
SISTEMAS EMPOTRADOS
37
HERRAMIENTAS DE DESARROLLO
Tarjetas de evaluación con monitor residente
Elementos básicos:
» Procesador + Hardware periférico básico
» Línea de comunicación
» Conector para enlazar hardware propio
» Programa monitor en ROM
El monitor permite:
» La carga y ejecución de programas
» Visualización y actualización de memoria, breakpoints, ...
Desventajas del monitor residente:
» El monitor se ejecuta en el mismo procesador que el programa del usuario.
» Utiliza recursos del procesador (un puerto de comunicación, una
interrupción y memoria) y ralentiza la ejecución (acceso a memoria y
registros y comunicación)
SISTEMAS EMPOTRADOS
HERRAMIENTAS DE DESARROLLO
Puerto específico en el mismo procesador
Ejemplos
» IEEE Std 1149.1 (IEEE Standard Test Access Port and Boundary-Scan
Architecture)
» Modo monitor en el 68HC08 (MON08)
Puerto específico que permite:
» Test del sistema en línea
» Programación del procesador en línea
» Puesta a punto
Es un recurso específico del procesador para estas tareas
» Puerto al exterior
» Circuitería
» Software de carga, comunicación, ...
38
SISTEMAS EMPOTRADOS
39
HERRAMIENTAS DE DESARROLLO
Emuladores
Hardware que “emula” al procesador y además permite obtener
información y actuar sobre la aplicación sin gastar recursos ni alterar la
evolución temporal
Se comunica por una parte con un computador o terminal (vía RS232 o
similar) y por otra con el sistema que se está desarrollando (mediante
el POD)
40
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
El 68HC08
41
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Características básicas
Arquitectura Von Neuman
8MHz frecuencia bus a 5Volt
Bus datos y aritmética 8 bits
Comunicación serie asíncrona
SCI, y síncrona SPI
Modulo de generación de reloj
con PLL
Bus direcciones 16 bits
TBI, interrupción de tiempo real
multiplicación 8x8 rápida
2 módulos temporizadores 16
bits,PWM
división 16/8 rápida
512 RAM, 32K FLASH
Interrupciones vectorizadas, con
prioridades
In-system programming
Conversor A/D de 8 canales y 8
bits, tiempo conversión 17µS
E/S en espacio de memoria
33 pines I/O
» 10 mA todas I/0, 15 mA 5 E/S
» “pull up” programable
Watchdog COP, detección de
bajo voltaje
Alimentación a 3 V ó 5 V
Dos estados de bajo consumo:
WAIT y STOP
42
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Diagrama
bloques
HC08
43
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Mapa de memoria
44
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Low Power Modes
Existen dos modos de ahorro de energía: WAIT y STOP
WAIT
» CPU apagada
» Periféricos continúan funcionando
» Salida del modo: RESET o Interrupción (externa o de los periféricos)
STOP
» CPU apagada
» Periféricos apagados salvo el KBI
» TBM puede quedar activo
» Salida del modo: RESET, IRQ, interrupción del TBM o del KBI
45
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Encapsulados
44 QFP
42 SDIP
40 PDIP
46
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Familia HC08
RAM
128 bytes .. 4096 bytes
Dos tecnologías
» Flash (68HC908)
4K .. 60K
» Máscara ROM (68HC08)
EEPROM
0 bytes .. 1024 bytes
Comunicación serie
Canales en los timers
CAD
406 bytes .. 32 K
SPI, SCI, CAN, USB, I2C
1 .. 8
8 ó 10 bits, 8 a 14 canales
47
SISTEMAS EMPOTRADOS
CPU08
Características básicas
Hasta 8MHz frecuencia
Bus datos y aritmética 8 bits
Bus direcciones 16 bits
» 64K de programa y datos
Multiplicación 8x8 rápida
División 16/8 rápida
16 modos de direccionamiento
Modos de bajo consumo: WAIT y STOP
Puede ejecutar código para el HC05
48
SISTEMAS EMPOTRADOS
CPU08
Conjunto de registros que pueden ser manipulados por el conjunto de
instrucciones:
Acumulador A
Registro índice H:X
Puntero de pila SP, también
registro índice
Contador de programa PC
Registro de códigos
de condición
49
SISTEMAS EMPOTRADOS
CPU08
Modos de direccionamiento:
Inmediato, el valor del operando
» LDA #01
Extendido, la dirección dato
(direcciones > $FF)
» LDA $8001
Directo, la dirección del dato
(direcciones < $FF)
» LDA $01
Relativo, instrucciones de salto
» rango -127..127
» BRA ETIQUETA (salto dentro del
rango)
» código reubicable
» menor tamaño de las instrucciones
Inherente
» TSX H:X ←(SP)+1
indexado la dirección del
operando se calcula sumando un
desplazamiento (offset) a un
registro índice
» indexado sin desplazamiento
LDA ,X ; A ← (X)
» Indexado, desplazamiento 8bits
LDA $2,X; A ← (X+ $2)
» Indexado, desplazamiento 16bits
LDA $8000,X; A ← (X+$8000)
» indexado SP, desplazamiento 8
bits
LDA $1,SP
» indexado SP, desplazamiento 16
bits
LDA $8000,SP
50
SISTEMAS EMPOTRADOS
CPU08
Conjunto de instrucciones
Carga de Registros
LDA Load Accumulator from Memory
LDHX Load Index Register from Memory
LDX Load X (Index Register Low) from Memory
PULA Pull Accumulator from Stack
PULH Pull H (Index Register High) from Stack
PULX Pull X (Index Register Low) from Stack
Salvado de registros
STA Store Accumulator in Memory
STHX Store Index Register
STX Store X (Index Register Low) in Memory
PSHA Push Accumulator onto Stack
PSHH Push H (Index Register High) onto Stack
PSHX Push X (Index Register Low) onto Stack
Transferencia entre registros
TAP Transfer Accumulator to Processor Status Byte
TAX Transfer Accumulator to X (Index Register Low)
TPA Transfer Processor Status Byte to Accumulator
TSX Transfer Stack Pointer to Index Register
TXA Transfer X (Index Register Low) to Accumulator
TXS Transfer Index Register to Stack Pointer
Transferencia memoria - memoria
MOV Move
Incremento/Decremento
INCA Increment Accumulator
INCX Increment X (Index Register Low)
INC Increment
DECA Decrement Accumulator
DECX Decrement X (Index Register Low)
DEC Decrement
Activado/desactivado de bits
BCLR n Clear Bit n in Memory
BSET n Set Bit n in Memory
CLRA Clear Accumulator
CLRX Clear X Index Register Low
CLRH Clear H Index Register High
CLR Clear
CLC Clear Carry Bit
SEC Set Carry Bit
RSP Reset Stack Pointer
51
SISTEMAS EMPOTRADOS
CPU08
Conjunto de instrucciones
Operaciones aritméticas
ADD Add without Carry
AIS Add Immediate Value (Signed) to Stack Pointer
AIX Add Immediate Value (Signed) to Index Register
ASL Arithmetic Shift Left
ASR Arithmetic Shift Right
DAA Decimal Adjust Accumulator
DIV Divide
LSL Logical Shift Left
LSR Logical Shift Right
MUL Unsigned Multiply
NEGA Negate Accumulator(Two?s Complement)
NEGX Negate X Index Register Low (Two?s Complement)
NEG Negate (Two?s Complement)
SBC Subtract with Carry
SUB Subtract
NSA Nibble Swap Accumulator
Operaciones lógicas
AND Logical AND
EOR Exclusive-OR Memory with Accumulator
ORA Inclusive-OR Accumulator and Memory
COMA Accumulator Complement (One's Complement)
COMX X Index Register Low Complement (One's Complement)
COM Complement (One's Complement)
Rotaciones/Desplazamientos
ROLA Rotate Accumulator Left through Carry
ROLX Rotate X Index Register Low Left through Carry
ROL Rotate Left through Carry
RORA Rotate Accumulator Right through Carry
RORX Rotate X Index Register Low Right through Carry
ROR Rotate Right through Carry
Test datos
CMP Compare Accumulator with memory
CPHX Compare H:X with M
CPX Compare X with M
BIT Bit Test
TSTA Test Accumulator for Negative or Zero
TSTX Test X Index Register Low for Negative or Zero
TST Test for Negative or Zero
52
SISTEMAS EMPOTRADOS
CPU08
Conjunto de instrucciones
Salto condicional
BCC Branch if Carry Bit Clear
BCS Branch if Carry Bit Set
BEQ Branch if Equal
BGE Branch if Greater Than or Equal To
BGT Branch if Greater Than
BHCC Branch if Half Carry Bit Clear
BHCS Branch if Half Carry Bit Set
BHI Branch if Higher
BHS Branch if Higher or Same
BIH Branch if IRQ Pin High
BIL Branch if IRQ Pin Low
BLE Branch if Less Than or Equal To
BLO Branch if Lower
BLS Branch if Lower or Same
BLT Branch if Less Than
BMC Branch if Interrupt Mask Clear
BMI Branch if Minus
BMS Branch if Interrupt Mask Set
BNE Branch if Not Equal
BPL Branch if Plus
BRSET n Branch if Bit n in Memory Set
BRCLR n Branch if Bit n in Memory Clear
DBNZ Decrement and Branch if Not Zero
CBEQ Compare and Branch if Equal
Salto incondicional
JMP Jump
JSR Jump to Subroutine
BSR Branch to Subroutine
RTS Return from Subroutine
BRA Branch Always
BRN Branch Never
Varios
NOP No Operation
Interrupciones
RTI Return from Interrupt
SWI Software Interrupt
WAIT Enable Interrupts; Stop Processor
STOP Enable IRQ Pin, Stop Oscillator
CLI Clear Interrupt Mask Bit
SEI Set Interrupt Mask Bit
53
SISTEMAS EMPOTRADOS
Clock Generator Module CGM
Fuente de reloj para el µC:
reloj externo a la frecuencia de trabajo
reloj externo a baja frecuencia + PLL interno multiplicador frecuencia
CGMXCLK
PLL
CGMVCLK
selector
fuente reloj
CGMOUT
÷2
÷2
BUS CLOCK
54
SISTEMAS EMPOTRADOS
Clock Generator Module CGM
Posibilidades del reloj externo
Sin PLL: dc .. 32.8 MHz
Con PLL: 30 KHz .. 1.5 MHz
Frecuencia de BUS
Alimentación de 5V: máximo 8.4 MHz
Alimentación de 3V: máximo 4.1 MHz
Ejemplo de uso de PLL
55
SISTEMAS EMPOTRADOS
Clock Generator Module CGM
Circuito externo para el CGM
Circuito de reloj
Filtro para el PLL
56
SISTEMAS EMPOTRADOS
Interrupciones
Características básicas
16 posibles fuentes de interrupción
SWI
interrupción software
Reset
Vectorizadas
» 18 vectores diferentes
» Tabla de interrupciones en dirección fija: al final del espacio de
direccionamiento: $FFDC..$FFFF
Enmascarables salvo SWI y RESET
Se pueden habilitar de forma individual
57
SISTEMAS EMPOTRADOS
Interrupciones
RESET
Fuentes
» Encendido (Power-ON Reset, POR)
» Pin RESET externo: RST
» Watchdog COP
» Low Voltaje
» IIegal opcode
» Ilegal address
Acciones
» Detiene la ejecución de la instrucción en curso
» Inicializa el valor de ciertos registros
» Carga en el PC el contenido del vector de RESET ($FFFE-$FFFF)
» Selecciona el reloj externo ÷4 como reloj de BUS
58
SISTEMAS EMPOTRADOS
Interrupciones
Fuentes de Interrupciones
Línea IRQ externa
Internas de los periféricos
» Timer, TBM, CGM
» E/S: SCI, SPI, Keyboard, ADC
Interrupción por programa SWI
Habilitación de interrupciones
El bit I del CCR indica si la CPU atiende interrupciones
» I = 1, no se atienden. SEI, pone el bit a 1
» I = 0, se atienden. CLI, pone el bit a 0
» enmascaradas en reset para poder fijar el puntero pila
Cada interrupción dispone de una bandera individual que permite
enmascararla
59
SISTEMAS EMPOTRADOS
Interrupciones
Cada interrupción tiene una bandera que indica si hay petición
IF1-IF16 de los registros INT1, INT2, INT3
IFx=1 indica interrupción pendiente
IFx=0 indica interrupción no pendiente
Sólo lectura
INT1
INT2
INT3
60
SISTEMAS EMPOTRADOS
Interrupciones
Secuencia en una interrupción
espera fin instrucción curso (peor caso DIV, 7 ciclos)
Apilar registros de la CPU: PC, A, X, CCR
» NO se apila H (parte alta del registro de índice)
Enmascarar interrupciones (I = 1)
» Por defecto las interrupciones no se anidan
Cargar en el PC el vector de la interrupción pendiente más prioritaria
Ejecución del código de la rutina de interrupción
En el RTI se desapilan los registros de la CPU
» Se retoma el I (se vuelven a habilitar las interrupciones)
» Se retoma el PC (se reanuda el programa interrumpido en la siguiente
instrucción)
61
SISTEMAS EMPOTRADOS
Interrupciones
Orden de apilamiento de los registros de la CPU
62
SISTEMAS EMPOTRADOS
Interrupciones
Prioridades
Las prioridades de las interrupciones son fijas
Al acabar la instrucción actual se comprueba cuales son las
interrupciones pendientes y se ejecuta la más prioritaria
Anidamiento de interrupciones
» Debe hacerse con cuidado
» El salto a interrupción enmascara interrupciones. Normalmente no se
anidan.
» Si se permite el anidamiento de interrupciones TODAS las interrupciones
habilitadas interrumpen, independientemente de su nivel de prioridad
respecto de la interrumpida
63
SISTEMAS EMPOTRADOS
Interrupciones
Tabla resumen propiedades de interrupciones
Source
Reset
SW Iinstruction
IRQ pin
CGM(PLL)
TIM1 channel 0
TIM1 channel 1
TIM1 overflow
TIM2 channel 0
TIM2 channel 1
TIM2 overflow
SPI receiver full
SPI overflow
SPI modefault
SP transmitter empty
SCI receiver overrun
SCI noise fag
SCI raming error
SCI parity error
SCI receiver full
SCI input idle
SCI transmitter empty
SCI transmission complete
Keyboard pin
ADC conversion complete
Timebase
Flag
None
None
IRQF
PLLF
CH0F
CH1F
TOF
CH0F
CH1F
TOF
SPRF
OVRF
MODF
SPTE
OR
NF
FE
PE
SCRF
IDLE
SCTE
TC
KEYF
COCO
TBIF
Mask
None
None
IMASK
PLLIE
CH0IE
CH1IE
TOIE
CH0IE
CH1IE
TOIE
SPRIE
ERRIE
ERRIE
SPTIE
ORIE
NEIE
FEIE
PEIE
SCRIE
ILIE
SCTIE
TCIE
IMASKK
AIEN
TBIE
INT Register
Flag
Priority VectorAddress
None
0
$FFFE–$FFFF
None
0
$FFFC–$FFFD
IF1
1
$FFFA–$FFFB
IF2
2
$FFF8–$FFF9
IF3
3
$FFF6–$FFF7
IF4
4
$FFF4–$FFF5
IF5
5
$FFF2–$FFF3
IF6
6
$FFF0–$FFF1
IF7
7
$FFEE–$FFEF
IF8
8
$FFEC–$FFED
IF9
9
$FFEA–$FFEB
Code Warrior
Int Num
1
2
3
4
5
6
7
8
9
10
IF10
IF11
10
11
$FFE8–$FFE9
$FFE6–$FFE7
11
12
IF12
12
$FFE4–$FFE5
13
IF13
13
$FFE2–$FFE3
14
IF14
IF15
IF16
14
15
16
$FFE0–$FFE1
$FFDE–$FFDF
$FFDC–$FFDD
15
16
17
64
SISTEMAS EMPOTRADOS
Interrupciones
Interrupción externa IRQ
Pin IRQ
Registro de control y estado
» Dos modos seleccionables
MODE
–
MODE = 1 interrupción en flanco de bajada y en nivel bajo
–
MODE = 0 interrupción en flanco de bajada
» Bits de ACK, IRQF y IMASK (máscara)
Pullup interno siempre conectado
65
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas
33 pines I/O todos bidireccionales
Organizados en 5 puertos
A,B,C,D,E
pines alta intensidad
» Todos los pines a “1” pueden
suministrar 10mA
» Hay límite en la intensidad total
suministrada por todos los pines
de un puerto y por todos los
puertos
» Los pines PTC0-PTC4 pueden
absorber 15mA
compartidos con otros periféricos
puertos A,C,D con pull-up
programable
» Ejemplo PTA
66
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas
puerto pines
E/S
reg
E/S
reg
reg
dirección pull up
función
alternativa
A
0-7
PTA
DDRA
PTAPUE
KBI
keyboard interrupt
module
B
0-7
PTB
DDRB
-
ADC
conversor
analógico-digital
C
0-6
PTC
DDRC
PTCPUE
-
D
0-7
PTD
DDRD
PTDPUE
TIM
temporización
SPI
Serial Periferial
Interface
E
0-1
PTE
DDRE
-
SCI
Línea Serie Asíncrona
67
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas
Puerto A (similarmente B, C, D, E)
8 pines bidireccionales
Registro de datos PTA
Registro de dirección de los pines
(entrada o salida) DDRA
» DDRAx = 1 pin x configurado
como salida
» DDRAx = 0
pin x configurado
como entrada
Registro de habilitación de los
pullup PTAPUE
» PTAPUEx = 1
pullup habilitado
» PTAPUEx = 0
deshabilitado
68
SISTEMAS EMPOTRADOS
KBI, módulo de interrupción de teclado
Asociado al puerto A
Diseñado para detectar pulsadores en los pines PTA0-PTA7
Sensible al nivel bajo
“ceros”
Puede generar interrupciones
» el banderín KEYF indica pulsación pendiente
» si IMASKK = 0, KEYF provoca interrupción
Puede seleccionarse qué pines son sensibles con el registro INTKBIER
» KBIEx = 1
pin PTAx configurado como entrada y con pullup
Detección del valor de pines
» configuración pin de entrada con DDRA
» lectura de PTA
SISTEMAS EMPOTRADOS
KBI, módulo de interrupción de teclado
69
70
SISTEMAS EMPOTRADOS
KBI, módulo de interrupción de teclado
Modo sensible únicamente a flancos de bajada
» MODEK=0
» Detecta cualquier flanco de bajada si el resto de los pines está a 1
» Un flanco de bajada cuando un pin ya está a 0 no genera un nuevo KEYF
» Borrado KEYF
–
salto a interrupción
–
escribir “1” en ACKK
Modo sensible a flancos de bajada y nivel bajo
» MODEK =1
» KEYF a 1 mientras un pin esté a 0
» Borrado KEYF
–
salto a interrupción
–
escribir “1” en ACKK
y todos los pines del PTA a “1”
71
SISTEMAS EMPOTRADOS
Convertidor A/D
Características
Un solo convertidor, 8 canales multiplexados
Precisión 8 bits, aproximaciones sucesivas
Tiempo de conversión: 17 ciclos ≈1MHz clock, 17µS
Modos
» Conversión contínua
» Conversión única
Flag indica fin de conversión. Puede generar interrupciones
VREFL ≤ V ≤ VREFH
» Conversión lineal
$00 ≤ CONVERSION ≤ $FF
72
SISTEMAS EMPOTRADOS
Convertidor A/D
Registro de control y estado ADSCR
AIEN
Habilitación de las interrupciones
» AIEN = 1 habilitadas
» AIEN = 0 deshabilitadas
ADCO
Conversión continua
» ADCO = 1 conversión continua
» ADCO = 0 una única conversión
COCO
Conversión completa
» AIEN =1, interrupciones habilitadas
COCO debe ser forzado a “0” para
permitir el servicio de las interrupciones
» AIEN =0, interrupciones deshabilitadas
COCO bit de sólo lectura
–
Se pone a 1 al final de una conversión
–
Se borra escribiendo en ADSCR o leyendo ADC
73
SISTEMAS EMPOTRADOS
Convertidor A/D
Registro de control y estado ADSCR
ADCH4–ADCH0
entrada
ADCH4-ADCH0
Selección
canal de conversión
00000
PTB0/AD0
00001
PTB1/AD1
Comienzo de conversión
00010
PTB2/AD2
00011
PTB3/AD3
00100
PTB4/AD4
00101
PTB5/AD5
00110
PTB6/AD6
00111
PTB7/AD7
11101
Vrefh
11110
Vrefl
11111
ADC off
» Escritura del ADSCR
Registro de datos ADC
74
SISTEMAS EMPOTRADOS
Convertidor A/D
El ADC necesita una entrada de reloj en el intervalo [0.5,2.1] MHz.
(Aconsejado 1 MHz)
Registro de control del reloj del ADC
ADCLK
ADIV2-ADIV0 definen el divisor de la frecuencia fuente de reloj
ADICKL- Selecciona la fuente de frecuencia de reloj
» ADICKL = 0
Bus clock
» ADICKL = 1
CGMXCLK (reloj externo)
75
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Características generales
Dispone de 2 “timer” independientes TIM1 y TIM2
Cada TIM dispone a su vez de 2 canales
Para cada timer
» Basado en un contador de 16 bits
» Preescalado programable del reloj de entrada
» 2 canales, para cada canal
–
input capture
–
output compare
flanco subida, flanco bajada o cualquier cambio
activar, desactivar o cambiar una patilla
» generar interrupciones canal1, canal2 o desbordamiento contador
Comparte el patillaje con el PTD
76
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Diagrama de bloques
de un TIM
77
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Contador
T1CNTH, T1TCNTL parte alta y baja del TIM1, sólo lectura
» Lectura de T1CNTH congela el valor de T1CNTL hasta que es leído
Admite reset (TRST en T1SC) y parada (TSTOP en T1SC)
El contador TCNT es modular y cuenta hacia arriba
» Empieza en $0000
» Cuando TCNT = TMOD
TCNT = $0000
78
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Preescalado programable con PS2-PS0
para bus clock 2.4575MHz
divisor
resolución µs
desbordamineto ms
PS2-PS0
1
0,407
26,7
000
2
0,814
53,3
001
4
1,628
106,7
010
8
3,255
213,3
011
16
32
64
6,510 13,021 26,042
426,7 853,3 1706,7
100
101
110
79
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Registro de módulo
T1MODH, T1MODTL parte alta y baja del valor de overflow
80
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Registro de estado y control TSC
TOF indica que se ha producido overflow.
» Borrado, leer TSC cuando TOF=1 y después escribir “0” en TOF
TOIE
habilitación de interrupciones
» TOIE=1 interrupciones habilitadas
» TOIE=0 interrupciones deshabilitadas
TSTOP
TRST
parada del contador del TIM
reset del TIM (contador y preescalado)
81
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Cada canal del TIM channel0 y channel1 puede ser configurado como input
capture y output compare
x puede indicar canal 0 ó 1
input capture
El cambio de
nivel de tensión de un pin
» congela el valor del T1CNT en 2
registros T1CHxH: T1CHxL
output compare
cuando
T1CNTH:T1CNTL coincide con el
valor almacenado en T1CHxH:
T1CHxL :
» activa un banderin CHxF
» se activa un banderín CHxF
» podría provocar una interrupción
» podría provocarse una
interrupción
aplicaciones
» medida precisa instante evento
» medida de intervalos
» medida de frecuencia
» interrupción externa adicional
» puede cambiarse la tensión de
salida de un pin
aplicaciones
» generación de ondas periódicas
» generación de pulsos
» Generación de interrupciones
dependientes del tiempo
82
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Función INPUT CAPTURE
CHxIE, habilitación de
interrupciones
CHxF, Chanel x Flag
» CHxF = 1
activo
ha ocurrido un flanco
» Borrado: lectura de TSCx con
CHxF activo y después escritura
de un 0
MSxB:MSxA
00
00
00
ELSxB:ELSxA
01
10
11
» CHxIE = 1
habilitadas
» CHxIE = 0
deshabilitadas
Configuración como input capture
y selección del tipo de flanco
Configuración CHx
Input capture sólo flanco subida
Input capture sólo flanco bajada
Input capture cualquier flanco
83
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Función OUTPUT COMPARE
CHxIE, habilitación de
interrupciones
CHxF, Chanel x Flag
» CHxF = 1 se ha producido la
igualdad TCNT = TCHx
» borrado: lectura de TSCx con
CHxF activo y después escritura
de un 0
MSxB:MSxA
01
01
01
01
ELSxB:ELSxA
00
01
10
11
» CHxIE = 1 habilitadas
» CHxIE = 0 deshabilitadas
Configuración como ouput
compare y selección del tipo de
flanco
Configuración CHx
OC sin actuar sobre pin
Conmutar salida cuando expira
Salida a "0" cuando expira
Salida a "1" cuando expira
84
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Generación de ondas PWM
La conversión D/A se realiza mediante PWM
Se implementa con un OUTPUT COMPARE y el contaje modular del
TCNT actuando sobre las patillas T1CHx
» Tpwm se programa con el overflow de contador, haciendo conmutar T1CHx
» Ton se programa mediante output compare forzando el cero en T1CHx al
expirar la cuenta del output compare
Ton
Toff
Vmáx
V = Vmin + (Vmáx − Vmin )
Vmin
Tpwm
clear on output compare
toggle on overflow
Ton
T
85
SISTEMAS EMPOTRADOS
Módulo TIMER, TIM
Generación de ondas PWM
TOVx (registro TSCx) habilitan el cambio del estado lógico de las
patillas TCHx ante un overflow del TCNT
» Cuando el canal está inicializado como OUTPUT COMPARE
fuerza el cambio del valor del pin asociado en un overflow
TOVx = 1
» En otro caso no tiene efecto
CHxMAX (registro TSCx)
» CHxMAX = 1
el tiempo de ON del PWM es el 100% del periodo
86
SISTEMAS EMPOTRADOS
Línea serie síncrona, SPI
SPI = Synchronous Serial Peripheral Interface
Comparte patillas con el puerto D
Síncrona => envío del reloj
Señales
» MOSI: Master Output Slave Input
» MISO: Master Input Slave Output
» SPSCK: Reloj del SPI
» SS = 0 (slave)
» SS = 1 (master)
87
SISTEMAS EMPOTRADOS
Línea serie síncrona, SPI
Control
SPCR: registro de control
» SPE = 1 (SPI activada)
» SPMSTR = 0 (slave) / = 1 (master)
» CPOL, CPHA: configuración del reloj
» SPRIE
habilitación interrupción de recepción
» SPTIE
habilitación de la interrupción de transmisión completa
88
SISTEMAS EMPOTRADOS
Línea serie síncrona, SPI
Estado y control
SPSCR: registro de estado y control
» SPR0, SPR1: velocidad de transferencia (bits/s)
–
Baud rate = CGMOUT / (2 x BD)
» SPRF
–
Si SPRIE = 1
» SPTE
–
bit que indica que el receptor está lleno
interrupción
bit que indica que el transmisor está vacío
Si SPTIE = 1
interrupción
» OVRF, ERRIE, MODF, MODFEN
estado y control de errores
89
SISTEMAS EMPOTRADOS
Línea serie síncrona, SPI
Registro de datos
SPDR: Dos registros ocupan la misma posición de memoria ($0012)
» Lectura: buffer con el último byte recibido
» Escritura: buffer
registro de desplazamiento
90
SISTEMAS EMPOTRADOS
Línea serie asíncrona, SCI
SCI = Asynchronous Serial Communications Interface
Comparte patillas con el PTE
Full duplex, Baud rate programable
Control de errores
SCDR: registro de datos
» Dos registros separados en la misma posición de memoria ($0018)
» Escritura => transmisión, Lectura => recepción
» Registro con buffer
Transmisión - SCDR
Recepción - SCDR
68HC08
TXD
PTE0
PTE1
RXD
PERIFERICO
91
SISTEMAS EMPOTRADOS
Línea serie asíncrona, SCI
Selección del “Baud Rate”
Registro SCBR
» SCP0, SCP1
» SCR0..2
bits de selección del preescalado
bit de selección del divisor
92
SISTEMAS EMPOTRADOS
Línea serie asíncrona, SCI
Inicialización
SCC1: registro de control
» ENSCI = 1
SCI habilitada
SCC2: registro de control
» TE = 1
habilitación de la transmisión
» RE = 1
habilitación de la recepción
93
SISTEMAS EMPOTRADOS
Línea serie asíncrona, SCI
Interrupciones
Reg. De control SCC2
Reg. De estado SCS1
Interrupción
Flag
Habilit. Borrado flag
Transmisor vacío SCTE
SCTIE
Leer SCS1 (con SCTE=1), escribir en SCDR
Transmisión
completa
TC
TCIE
Automáticamente cuando hay un nuevo dato a
enviar
Receptor lleno
SCRF
SCRIE Leer SCS1 (con SCRF=1), leer SCDR
Receptor vacío
IDLE
ILIE
Leer SCS1 (con IDLE=1), leer SCDR
94
SISTEMAS EMPOTRADOS
Línea serie asíncrona, SCI
Formato de transmisión
Reg. SCC1
» M long. de carácter
–
M=0
8 bits
–
M=1
9 bits
» PEN
habilitación de
paridad
» PTY
tipo de paridad
Reg. SCC3
» R8
bit adicional en
recepción
» T8
bit adicional en
transmisión
95
SISTEMAS EMPOTRADOS
Módulo base de tiempo, TBM
TBM
Time Base Module
Generación de interrupciones periódicas
Frecuencia configurable
96
SISTEMAS EMPOTRADOS
Módulo base de tiempo, TBM
Activación y control
TBIF
Time base interrupt flag
» TBIF = 1
TACK
registro TBCR
interrupción pendiente
Time base ACKnowledge
» Escritura de un “1”
TBIE
TBON
borrado del flag
Habilitación de la interrupción
Habilitación del módulo
97
SISTEMAS EMPOTRADOS
Módulo base de tiempo, TBM
Selección de la frecuencia
registro TBCR
Bits TBR0..TBR2
Ejemplo de selección con un reloj externo de 32 kHz
98
SISTEMAS EMPOTRADOS
Otros módulos
Computer Operating Properly (COP)
Monitor ROM (MON)
Si no se reinicializa antes de un
cierto tiempo provoca un RESET
Permite la puesta a punto de un
programa en el “tarjet”
Mecanismo de seguridad
Programa residente en ROM
Low-Voltage Inhibit (LVI)
Provoca un RESET si la
alimentación desciende por
debajo de un cierto umbral
System Integration Module (SIM)
Controla todas las actividades del
µC
Módulo de integración
Comunicaciones mediante línea
serie (PTA0)
Break Module (BRK)
Permite el uso de un breakpoint
hardware (puesta a punto)
Genera una SWI
Registro de configuración
Habilitación de: COP, LVI,
instrucción de STOP
Configuración de: frecuencia del
COP, LVI, fuente del reloj para la
SCI
99
SISTEMAS EMPOTRADOS
Resumen Interrupciones
Flags y su borrado
Source
Flag
Mask
Enable
Acknowledge bit
IRQ pin
IRQF
IMASK
TIM1 channel 0
CH0F
CH0IE
Read T1SC0 & CH0F=0
TIM1 channel 1
CH1F
CH1IE
Read T1SC1 & CH1F=0
TIM1 overflow
TOF
TOIE
TIM2 channel 0
CH0F
CH0IE
Read T2SC0 & CH0F=0
TIM2 channel 1
CH1F
CH1IE
Read T2SC1 & CH1F=0
TIM2 overflow
TOF
TOIE
SPI receiver full
SPRF
SPRIE
Read SPSCR & read SPDR
SPI transmitter empty
SPTE
SPTIE
Write SPDR
SCI receiver full
SCRF
SCRIE
Read SCS1 & read SCDR
SCI input idle
IDLE
ILIE
Read SCS1 & read SCDR
SCI transmitter empty
SCTE
SCTIE
Read SCS1 & write SCDR
SCI transmission complete
TC
TCIE
Keyboard pin
KEYF
ADC conversion complete
COCO
AIEN
Timebase
TBIF
TBIE
ACK
IMASKK
Borrado flag
Vector fetch/ACK=1
Read T1SC & TOF=0
Read T2SC & TOF=0
Write SCDR
ACKK
Vector fetch/ACKK=1
TACK
TACK = 1
100
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
El TMS320F2812
101
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Características básicas:
Frecuencia de bus
MHz
máx. 150
Alimentación 3.3 V
» CPU
1.8 V
Comunicación serie: SPI, SCI,
CAN y McBSP
Conversor AD con 16 canales y
12 bits
Dos event managers
Memoria interna: 128K flash, 1K
OTP ROM, 16K RAM
» Generación PWM
Arquitectura harvard
» Input capture, output compare
» 3 buses (1 programa + 2 datos)
» Bus datos 32 bits
» Bus direcciones:
» Lectura encoders
Tres estados de bajo consumo:
IDLE, STANBY y HALT
Instrucción MAC
–
32 bits (datos)
CPU segmentada
–
22 bits (programa)
Tres Timers de 32 bits
Módulo de generación de reloj
con PLL
Interrupciones vectorizadas con
prioridades
56 pines de entrada/salida digital
SISTEMAS EMPOTRADOS
DESCRIPCIÓN
GENERAL
Diagrama
de bloques
102
SISTEMAS EMPOTRADOS
DESCRIPCIÓN
GENERAL
Mapa de memoria
103
104
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Low Power Modes (modos de bajo consumo)
IDLE
» CPU queda en bajo consumo
» Se puede seleccionar los periféricos que continúan funcionando
» Salida del modo: RESET o interrupción (externa o periférico)
STANDBY
» CPU y periféricos apagados (sin reloj)
» El oscilador, el wachdog y el PLL siguen funcionando
» Salida del modo: RESET, wachdog, señales externas seleccionables e
interrupción externa no enmascarable
HALT
» CPU y periféricos apagados (sin reloj)
» Oscilador y PLL apagados
» Salida del modo: RESET e interrupción externa no enmascarable
» Modo de menor consumo
todo el DSP inactivo
105
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Encapsulados
179-Ball GHH (12x12 mm)
176-Pin PGF LQFP (24x24 mm)
106
SISTEMAS EMPOTRADOS
DESCRIPCIÓN GENERAL
Familia 2000
Parametric
C28x Fixed-Point DSPs
C24x Fixed-Point DSPs
MHz
150
20 - 40
MIPS
150
20 - 40
Special
Instructions/Capabilities
C/C++ Efficient, Code
Compatible with C24x
Devices
Code Compatible with
C28x Devices
Pricing (10kU)
$17.98 to $22.99
$2 to $14.64
Peripherals /Coprocessors
128K or 64K Flash, 12-bit
ADC, Multichanneled
Buffered Serial Port
(McBSP), 2 UARTs, 2
Event Managers,
Enchanced Controller
Area Network (eCAN)
Communication
Controller, SPI, 56 GPIO,
Watch Dog Timer
32K, 16K or 8K Flash, 10bit ADC, SPI, UART, 2
Event Managers,
Controller Area Network
(CAN), Communication
Controller
107
SISTEMAS EMPOTRADOS
C28x CPU
Características básicas
Hasta 150 MHz de frecuencia
ALU de 32 bits, coma fija
MAC y multiplicación de 32x32 bits
resultado de 64 bits
Pipeline de 8 etapas
Buses (harvard)
» Buses de dirección
–
PAB Program address bus (22-bit).
–
DRAB Data-read address bus (32-bit).
–
DWAB Data-write address bus (32-bit).
» Buses de datos
–
PRDB Program-read data bus (32-bit).
–
DRDB Data-read data bus (32-bit).
–
DWDB Data-/Program-write data bus (32-bit).
108
SISTEMAS EMPOTRADOS
C28x CPU
Diagrama de la CPU
Registros
Acumulador ACC (32 b)
8 reg auxiliares XAR0..7 (32 b)
Contador de progr. PC (22 b)
Registro de vuelta RPC (22 b)
Puntero de pila SP (16 b)
Control de interrupciones IFR,
IER, DBGIER (16 b)
Reg. de estado ST0..1 (16 b)
Reg. de producto P, XT (32 b)
Puntero de página DP (16 b)
109
SISTEMAS EMPOTRADOS
C28x CPU
Pipeline
Fetch: F1 (PC
bus direcciones), F2 (lectura instrucción)
Decode: D1, D2
Read: R1 (dirección dato
bus), R2 (lectura dato)
Execute: E
Write: W (escritura del resultado)
110
SISTEMAS EMPOTRADOS
C28x CPU
Modos de direccionamiento
Directo: DP (data page) + desplazamiento de 6 ó 7 bits
Sobre el puntero de pila
» SP + desplazamiento de 6 bits
» Pre-decremento o post-incremento de SP
Indirecto sobre un registro auxiliar
» XARx dirección de un dato
» XARx + desplazamiento de 3 bits
» XARx + desplazamiento XARi
» Post-incremento o pre/post-decremento de XARx
Registro
» Un registro es el origen o destino del dato
111
SISTEMAS EMPOTRADOS
C28x CPU
Conjunto de instrucciones
Para el procesado digital de señal
» Multiplicación
–
16 bits x 16 bits
resultado 32 bits
–
32 bits x 32 bits
resultado
» 32 bits de la parte alta
» 32 bits de la parte baja
» Multiplica y acumula
–
16 bits x 16 bits MAC
resultado 32 bits
–
32 bits x 32 bits MAC
resultado
» 32 bits de la parte alta
» 32 bits de la parte baja
112
SISTEMAS EMPOTRADOS
Reloj y PLL
Fuente de reloj para el DSP
Reloj externo a la frecuencia de trabajo
Reloj externo + PLL multiplicador de la frecuencia
113
SISTEMAS EMPOTRADOS
Reloj y PLL
Posibilidades de reloj externo
20 MHz .. 35 MHz
Posibles conexiones
PLL programado por el registro PLLCR
114
SISTEMAS EMPOTRADOS
Reloj
Se puede
habilitar el
reloj de cada
periférico
independientemente
115
SISTEMAS EMPOTRADOS
Reloj
Habilitación reloj periférico
Peripheral Clock Control (PCLKCR) Register
116
SISTEMAS EMPOTRADOS
Reloj
Preescalado del reloj de los periféricos
Low-Speed Peripheral Clock
Prescaler (LOSPCP) Register
High-Speed Peripheral Clock
Prescaler (HISPCP) Register
117
SISTEMAS EMPOTRADOS
Interrupciones
Características básicas
La CPU soporta
» NMI
interrupción no
enmascarable
» INT1..INT14, RTOSINT,
DLOGINT
16 interrupciones
enmascarables
» Interrupciones software no
enmascarables
Tabla de 128 vectores diferentes
de interrupción
» Sólo 76 efectivas
Reset
Interrupciones software
» 12 de usuario USER0..USER11
(traps)
ILLEGAL
ilegal
código de instrucción
Interrupciones externas a la CPU
» 96 posibles fuentes multiplexadas
en 12 grupos de 8 interrupciones
–
Cada grupo activa una
interrupción de la CPU
(INT1..INT12)
–
41 de los periféricos
–
1 Watchdog
–
2 interrupciones externas
XINT1 y XINT2
–
1 timer 0
–
Resto no conectadas
» Interrupción externa XINT13
NMI o INT13
» Timer 2
INT14 (uso por RTOS)
» Timer 1
INT13 (uso por RTOS)
118
SISTEMAS EMPOTRADOS
Interrupciones
RESET
Fuentes
» Encendido
» Pin de RESET
RS
Acciones
» Detiene todas las operaciones en curso y vacía la pipeline
» Inicializa el valor de ciertos registros
» Carga en el PC el contenido del vector de RESET
–
0x3F FFC0
situado en ROM
–
Salto a InitBoot. Según el estado de algunos pines:
» Salto a la Flash
0x3F 7FF6 (debe contener un salto al
comienzo del programa)
» Salto a H0 SRAM
0x3F 8000
» Salto a la memoria OTP
0x3D 7800
» Ejecución de una rutina de carga
119
SISTEMAS EMPOTRADOS
Interrupciones
Esquema de las
fuentes de interrupción
120
SISTEMAS EMPOTRADOS
Interrupciones
PIE (Periferal Interrupt Expansion)
Multiplexa 96 interrupciones en únicamente 12 (INT1..INT12) que son
entregadas a la CPU
Permite un vector de interrupción individual para cada una
Flag y habilitación individual
121
SISTEMAS EMPOTRADOS
Interrupciones
PIE
122
SISTEMAS EMPOTRADOS
Interrupciones
Habilitación y flags de interrupciones
Máscara general de las interrupciones enmascarables
(registro de estado ST1)
INTM
» INTM = 0 interrupciones globalmente no enmascaradas
–
asm(" clrc INTM
; Enable global interrupts");
» INTM = 1 interrupciones globalmente enmascaradas
–
asm(" setc INTM
; Mask global interrupts");
Dos niveles de habilitación y flags
» Nivel CPU
» Nivel PIE
interrupciones INT1..INT14
96 interrupciones agrupadas en 12 grupos de 8
123
SISTEMAS EMPOTRADOS
Interrupciones
Nivel de CPU
Habilitación
» Registro IER (Interrupt Enable Register)
» INTx = 1
habilitada
Flag
» Registro IFR (Interrupt Flag Register)
» INTx = 1
interrupción pendiente
Ambos registros (16 bits) tienen la misma estructura
124
SISTEMAS EMPOTRADOS
Interrupciones
Nivel PIE
Habilitación global del PIE
ENPIE = 1 en el registro PIECTRL
Agradecimiento de una interrupción de un bloque de 8
» Registro PIEACK
» PIEACKx = 1
interrupción pendiente en el bloque x, no se pasan nuevas
interrupciones a la CPU
» Borrado
escritura por la aplicación de un 1 en el correspondiente bit
125
SISTEMAS EMPOTRADOS
Interrupciones
Nivel PIE
Un registro de habilitación para cada bloque de 8
» PIEIERx (x = 1..12)
» PIEIERx.y = 1
interrupción habilitada
Un registro de flag para cada bloque de 8
» PIEIFRx (x = 1..12)
» PIEIFRx.y = 1
interrupción pendiente
Ambas clases de registros (16 bits) tienen la misma estructura
126
SISTEMAS EMPOTRADOS
Interrupciones
Interrupciones externas
XINT1 y XINT2
» Cada una tiene un registro de habilitación y configuración XINTxCR
» Enable = 1
interrupción habilitada
» Polarity = 0
flanco de bajada
» Polarity = 1
de subida
flanco
NMI
» Registro de configuración XNMICR
» Enable y Polarity idem.
» Select = 0
origen Timer 1
» Select = 1
origen XNMI
127
SISTEMAS EMPOTRADOS
Interrupciones
Respuesta a una interrupción del
PIE
Por defecto no se permiten
interrupciones encajadas
Los flags de la CPU y del PIE
son borrados de forma
automática
El borrado del PIEACKx debe
hacerlo la rutina de
interrupción
La pipeline es vaciada
» Se completan las
instrucciones decodificadas
» El resto se eliminan
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas, GPIO
56 pines I/O todos bidireccionales
Organizados en 5 puertos
A,B,D,E,F,G
Pullup o pulldown interno
Compartidos con otros periféricos
Acciones sobre cada línea
» Set
» Clear
» Toggle
» Read
» Write
Filtrado de ruido
» Qualification
128
129
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas, GPIO
Port
pins
MUX
direc.
qualif.
set
clear
toggle
data
Peripheral
A
16
GPAMUX
GPADIR
GPAQUAL
GPASET
GPACLEAR
GPATOGGLE
GPADAT
EV-A
B
16
GPBMUX
GPBDIR
GPBQUAL
GPBSET
GPBCLEAR
GPBTOGGLE
GPBDAT
EV-B
D
4
GPDMUX
GPDDIR
GPDQUAL
GPDSET
GPDCLEAR
GPDTOGGLE
GPDDAT
EV-A
EV-B
E
3
GPEMUX
GPEDIR
GPEQUAL
GPESET
GPECLEAR
GPETOGGLE
GPEDAT
Ext. Int.
F
15
GPFMUX
GPFDIR
-
GPFSET
GPFCLEAR
GPFTOGGLE
GPFDAT
SPI, SCI,
CAN, McBSP
G
2
GPGMUX
GPGDIR
-
GPGSET
GPGCLEAR
GPGTOGGLE
GPGDAT
SCI
130
SISTEMAS EMPOTRADOS
Entradas/salidas paralelas, GPIO
Puerto A (similarmente B, D, E, F, G)
GPAMUX
» GPAMUXx = 0
GPIOAx (GPIO pin)
» GPAMUXx = 1
Periférico
GPADIR
» GPADIRx = 0
Entrada
» GPADIRx = 1
Salida
GPASET, GPACLEAR, GPATOGGLE
» Escritura BITx = 1
Acción
» Escritura BITx = 0
sin efecto
GPADAT
» Pin de entrada
» Pin de salida
la lectura devuelve el estado lógico del pin
la escritura fuerza el estado lógico del pin
131
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Características generales
Dos módulos independientes e iguales EV-A y EV-B
Funciones de cada módulo
» Input Capture
» Output Compare
» Generación de señales PWM (hasta 8 por módulo)
» Lectura de encoders (Quadrature-Encoder Pulses)
» Generación de periodos de muestreo para el ADC
» Interrupciones diversas
Elementos de cada módulo
» 2 timers (up/down) de 16 bits
–
frecuencia CLOCK_CPU..CLOCK_CPU/128
» Varios registros de comparación
» 2 registros de periodo
» Lógica QEP, unidad de captura
PWM, OC
132
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Interfase
SISTEMAS EMPOTRADOS
Event Manager,
EV-A y EV-B
Estructura
interna
133
134
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Habilitación y configuración de los timers de propósito general
4 timers Tx (x = 1..4)
» T1 y T2 en EV-A
TPS2TPS0
Frec.
Tick
x = 150 MHz
» T3 y T4 en EV-B
000
x/1
6.66 ns
001
x/2
13.3 ns
010
x/4
26.6 ns
011
x/8
53.3 ns
100
x/16
106.6 ns
101
x/32
213.3 ns
110
x/64
426.6 ns
111
x/128
853.3 ns
Cada Tx
» 1 registro contador TxCNT (16 bits)
» 1 registro de periodo TxPR (16 bits)
» 1 registro de control TxCON
–
Preescalado
TPS2-TPS0
–
Modo de operación
–
Habilitación
TMODE1-TMODE0
TENABLE = 1
x = Frecuencia de reloj de la CPU
135
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Modos de operación de los timers de propósito general
TMODE1TMODE0
Modo
Descripción
00
Stop/Hold
Contador parado
01
Continous-Up/-Down
Cuenta hacia arriba hasta el periodo
cuenta hacia abajo hasta 0
sigue
contando hacia arriba
10
Continous-Up
Cuenta hacia arriba hasta el periodo
TxCNT = 0
sigue contando
11
Directional-Up/-Down
Cuenta hacia arriba o hacia abajo
según el valor de del pin TDIRA/B
136
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Interrupciones de los timers de propósito general
Overflow
» Flag
TxCNT = 0xFFFF
T1OFINT (bit 10) del registro EVAIFRA (overflow del T1)
» Habilitación
TxCNT = 0x0000
Underflow
» Flag
T1UFINT (bit 9) del registro EVAIFRA (underflow del T1)
» Habilitación
Period match
» Flag
T1OFINT (bit 10) del registro EVAIMRA (overflow del T1)
T1UFINT (bit 9) del registro EVAIMRA (underflow del T1)
TxCNT = TxPR
T1PINT (bit 7) del registro EVAIFRA (period match del T1)
» Habilitación
T1PINT (bit 7) del registro EVAMFRA (period match del T1)
Borrado de los flags
escribiendo un 1
137
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Función de comparación
Registro
Evento
TxCMPR (16 bits)
TxCNT = TxCMPR
Esta función está asociada a una salida del DSP
» TxPWM_TxCMP
» Cada vez que se produce la igualdad
cambio del valor de la salida
» Cuando el TxCNT alcanza el periodo
cambio del valor de la salida
» Así puede generar un PWM
–
Compare
–
Period
Ton
Periodo del PWM
138
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Función de comparación
Habilitación
» Registro de control del EV-A/-B
–
TCMPOE = 1
–
TxCMPOE = 1
GPTCONA
salidas del módulo A/B sensibles a las comparaciones
salida de comparación del Tx habilitada
» Registro de control TxCON
–
TECMPR = 1
Habilitación de la comparación
Interrupción cuando se produce la comparación
» Flag
T1CINT en EVAIFRA y T2CINT en EVAIFRB (idem para T3 y T4)
» Habilitación
y T4)
T1CINT en EVAIMRA y T2CINT en EVAIMRB (idem para T3
139
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Generación de un periodo de muestreo para el conversor AD
Habilitación y configuración en los registros GPTCONA y GPTCONB
» Pareja de bits TxTOADC
TxTOADC Descripción
00
Activación ADC deshabilitada
01
Toma muestra en underflow de Tx
10
Toma muestra al alcanzar el periodo el Tx
11
Toma muestra en el compare del Tx
140
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
PWM
Además del PWM que puede generar cada GPT
cada módulo posee
tres registros de comparación espacializados en PMW
Cada uno gestiona dos salidas
de la otra)
PWMi y PWMi+1 (una es la inversa
Registros
» Activación
» Comparación
bits CENABLE, FCMPOE, FCNP(1,2,3)OE en COMCON-A/-B
CMPRx
Características adicionales
deadband, generación automática de las
tres fases para motores de alterna
141
SISTEMAS EMPOTRADOS
Event Manager, EV-A y EV-B
Función Input Capture
Tres registros de captura por cada módulo (A y B)
Cada una captura una entrada CAPx (x = 1..3)
del TxCNT
CAP(1,2,3)FIFO
se almacena el valor
Sensible a flancos de subida o de bajada o a ambos
» Configuración
CAPCONA / B
Posibilidad de generación de interrupciones
» Habilitación
» Flags
EV(A,B)IMRC
EV(A,B)IFRC
Función lectura de encoder
Quadrature Encoder Pulse (QEP) Circuit
Multiplexado con la unidad de captura
Control de posición y velocidad de motores
142
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Características generales
12 bits de conversión
1 convertidor
16 canales
Entrada analógica
0..3 V
Tiempo de conversión
» Maximo
200 ns
16 registros de resultado de 16 bits
Autosecuenciamiento de canales
Diversas fuentes de comienzo de conversión
Valor _ Digital = 4095 ×
Voltaje _ entrada − ADCLO
3
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Diagrama de bloques
143
144
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Secuenciadores
Dos grupos de 8 canales independientes
» Cada uno con su sample-and-hold
» Cada uno con su secuenciador
Los dos secuenciadores pueden funcionar independientes (SEQ1 y
SEQ2) o encadenados (SEQ)
Los secuenciadores indican qué canales y en qué orden se convierten
cada vez que se inicia una conversión
Para cada SEQx
» Número de canales a convertir cada vez que se inicia una conversión
MAXCONV
» Orden de los canales
–
CHSELSEQ1
CONV00 – CONV03
–
CHSELSEQ2
CONV04 – CONV07
–
CHSELSEQ3
CONV08 – CONV11
–
CHSELSEQ4
CONV12 – CONV15
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Diagrama
SEQ
145
146
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Dos modos
Conversión continua
se pone los secuenciadores en bucle y las
conversiones no se detienen
Start-stop
A la llegada de un señal de inicio de conversión se
convierten únicamente el número de canales indicado en MAXCONV
Inicio de conversión, SOC
Por software
SEQ1, SEQ2, SEQ
EVA
SEQ1, SEQ
EVB
SEQ2, SEQ
Pin de entrada GPIOE1/XINT2_ADCSOC
Interrupciones
Fin de las conversiones de un secuenciador
SEQ1, SEQ
147
SISTEMAS EMPOTRADOS
Convertidor analógico-digital, ADC
Habilitación y configuración
ADCTRL1
» CONT RUN = 1
modo
conversión continua
» SEQ CASC = 1
en cascada
ADCTRL3
SEQ1 y SEQ2
encendido del ADC
» ADCRFDN = 1, ADCBGDN = 1
5 ms
ADCPWDN = 1
ADC_ST_FLG
» INT SEQx CLEAR
escritura de
un 1
borrado del flag
» INT SEQx
flag
ADCTRL2
» EVB SOC SEQ
habilitación del
SOC del SEQ por EVB
» RST SEQx
RESET del
secuenciador
» SOC SEQx
SOC por software
» INT ENA SEQx = 1
interrupción habilitada
» EXT SOC SEQ1 = 1
SOC por
señal externa habilitada
» EVA SOC SEQ1 = 1
habilitación del SOC de SEQ1 por
EVA
» EVB SOC SEQ2 = 1
habilitación del SOC de SEQ2 por
EVB
148
SISTEMAS EMPOTRADOS
32 bits CPU timers
El DSP posee tres timers adicionales a los de EV-A/-B
TIMER0
utilizable por el usuario
TIMER1 y TIMER2
real
reservados para sistemas operativos de tiempo
Los tres tienen la misma estructura
149
SISTEMAS EMPOTRADOS
32 bits CPU timers
Estructura y funcionamiento
Permiten la generación de interrupciones periódicas
tiempos
base de
150
SISTEMAS EMPOTRADOS
32 bits CPU timers
Configuración
Registro de control
» TIE = 1
» TIF
» TRB
TIMERxTCR
interrupción habilitada
flag de la interrupción
reinicilización del timer al escribir un 1
» TSS = 1
el timer se detiene
151
SISTEMAS EMPOTRADOS
32 bits CPU timers
Programación
Preescalado
TIMERxTPR/TPRH
» Escribir en TDDR y TDDRH el valor del prescalado (número de ticks de
CPU que tiene un tick del timer)
» PSC y PSCH es el contador
Periodo
» Escribir en TIMERxPRD y TIMERxPRDH el valor del periodo (en ticks del
timer)
SISTEMAS EMPOTRADOS
Multichannel Buffered Serial Port, McBSP
Características básicas
Comunicación serie síncrona
Interfase directa con conversores y codecs comerciales
Comunicación full-duplex
128 canales
No DMA
» Colas FIFO de recepción y transmisión de 16 posiciones
Varios tamaños de datos: 8, 12, 16, 20, 24 y 32 bits
Posibilidad de compresión de datos
» A-law
» µ-law
Interrupciones
152
SISTEMAS EMPOTRADOS
Multichannel Buffered Serial Port, McBSP
Diagrama
153
SISTEMAS EMPOTRADOS
Multichannel Buffered Serial Port, McBSP
Comunicación serie síncrona
Tamaño de dato enviado configurable 8, 12, 16, 20, 24 y 32 bits
Los datos de agrupan en tramas de longitud fija
» Frame
» Uno o varios datos
Sincronización en bit (reloj) y en trama
Reloj configurable
154
155
SISTEMAS EMPOTRADOS
Multichannel Buffered Serial Port, McBSP
Comunicación multicanal
Cada trama es dividida en rodajas temporales
» Rodaja
un dato (8, 12, 16, 24, 32 bits)
» Canal = rodaja
La línea serie es multiplexada en el tiempo en diversos canales
Hasta 128 canales
El McBSP puede transmitir o recibir en únicamente los canales activos
156
SISTEMAS EMPOTRADOS
Otros periféricos
Resto de periféricos y módulos del TMS320F2812
Serial Port Interface
SPI
Serial Communications Interface
Enhanced Controller Area Network
Code Security Module
SCI
eCAN
CSM
Watchdog
Breakpoint Functions and Real-Time Debug via Hardware
» Interfase JTAG
157
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
Herramientas de desarrollo
158
SISTEMAS EMPOTRADOS
Introducción
Tipo de desarrollo
Desarrollo nativo. La aplicación se desarrolla en el mismo computador
donde se va a ejecutar
Desarrollo cruzado. La aplicación se desarrolla en un computador
diferente (“host”) a la plataforma de ejecución (“target”)
Localización del código
La plataforma de ejecución tiene bancos de memoria con diferentes
tecnologías (RAM, ROM, PROM, FLASH ...) en direcciones concretas
de memoria
Al no existir SO es preciso establecer dónde se ubicarán programa y
datos.
159
SISTEMAS EMPOTRADOS
Introducción
Uso de C y Ensamblador
Programación en C
» Puesta a punto de la lógica del
programa
Reescritura de algunas partes
críticas en ensamblador
» Disminución de la ocupación de
memoria
Fuente
Ensamblador
Fuente C
Compilador
Cruzado
Ensamblador
Cruzado
Objeto
Relocalizable
Objeto
Relocalizable
Librerías
» Aumento de las prestaciones
Fichero
Configuración
Montador de
Enlaces
Ejecutable
No Relocalizable
Cargador
Máscara
Microcontrolador
DSP
160
SISTEMAS EMPOTRADOS
Introducción
Requisitos de un lenguaje para la programación de µC
Acceso directo a memoria y hardware para lectura y escritura
» Programación de periféricos
Posibilidad de llamar a rutinas en ensamblador o insertar código
máquina
Conexión directa con interrupciones
» La mayoría de la aplicaciones basarán gran parte de su funcionamiento en
interrupciones
» Prestaciones, carácter asíncrono de los eventos
Generación de código eficiente en ocupación de memoria y velocidad
de ejecución
» Se dispone de poca memoria
Lenguaje C extendido para sistemas empotrados
161
SISTEMAS EMPOTRADOS
El “C” para Sistemas Empotrados
Cualificadores acceso
Especificadores clase almacenamiento
const
extern
El contenido de la variable no debe
ser modificado por el programa
indica al compilador que la variable
puede almacenarse en ROM
en pasos por referencia a funciones
indica que la función no modifica el
valor pasado
volatile
El valor de la variable puede ser
cambiado sin que se indique
explícitamente en el fuente
volatile char variableLeidaExterior;
char B;
...
for (i=0; i<1000; i++){
B=variableLeidaExterior
}
La variable/función declarada está
definida en fuera del fichero. En
tiempo de enlazado se conocerá la
ubicación definitiva.
static.- Especifica 3 conceptos diferentes:
En variables locales, indica que se
almacenan en el segmento de datos y
no en la pila. Se hace una reserva
permanente para toda la vida del
programa. Mantiene el valor entre
llamadas
En variables globales indica que la
variable NO ES VISIBLE fuera del
fichero donde está definida
En funciones indica que la función NO
ES VISIBLE fuera del fichero donde
está definida
162
SISTEMAS EMPOTRADOS
El “C” para Sistemas Empotrados
Union
Estructura de datos para darle 2 interpretaciones distintas a una misma
zona de la memoria
declaración/definición
» definir los campos en una plantilla
» definir/declarar una variable que
emplea la plantilla
» ejemplo
int entero;
typedef union {
int entero;
struct{
0x35
unsigned char hi;
unsigned char lo;
}bytes;
}unionEntero;
unionEntero miEntero;
struct word{
int otroEntero;
unsigned char hi;
...
unsigned char lo;
miEntero.bytes.lo=0x40;
};
miEntero.bytes.hi=0x35;
otroEntero=miEntero.entero; /* otroEntero vale 0x3540*/
0x40
163
SISTEMAS EMPOTRADOS
El “C” para Sistemas Empotrados
Manejo de bits individuales
acceso mediante máscaras, forma tradicional de acceso
» forzado de un solo bit a “1”
registro |= mascara;
» forzado de un solo bit a “0”
registro &= mascara;
#define BIT_3 0x04
...
registro |= BIT_3;
#define BIT_3 0x04
...
registro &= ~BIT3;
campos de bits, tipo de dato
específico en C para acceso a bits.
typedef struct {
unsigned bit_0:1;
unsigned bit_1:1;
unsigned bit_2:1;
unsigned bit_3:1;
unsigned nibble:4;
}campoBits;
...
campoBits miRegistro;
miRegistro.bit_0=1;
miRegistro.nibble=0x06;
164
SISTEMAS EMPOTRADOS
Desarrollo para el 68HC08
Entorno de desarrollo formado por:
CodeWarrior (Metrowerks)
» Edición, gestión de proyectos, configuración
» Compilador C
» Ensamblador
» Linker
» Debugger sobre código fuente C
M68ICS08GP In-Circuit Simulator
» Contiene un 68HC908GP32
» Carga y ejecución de código
» Programación de la memoria FLASH
» Un breakpoint por hardware en FLASH
» Comunicación por RS232
» Gestión del modo MONITOR
» Accesibilidad de los puertos
165
SISTEMAS EMPOTRADOS
Desarrollo para el TMS320F2812
Entorno de desarrollo formado por:
Code Composer (Texas
Instruments)
eZdsp F2812 (Digital Spectrum)
» Contiene un TMS320F2812
» Carga y ejecución de código
» Edición, gestión de proyectos,
configuración
» Programación de la memoria
FLASH
» Compilador C
» Dos breakpoints por hardware
» Ensamblador
» Comunicación por línea paralelo
» Linker
» Controlador IEEE 1149.1 JTAG
» Debugger sobre código fuente C
» Accesibilidad de los puertos
» Entrada y salida de datos
(simulación de E/S hardware)
» Memoria RAM externa adicional
» Análisis de código: tiempos de
cómputo, accesos, …
» Sistema operativo de tiempo real:
DSPBIOS
166
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de cabecera
68hc08gp32.h
/*****************************************************
6808gp32.h - Target interface library
Describes I/O registers of MC68HC08GP20
---------------------------------------------------Copyright (c) Metrowerks, Basel, Switzerland
*****************************************************/
…
#ifndef __DECL__68HC08GP32_H__
#define __DECL__68HC08GP32_H__
#endif
extern
#pragma MESSAGE DISABLE C1106 /* WARNING C1106: Non-standard bitfield type */
#define _IO_BASE_ADDR 0
#define _IO_AT(x) @(_IO_BASE_ADDR+(x))
#include <stdtypes.h>
/*******************************************************************************************/
/*
DEFINE PORT A
*/
/*******************************************************************************************/
__DECL__68HC08GP32_H__ volatile
unsigned char PTA
__DECL__68HC08GP32_H__ volatile
unsigned char DDRA _IO_AT(0x04); /* data direction port A */
…
_IO_AT(0x00); /* port A */
167
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de cabecera
68hc08gp32
…
/*****************************************************************************************/
/*
DEFINE PORT C
*/
/*****************************************************************************************/
/****Port Register C******/
__DECL__68HC08GP32_H__ volatile
struct {
unsigned char _PTC0:1;
unsigned char _PTC1:1;
…
unsigned char _PTC5:1;
unsigned char _PTC6:1;
unsigned char BIT7:1;
} PTC_BITS;
unsigned char PTC_BYTE;
}PTC1_ _IO_AT(0x02);
/* DEFINE REGISTER */
#define PTC PTC1_.PTC_BYTE
/*DEFINE REGISTER BITS*/
#define PTC0 PTC1_.PTC_BITS._PTC0
#define PTC1 PTC1_.PTC_BITS._PTC1
…
#define PTC5 PTC1_.PTC_BITS._PTC5
#define PTC6 PTC1_.PTC_BITS._PTC6
union {
168
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de cabecera
68hc08gp32
…
/****Data Direction Register C******/
__DECL__68HC08GP32_H__ volatile
union {
struct {
unsigned char _DDRC0:1;
unsigned char _DDRC1:1;
…
unsigned char _DDRC5:1;
unsigned char _DDRC6:1;
unsigned char BIT7:1;
} DDRC_BITS;
unsigned char DDRC_BYTE;
}DDRC1_ _IO_AT(0x06);
/* DEFINE REGISTER */
#define DDRC DDRC1_.DDRC_BYTE
/*DEFINE REGISTER BITS*/
#define DDRC0 DDRC1_.DDRC_BITS._DDRC0
#define DDRC1 DDRC1_.DDRC_BITS._DDRC1
…
#define DDRC5 DDRC1_.DDRC_BITS._DDRC5
#define DDRC6 DDRC1_.DDRC_BITS._DDRC6
…
169
SISTEMAS EMPOTRADOS
CodeWarrior
Programación de interrupciones
“interrupt” indica al compilador que la función es una rutina de
interrupción
» Sin parámetros y no devuelve nada
» RTI al final
El número indica el vector interrupción correspondiente
void interrupt 17
Tick (void) {
TACK=1;
tick_counter ++ ;
return ;
}
Source
Reset
SW Iinstruction
IRQ pin
CGM(PLL)
TIM1 channel 0
TIM1 channel 1
TIM1 overflow
TIM2 channel 0
TIM2 channel 1
TIM2 overflow
SPI receiver full
SPI overflow
SPI modefault
SP transmitter empty
SCI receiver overrun
SCI noise fag
SCI raming error
SCI parity error
SCI receiver full
SCI input idle
SCI transmitter empty
SCI transmission complete
Keyboard pin
ADC conversion complete
Timebase
Flag
None
None
IRQF
PLLF
CH0F
CH1F
TOF
CH0F
CH1F
TOF
SPRF
OVRF
MODF
SPTE
OR
NF
FE
PE
SCRF
IDLE
SCTE
TC
KEYF
COCO
TBIF
Mask
None
None
IMASK
PLLIE
CH0IE
CH1IE
TOIE
CH0IE
CH1IE
TOIE
SPRIE
ERRIE
ERRIE
SPTIE
ORIE
NEIE
FEIE
PEIE
SCRIE
ILIE
SCTIE
TCIE
IMASKK
AIEN
TBIE
INT Register
Flag
Priority VectorAddress
None
0
$FFFE–$FFFF
None
0
$FFFC–$FFFD
IF1
1
$FFFA–$FFFB
IF2
2
$FFF8–$FFF9
IF3
3
$FFF6–$FFF7
IF4
4
$FFF4–$FFF5
IF5
5
$FFF2–$FFF3
IF6
6
$FFF0–$FFF1
IF7
7
$FFEE–$FFEF
IF8
8
$FFEC–$FFED
IF9
9
$FFEA–$FFEB
Code Warrior
Int Num
1
2
3
4
5
6
7
8
9
10
IF10
IF11
10
11
$FFE8–$FFE9
$FFE6–$FFE7
11
12
IF12
12
$FFE4–$FFE5
13
IF13
13
$FFE2–$FFE3
14
IF14
IF15
IF16
14
15
16
$FFE0–$FFE1
$FFDE–$FFDF
$FFDC–$FFDD
15
16
17
170
SISTEMAS EMPOTRADOS
CodeWarrior
Inline Assembler
El compilador de C permite la introducción de instrucciones en
ensamblador intercaladas en el código “C”
Hay acciones que sólo se pueden hacer desde ensamblador
Varias posibilidades
» "asm" <Assembly Instruction> ";" ["/*" Comment "*/"]
» "asm" " (" <Assembly Instruction> ";" ["/*" Comment "*/"] ")" ";“
» "asm" "{“
{ <Assembly Instruction> [";" Comment] "\n" }
"}"
…
TBIE = 1 ;
asm cli ; /* desenmascarado de las interrupciones */
return ;
}
171
SISTEMAS EMPOTRADOS
CodeWarrior
Secciones de un programa ROM
.text
Código del programa.
.rodata
.rodata1
Constantes.
Strings.
.copy
Inicializadores de
variables.
.startData
Datos empleados
por la rutina startup al comienzo
del programa.
.init
Punto de entrada del
programa, rutinas de inicialización
Secciones de un programa RAM
.data
.bss
.stack
variables inicializadas
variables no inicializadas
pila
172
SISTEMAS EMPOTRADOS
CodeWarrior
Pragmas
directivas al compilador
#pragma CODE_SEG
/* in a header file */
#pragma CODE_SEG MY_CODE1
extern void f(void);
#pragma CODE_SEG MY_CODE2
extern void h(void);
#pragma CODE_SEG DEFAULT
/* in the corresponding C file : */
#pragma CODE_SEG MY_CODE1
void f(void){
h();
}
#pragma CODE_SEG MY_CODE2
void h(void){
f();
}
#pragma CODE_SEG DEFAULT
173
SISTEMAS EMPOTRADOS
CodeWarrior
#pragma DATA_SEG
/* in a header file */
#pragma DATA_SEG CUSTOM_MEMORY
extern int j_custom;
#pragma DATA_SEG DEFAULT
/* in the corresponding C file : */
#pragma DATA_SEG CUSTOM_MEMORY
int j_custom;
#pragma DATA_SEG DEFAULT
void main(void) {
j_custom = 5;
}
174
SISTEMAS EMPOTRADOS
CodeWarrior
#pragma INLINE
int i;
#pragma INLINE
static void foo(void) {
i = 12;
}
void main(void) {
foo(); // results into `i = 12;'
}
175
SISTEMAS EMPOTRADOS
CodeWarrior
Inicialización
La aplicación debe ser enlazada con una función predefinida del
entorno
Startup
» Se encuentra en el fichero Start08.c
» Inicializa el puntero de pila
» Escribe ceros en las posiciones de las variables no inicializadas (.bss)
» Copia los valores correspondientes a las variables inicializadas
» Llama al “main”
176
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de parámetros para el linker.
Describe la memoria física (READ_ONLY, READ_WRITE)
descompuesta en segmentos
SECTIONS
Asigna secciones lógicas (.text, .data, …) a los segmentos de memoria
física
PLACEMENT
Inicializa el vector de RESET y puede inicializar los vectores de
interrupción
VECTOR
Inicialización de la pila
STACKSIZE
NAMES END
SECTIONS
RAM
ROM
END
= READ_WRITE 0x0040 TO 0x023F;
= READ_ONLY 0x8000 TO 0xFDFF;
PLACEMENT
.text
.data
END
INTO
INTO
ROM;
RAM;
STACKSIZE 0x50
VECTOR 0 _Startup
177
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de parámetros para el linker.
Siempre es preciso especificar .data en el bloque PLACEMENT
» Si el resto de secciones a situar en la RAM no son especificadas
Siempre es preciso especificar .text en el bloque PLACEMENT
» Si el resto de secciones a situar en ROM no son especificadas
Algunos sinónimos
.data + .bss DEFAULT_RAM
.text
DEFAULT_ROM
.init
_PRESTART
.rodata
ROM_VAR
.startData
STARTUP
.copy
COPY
178
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de descripción del enlazado
*.map
PROGRAM "F:\...\bin\GP32_ASM_C_MIX_Mon08_FLASH.abs"
*********************************************************************************************
TARGET SECTION
--------------------------------------------------------------------------------------------Processor
: Motorola HC08
Memory Model: SMALL
File Format : ELF\Dwarf 2.0
Linker
: SmartLinker V-5.0.19, Apr 2 2002
*********************************************************************************************
FILE SECTION
--------------------------------------------------------------------------------------------TERMIO.C.o (ansi.lib)
Model: SMALL,
Lang: ANSI-C
…
clock.c.o
Model: SMALL,
Lang: ANSI-C
*********************************************************************************************
STARTUP SECTION
--------------------------------------------------------------------------------------------Entry point : 0x808C (_Startup)
_startupData is allocated at 0x80A6 and uses 9 Bytes
extern struct _tagStartup {
unsigned flags
0
…
} _startupData;
179
SISTEMAS EMPOTRADOS
CodeWarrior
Fichero de descripción del enlazado
*.map
*********************************************************************************************
SECTION-ALLOCATION SECTION
Section Name
Size Type
From
To
Segment
--------------------------------------------------------------------------------------------.text
6984
R
0x80B7
0x9BFE
ROM
.rodata
308
R
0x9BFF
0x9D32
ROM
.rodata1
13
R
0x9D33
0x9D3F
ROM
.abs_section_0
1
N/I
0x0
0x0
.absSeg0
…
.abs_section_ffdc
2
R
0xFFDC
0xFFDD
.absSeg74
.bss
2
R/W
0x100
0x101
RAM
…
.copy
2
R
0x9D40
0x9D41
ROM
.vectSeg75_vect
2
R
0xFFFE
0xFFFF
.vectSeg75
ROM size:
RAM size:
1D46 (dec:
A2 (dec:
7494)
162)
*********************************************************************************************
VECTOR-ALLOCATION SECTION
Address
InitValue
InitFunction
--------------------------------------------------------------------------------------------0xFFFE
0x808C
_Startup
*********************************************************************************************
OBJECT-ALLOCATION SECTION
Name
Module
Addr
hSize
dSize
Ref
Section
RLIB
---------------------------------------------------------------------------------------------
180
SISTEMAS EMPOTRADOS
CodeWarrior
Debugger
Gestiona la comunicación con el target mediante el MON08
Permite la carga de programas en el
» Flash o RAM
Introducción de breakpoints
» Gestión del módulo BRK del HC08
Visualización de memoria
» Programa
» Datos
» Vectores de interrupción
» Registros
Código fuente
Ejecución
» Paso a paso, ejecución indefinida, ejecución hasta una determinada
posición
181
SISTEMAS EMPOTRADOS
M68ICS08GP In-Circuit Simulator
El hardware del M68ICS08GP consta de dos componentes :
ICS08GP20 board
SPGMR08 serial programmer base unit
La tarjeta ICS08GP20
El núcleo es un microcontrolador 68HC908GP32
» En la propia placa
» En el target
Tiene conexiones con
» target
» SPGMR08
182
SISTEMAS EMPOTRADOS
M68ICS08GP In-Circuit Simulator
Puede tener tres funciones
» Emulador
–
La tarjeta contiene el microcontrolador alimentado
–
Reloj
–
Ofrece todos los pines del microcontrolador para conectarlos al target
–
PTA0 no se puede usar
» Microcontrolador en modo monitor
» Comunicación con un target con microcontrolador
–
Ofrece una interfase con el MON08 del target
–
Tarjeta sin microcontrolador
–
Posibilidades
» In-line programming
» Puesta a punto en el target
» Grabación de microcontroladores
183
SISTEMAS EMPOTRADOS
M68ICS08GP In-Circuit Simulator
SPGMR08 serial programmer base unit
Comunica el microcontrolador con el computador de desarrollo
» Transforma la línea serie del modo monitor del 68HC08 en una RS232
Genera para la ICS08GP20
» Reloj de 4.9152-MHz
» Alimentación 5 V
» VTST de 8.5 V requerido para entrar en modo monitor
Esta misma unidad vale para todos los HC08
184
SISTEMAS EMPOTRADOS
M68ICS08GP In-Circuit Simulator
Limitaciones en su uso como emulador
El microcontrolador trabaja en modo monitor
PTA0 condenada para las comunicaciones con el computador de
desarrollo
Las patillas PTA7, PTC0, PTC1, y PTC3 se desconectan del target
durante un cierto tiempo en el reset
Reloj externo 4.9152 MHz
Frecuencia de bus de 2.4575 MHz (CGMXCLK/2)
185
SISTEMAS EMPOTRADOS
Code Composer
Fichero de cabecera
El entorno de desarrollo no ofrece un fichero de cabecera predefinido
El usuario debe programar uno
/******************************************************************************
* FILENAME: F28XX.H
*
* Control registers of the F28xx device.
******************************************************************************/
…
#define PIECTRL
*((volatile unsigned int *)0xce0) /* PIE Control reg
*/
#define PIEACK
*((volatile unsigned int *)0xce1) /* PIE Acknowledge reg */
#define PIEIER1
*((volatile unsigned int *)0xce2) /* PIE Int Enable 1 reg */
#define TIMER0TCR
#define TIMER0TPR
#define TIMER0PRD
*((volatile unsigned int *)0xc04) /* TIMER0 control register */
*((volatile unsigned int *)0xc06) /* TIMER0 preescaler reg. */
*((volatile unsigned int *)0xc02) /* TIMER0 period register */
…
#define WDCR
#define DISABLE_WD
…
*((volatile unsigned int *)0x7029) /* WD Control reg */
0x0068
186
SISTEMAS EMPOTRADOS
Code Composer
Programación de interrupciones
“interrupt” indica al compilador que la función es una rutina de
interrupción
» Sin parámetros y no devuelve nada
» RTI al final
interrupt void Tick (void) {
tick_counter ++ ;
if (Active_Timer)
if (Timer == tick_counter){
TO = 1 ;
Active_Timer = 0 ;
}
PIEACK = 0x01; /* Acknowledge PIE group 1 int */
return ;
}
187
SISTEMAS EMPOTRADOS
Code Composer
Definición de los vectores de interrupción
/******************************************************************************
* FILENAME: Int_Vectors.C
* Definicion de la tabla de interrupciones en el PIE
* JL Villarroel (1-Octubre-2003)
******************************************************************************/
#pragma DATA_SECTION(vec, ".vectors");
extern void Tick (void) ;
void UnusedIsr(void) ;
typedef void (*VECTORS)(); /* Defines a type VECTORS which is a pointer to a */
/* function that returns void; takes no arguments */
const VECTORS vec[] =
{
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
…
/* Interrupt vector table (doesn't include RESET) */
/*
/*
/*
/*
/*
/*
/*
INT1
INT2
INT3
INT4
INT5
INT6
INT7
-
Maskable
Maskable
Maskable
Maskable
Maskable
Maskable
Maskable
int
int
int
int
int
int
int
1
2
3
4
5
6
7
*/
*/
*/
*/
*/
*/
*/
188
SISTEMAS EMPOTRADOS
Code Composer
Definición de los vectores de interrupción
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
…
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
UnusedIsr,
Tick,
UnusedIsr,
…
/*
/*
/*
/*
/*
/*
/*
/*
INT13 INT14 DLOGINTRTOSINTReserved
NMI
ILLEGALUSER1 -
/*
/*
/*
/*
/*
/*
/*
/*
/*
USER12 - User-defined sw int/trap
PIE int 1.1 */
PIE int 1.2 */
PIE int 1.3 */
PIE int 1.4 */
PIE int 1.5 */
PIE int 1.6 */
PIE int 1.7, TINT0 (Timer 0) */
PIE int 1.8 */
};
interrupt void UnusedIsr(void)
{
return;
}
Maskable
Maskable
Maskable
Maskable
int 13, timer 1
int 14, timer 2
data-logging int
real-time OS int
Nonmaskable interrupt
Illegal instruction trap
User-defined sw int/trap
*/
*/
*/
*/
*/
*/
*/
*/
*/
189
SISTEMAS EMPOTRADOS
Code Composer
El compilador permite intercalar instrucciones en ensamblador en ficheros
fuente en C
asm (”assembler text”) ;
void Reset_Clock (void) {
asm(" setc INTM
; Mask global interrupts");
asm(" eallow
; Enable accesses to PIE control registers");
/* Stop TIMER0 */
TIMER0TCR = 0x0010 ;
…
190
SISTEMAS EMPOTRADOS
Code Composer
Secciones generadas por el compilador C
191
SISTEMAS EMPOTRADOS
Code Composer
Pragmas
directivas al compilador
#pragma CODE_SECTION (func, ”section name”)
char bufferA[80];
char bufferB[80];
#pragma CODE_SECTION(funcA, ”codeA”)
char funcA(int i);
char funcB(int i);
void main()
{
char c;
c = funcA(1);
c = funcB(2);
}
char funcA (int i)
{
return bufferA[i];
} …
192
SISTEMAS EMPOTRADOS
Code Composer
#pragma DATA_SECTION (symbol, “section name”)
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferA[512];
char bufferB[512];
#pragma INTERRUPT (func)
193
SISTEMAS EMPOTRADOS
Code Composer
Inicialización
Función predefinida del entorno
_c_int00
» Se encuentra en la librería rts2800(_ml).lib
» Inicializa el puntero de pila
» Escribe ceros en las posiciones de las variables no inicializadas (.bss)
» Copia los valores correspondientes a las variables inicializadas
» Llama al “main”
194
SISTEMAS EMPOTRADOS
Code Composer
Fichero de parámetros para el linker
*.cmd
Describe la memoria física descompuesta en segmentos
» R
Read only ; RW
Read and Write
Cada página es un espacio de direcciones diferente
» PAGE0
Programa
» PAGE1
Datos
» Diferentes vistas de una misma memoria física
» Pueden solaparse
MEMORY
{
PAGE 0 : BOOT(R)
PAGE 0 : PROG(R)
PAGE 0 : RESET(R)
PAGE
PAGE
PAGE
PAGE
}
…
1
1
1
1
:
:
:
:
M0RAM(RW)
M1RAM(RW)
PIEVT(RW)
L0L1RAM(RW)
: origin = 0x3f8000, length = 0x80
: origin = 0x3f8080, length = 0x1f80
: origin = 0x000000, length = 0x2
:
:
:
:
origin
origin
origin
origin
=
=
=
=
0x000000,
0x000400,
0x000d02,
0x008000,
length
length
length
length
=
=
=
=
0x400
0x400
0xfe
0x2000
195
SISTEMAS EMPOTRADOS
Code Composer
Asigna secciones lógicas
(.text, .bss, .stack, …) a los
segmentos de memoria
física
SECTIONS
…
SECTIONS
{
/* 22-bit program sections
.reset
: > RESET,
PAGE
.cinit
: > PROG,
PAGE
.text
: > PROG,
PAGE
*/
= 0
= 0
= 0
/* 16-Bit data sections */
.const
: > M0RAM, PAGE =
.bss
: > M1RAM, PAGE =
.stack
: > M1RAM, PAGE =
.sysmem : > M0RAM, PAGE =
1
1
1
1
/* 32-bit data sections */
.vectors : > PIEVT,
PAGE
.ebss
: > L0L1RAM, PAGE
.econst : > L0L1RAM, PAGE
.esysmem : > L0L1RAM, PAGE
=
=
=
=
1
1
1
1
.boot > BOOT
{
-lrts2800_ml.lib<boot.obj> (.text)
}
}
196
SISTEMAS EMPOTRADOS
Code Composer
Fichero de descripción del enlazado
*.map
******************************************************************************
TMS320C2000 COFF Linker PC Version 3.03
******************************************************************************
>> Linked Wed Oct 01 13:16:27 2003
OUTPUT FILE NAME:
<./Debug/Reloj.out>
ENTRY POINT SYMBOL: "_c_int00" address: 003f8000
MEMORY CONFIGURATION
PAGE
PAGE
name
---------------------0: RESET
BOOT
PROG
origin
-------00000000
003f8000
003f8080
length
--------00000002
00000080
00001f80
used
-------00000002
00000046
000016e1
attr
---R
R
R
1: M0RAM
M1RAM
PIEVT
L0L1RAM
00000000
00000400
00000d02
00008000
00000400
00000400
000000fe
00002000
00000154
00000400
0000004e
00000da1
RW
RW
RW
RW
fill
--------
197
SISTEMAS EMPOTRADOS
Code Composer
Fichero de descripción del enlazado
*.map
SECTION ALLOCATION MAP
output
section
-------.reset
.boot
.cinit
.text
page
---0
0
0
0
attributes/
input sections
----------------
origin
---------00000000
00000000
length
---------00000002
00000002
003f8000
003f8000
00000046
00000046
rts2800_ml.lib : boot.obj (.text)
003f8080
003f8080
003f808e
003f8098
003f818f
003f81b7
003f81bb
0000013c
0000000e
0000000a
000000f7
00000028
00000004
00000001
rts2800_ml.lib :
:
:
:
:
--HOLE-- [fill =
003f81bc
003f81bc
003f8207
003f8210
…
000015a5
0000004b
00000009
0000005f
rts2800_ml.lib : exit.obj (.text)
: _lock.obj (.text)
CLOCK.obj (.text)
rts2800_ml.lib : boot.obj (.reset)
exit.obj (.cinit)
_lock.obj (.cinit)
defs.obj (.cinit)
lowlev.obj (.cinit)
memory.obj (.cinit)
0]
198
SISTEMAS EMPOTRADOS
Code Composer
Fichero de descripción del enlazado
*.map
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
address
-------00000400
00000000
003f81bc
003f81e2
003f931b
003f8c7e
003f8b32
003f8b5b
003f8be5
003f8c67
003f8c70
003f8d17
003f8d38
003f8ee2
003f8f2f
003f8f3e
003f8f59
003f8f4c
003f8f53
…
name
---.bss
.data
.text
C$$EXIT
C$$IO$$
FD$$ADD
FD$$CMP
FD$$DIV
FD$$MPY
FD$$NEG
FD$$SUB
FD$$TOI
FD$$TOL
FS$$TOFD
L$$DIV
L$$MOD
L$$TOFD
UL$$DIV
UL$$MOD
199
SISTEMAS EMPOTRADOS
Code Composer
Debugger
Gestiona la comunicación con el target mediante la interfase JTAG
Permite la carga de programas en el DSP
» Flash o RAM
Introducción de breakpoints
» Gestión de las dos unidades de análisis AU1 y AU2
breakpoints hardware
» Introducción de breakpoints software (si programa en RAM)
Visualización de memoria
» Programa
» Datos . Puede ser gráfica (visualización de señales)
» Vectores de interrupción
» Registros
Código fuente
Ejecución
» Paso a paso, ejecución indefinida, ejecución hasta una determinada posición
200
SISTEMAS EMPOTRADOS
eZdsp F2812
Es una tarjeta autónoma con un TMS320F2812
Características básicas
Reloj de 30 MHz
64K de memoria SRAM externa
Conexiones con el computador de desarrollo
» Conector JTAG
» Conector paralelo (puerto impresora)-JTAG
Conectores a un target
» Expansión de memoria
» Entradas/salidas digitales/periféricos
» Entradas analógicas
conversor AD
Diversas posibilidades de configuración mediante jumpers
201
SISTEMAS EMPOTRADOS
eZdsp F2812
Diagrama de bloques
202
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
GESTIÓN DE TIEMPO
203
SISTEMAS EMPOTRADOS
TIEMPO
Las necesidades con respecto al tiempo de un sistema empotrado son
fundamentalmente:
Medida del tiempo
» Tiempo absoluto
» Intervalos temporales
Activación con respecto al tiempo
» Actividades periódicas
» Actividades esporádicas
204
SISTEMAS EMPOTRADOS
TIEMPO
El tiempo es una magnitud física fundamental, cuya unidad en el SI es
el segundo.
Se necesitan dos tipos de medidas:
» Tiempo absoluto
» Tiempo relativo o intervalos de tiempo
El tiempo absoluto necesita un sistema de referencia
» escala de tiempo
» con un origen que se denomina época
Un sistema de tiempo real para medir el paso del tiempo puede:
» Acceder a un sistema de referencia externo (p.e. Señal UTC del GPS)
» Utilizar un reloj de hardware interno que proporciona una aproximación del
paso del tiempo en el entorno
205
SISTEMAS EMPOTRADOS
TIEMPO
Sistemas de referencia estándar
Astronómicos
» Tiempo universal (UT0):Tiempo solar en el meridiano Greenwich
» UT1, UT2: correcciones por el desplazamiento polar y por variaciones de la
velocidad de rotación de la Tierra
Atómicos
» Tiempo Atómico Internacional (IAT): Basado en un reloj atómico de cesio
» Tiempo Universal Coordinado (UTC): Reloj IAT sincronizado con UT2
mediante la adición de ticks ocasionales
206
SISTEMAS EMPOTRADOS
MEDIDA DEL TIEMPO
El tiempo en un computador se mide con:
Relojes
» Medida de tiempo absoluto
» Funcionan de forma continua
Temporizadores
» Medida de intervalos temporales
» Arranque y paro
Arranque
[
t1
∆t
Paro
Temporizador
]
t2
t
Reloj
∆t = t2-t1
207
SISTEMAS EMPOTRADOS
MEDIDA DEL TIEMPO
Reloj: es un módulo (de hardware y software) que proporciona el valor del
tiempo real cuando se lee.
Un reloj está compuesto por:
Una electrónica que genera eventos periódicos
» Oscilador
onda cuadrada (eventos = flancos de subida)
Un contador que acumula los eventos
Un software que convierte el valor del contador en unidades de tiempo
(segundos, minutos, ...).
Las características más importantes de un reloj son:
Precisión (granularidad). Depende de la frecuencia del oscilador y de la
forma de contar los impulsos.
Intervalo de valores. Depende de la precisión y de la capacidad del
contador.
208
SISTEMAS EMPOTRADOS
MEDIDA DEL TIEMPO
Unidad de tiempo: tick
El contador es de capacidad limitada
» desbordamiento -> reinicio cuenta
Tiempo
computador
tick
vida aplicación (t. no monótono)
tiempo
tiempo monótono, la aplicación tiene una vida menor que el tiempo
de desbordamiento.
tiempo no monótono, la aplicación vive más que el tiempo de
desbordamiento
209
SISTEMAS EMPOTRADOS
MEDIDA DEL TIEMPO
La monotonía del tiempo depende de:
el tiempo de vida de la aplicación
el tamaño del contador en relación con el tamaño del tick.
Problemas del tiempo no monótono
No se dispone del tiempo absoluto
» No se puede mantener fecha, hora, ...
No se pueden utilizar intervalos temporales por encima del tiempo de
desbordamiento del contador del reloj
210
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Para hacer un reloj necesitamos:
Una base de tiempos, el TICK
» Eventos periódicos que se cuentan: pulsos, interrupciones.
Un contador de ticks
Posibilidades en el 68HC08
Señal de reloj del BUS (2.4575 MHz) + contador de un timer TxCNT
divisor
resolución µs
desbordamineto ms
PS2-PS0
1
0,407
26,7
000
2
0,814
53,3
001
4
1,628
106,7
010
8
3,255
213,3
011
» Mucha precisión, poco rango temporal
16
32
64
6,510 13,021 26,042
426,7 853,3 1706,7
100
101
110
Interrupción periódica TBM (CGMXCLK = 4.9152 MHz) + contador
software
duración tick µs
TBR2-TBR0
1,6
111
3,3
110
6,5
101
13,0
100
26,0
011
416,7 1666,7 6666,7
010
001
000
» Tiempo de desbordamiento: depende del tamaño del contador
» Menor precisión, rango temporal ajustable
211
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Estructura del TBM
212
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Realización de un reloj basado en el TBM
Interrupción diseñada expresamente para este propósito
Parametrización de interrupción de reloj, TBI (Time Base Interrupt)
» Elección de la frecuencia
Activación de la interrupción
Programación de la rutina de interrupción
» Sumar uno al contador de ticks
Programación de las funciones de manejo y lectura del reloj
213
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Parametrización del TBM
y activación
Registro TBCR
» TBR2-TBR0
» TBIE
» TBON
ajuste TICK (tabla)
habilitación interrupción
activación del TBM
duración tick µs, CGMXCLK = 4.9 MHz
TBR2-TBR0
1,6
111
3,3
110
6,5
101
13,0
100
26,0
011
416,7 1666,7 6666,7
010
001
000
/* Tick de 1.66ms, 600Hz
Se supone seleccionado el reloj externo, no el PLL (BCS = 0)
CGMXCLK = 4.9152 MHz. Divisor de 8192 */
TBR2=0; TBR1=0; TBR0=1;
/* Activacion de las interrupciones y del TBM */
TBON=1;
TBIE=1;
asm cli ;
214
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Contador de ticks TBI a 1.66 ms
Variable global
Rango/monotonía: depende del tamaño
» 2 bytes (TBI a 1.66 ms) => 109 segundos
» 4 bytes (TBI a 1.66 ms) => 82 días
El incremento de una variable de 2 bytes más rápido que 4 bytes
Por ejemplo:
static unsigned int tick_counter ;
/* 2 bytes
desbordamiento en 109 segundos
si TBI 1.66 ms */
215
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Rutina de interrupción
Rearme de la interrupción
Incremento del contador
interrupt 17
vector de interrupción del TBM
void interrupt 17 Tick (void) {
TACK = 1 ;
tick_counter ++ ;
}
216
SISTEMAS EMPOTRADOS
Realización de un reloj (68HC08)
Funciones de manejo y lectura
/* clock.h */
#ifndef clock_h
#define clock_h
extern void Reset_Clock (void) ;
/* inicializacion y puesta a cero del contador */
extern void Start_Clock (void) ;
/* Puesta en marcha del reloj */
/* arranque de la interrupcion periodica del TBM */
extern void Stop_Clock (void) ;
/* Parada del reloj */
/* deshabilitacion de la interrupcion */
extern unsigned int Get_Time (void) ;
/* devuelve el valor del contador (tiempo) */
#endif
SISTEMAS EMPOTRADOS
Realización de un reloj (TMS320F2812)
Estructura de uno de los TIMERs (TMER 0)
217
218
SISTEMAS EMPOTRADOS
Realización de un reloj (TMS320F2812)
Utilización del Timer0
interrupt void Tick (void) {
SYSCLKOUT = 15 MHz
tick_counter ++ ;
PIEACK = 0x01;
/* Acknowledge PIE group 1 int */
return ;
void Reset_Clock (void) {
}
asm(" setc INTM
asm(" eallow
TIMER0TCR = 0x0010 ;
; Mask global interrupts");
; Enable accesses to PIE control registers");
/* Detener en TIMER0 */
TIMER0TPR = 14 ;
/*
/*
/*
/*
/*
TIMER0PRD = 9999 ;
PIEIER1 = 0x40;
PIECTRL |= 1;
tick_counter = 0 ;
TIMER0TCR = 0xC020 ;
IER = 0x01 ;
asm(" clrc INTM
asm(" edis
return;
}
14 + 1 ticks de SYSCLKOUT */
Cada tick del TIMER0 = 1 microsegundo */
Periodo = 10000 ticks = 10 ms */
Enable PIE int 1.7 */
Habilitacion global del PIE */
/* TIF = 1 borrado inicial del flag */
/* TIE = 1 habilitación de la interrupción */
/* TRB = 1 recarga del timer */
/* TSS = 0 TIMER0 en marcha */
/* Habilitacion de la INT1 */
; Enable global interrupts");
; Disable accesses to PIE control registers");
219
SISTEMAS EMPOTRADOS
MEDIDA DE INTERVALOS
Medida basada en un reloj
En el 68HC08 o en el TMS320F2812
t1 = Get_Time () ; /* instante de inicio */
/* espera hasta que se cumpla la condicion de fin */
...
t2 = Get_Time () ; /* instante de fin */
duracion_intervalo = t2 - t1 ;
Lectura
tiempo
[
t1
∆t
Lectura
tiempo
]
t2
∆t = t2 - t1
t
220
SISTEMAS EMPOTRADOS
MEDIDA DE INTERVALOS
Características de funcionamiento
» Funciona con reloj no monótono
» Periodos menores que el tiempo de desbordamiento
Ejemplo
» Espera pasando por desbordamiento
cuenta final
cuenta inicial
intervalo
t2 =
t1 =
- t1 =
t2 = $00EF
t1 = $FFF0
∆t = t2 - t1 = $00FF
0000 0000 1110 1111
1111 1111 1111 0000
0000 0000 0001 0000
t2 + (-t1) = 0000 0000 1111 1111
221
SISTEMAS EMPOTRADOS
MEDIDA DE INTERVALOS
Medida basada en un temporizador (timer)
En el 68HC08: utilización de los IC de los TIM
Ejemplo: Medida de la anchura de un pulso (TIM1, CHANNEL 0)
void Inicia_Mide_Pulso (void) {
fin_medida = 0 ;
flanco_subida = 1 ;
T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */
ELS0A_1 = 1 ; /* Sensible a la subida */
CH0IE_1 = 1 ; /* Activar interrupcion */
}
void interrupt 4 Pulso (void) {
if flanco_subida {
instante_subida = T1CH0 ;
flanco_subida = 0 ;
T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */
ELS0B_1 = 1 ; /* Sensible a la bajada */
CH0IE_1 = 1 ; /* Activar interrupcion */
}
else {
instante_bajada = T1CH0 ;
T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */
/* IC desactivado */
/* Interrupcion desactivada */
duracion = instante_bajada - instante_subida ;
fin_medida = 1 ;
}
}
void Main (void) {
...
Inicia_Mide_Pulso () ;
while !(fin_medida) ;
...
/* uso de la medida */
}
222
SISTEMAS EMPOTRADOS
ACTIVACIÓN DE ACCIONES PERIÓDICAS
Ejemplo bucle de control
while(1){
leer_entradas();
calcular_salidas();
emitir_salidas();
?????
}
¿cómo conseguir que el bucle se ejecute periódicamente con un periodo
prefijado?
Pb: El código ejecutado varía de una iteración a otra:
interrupciones
E/S
composición condicional
Dos posibilidades
Retrasos
Interrupción periódica
T
223
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: ESPERAS
Programación de
un bucle periódico
con un retraso:
void Periodica (void) {
unsigned int periodo = 25 ; /* periodo expresado en ticks */
unsigned int siguiente ;
Reset_Clock () ;
Start_Clock () ;
siguiente = Get_Time () ;
while(1) {
Actividad_Periodica () ;
siguiente += periodo ;
delay_until(siguiente) ;
}
}
Retraso basado en el reloj del sistema
68HC08: delay_until basado en el TBM
» Duración del periodo = número entero de ticks
–
Si tick = 1.66 ms
ticks)
Periodo 10 ms
9.66 ms (6 ticks) ó 11.62 ms (7
TMS320F2812: delay_until basado en el TIMER0
» Mayor flexibilidad en la elección del tick
224
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: ESPERAS
Función de espera en el módulo de reloj
Reloj no monótono =>
» Esperas menores que el tiempo de desbordamiento
» La condición de espera es: (T != tick_counter)
» La condición se debe verificar siempre que la cuenta del reloj cambie
void delay_until (unsigned int T) {
while (T != tick_counter)
asm WAIT ;
} /*68HC08*/
Reloj monótono =>
» La condición de espera es:
void delay_until (unsigned int T) {
while (T != tick_counter)
asm ("IDLE") ;
(T} >/*TMS320F2812*/
tick_counter)
» La condición no es preciso verificarla en cada tick
225
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: ESPERAS
68HC08
TMS320F2812
Se detiene la CPU para disminuir
el consumo: WAIT
Se detiene la CPU para disminuir
el consumo: IDLE
» WAIT = espera a la llegada de
una interrupción
» IDLE = espera a la llegada de una
interrupción
Desenmascara las
interrupciones
» Cuando llega una interrupción se
activa la CPU
–
» Cuando llega una interrupción se
activa la CPU
–
Se pasa a ejecutar la rutina
de interrupción
» Al acabar la rutina de interrupción
continúa la ejecución de la
aplicación
tick
WAIT
–
–
INTM=0
Se pasa a
ejecutar la rutina de
interrupción
INTM=1
Se ejecuta el
programa en la siguiente
instrucción del IDLE
226
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: ESPERAS
Problemas con el tiempo no monótono
¿Por qué no se hace una comparación de >?
Ejemplo: Contador de 1 byte
» siguiente += periodo => siguiente = 1
» La condición de espera es: (siguiente > tick_counter)
253
254
255
0
1
2
siguiente
Tick_counter = 253 > siguiente = 1
la aplicación se activa inmediatamente
3
t
227
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: ESPERAS
Problemas con el tiempo no monótono: comparación de igualdad
Ejemplo: Contador de 1 byte
siguiente += periodo => siguiente = 252
Dos casos
» Funcionamiento normal
» La actividad periódica no ha concluido antes de la siguiente activación
248
249
250
251
252
253
siguiente
254
t
Tick_counter = 253 > siguiente
tick_counter = 252 dentro de 254 ticks
228
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: INTERRUPCIONES
Activación basada en los OCs
HC08 y frecuencia de bus = 2.4575
MHz
periodo = 2s => ¡¡IMPOSIBLE!!
periodo = 10 ms
» tick del timer = 407 ns
» periodo < 26.7 ms
» 10 ms
» El periodo no puede ser mayor
que 1706.7 ms (tiempo máximo
de desbordamiento del timer pral.)
#include “timer_OCs.h”
void Periodica (void) {
unsigned int periodo = 24570 ;
Init_OC(periodo) ;
while(1) {
actividad () ;
comienzo = 0 ;
while (comienzo == 0)
; /* espera interrupcion */
}
}
OK
24.570 ticks (9.9999 ms)
229
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: INTERRUPCIONES
La rutina de interrupción
#include “timer_OCs.h”
/* timer_OCs.h */
volatile unsigned char comienzo ;
static unsigned int Periodo ;
void Init_OC(unsigned int N_Ticks) ;
void Init_OC(unsigned int N_Ticks)
{
Periodo = N_Ticks ;
MS0B_1 = 0 ; MS0A_1 = 1 ;
TSTOP_1 = 0 ; /* Arranca el TIM1 */
T1CH0 = T1CNT + Periodo ;
comienzo = 0 ;
CH0IE_1 = 1 ; /* Habilitacion de la interrupcion */
}
void interrupt 4 OutputCompare_Handler (void)
{
T1CH0 += Periodo ;
aux = T1SC0 ; /* Lectura T1SC0 */
CH0F_1 = 0 ; /* Borrar el flag CH0F */
comienzo = 1 ;
}
SISTEMAS EMPOTRADOS
ACTIVACIÓN PERIÓDICA: INTERRUPCIONES
Posibilidad de detectar desbordamientos de periodo
void interrupt 4 OutputCompare_Handler (void)
{
T1CH0 += Periodo ;
aux = T1SC0 ;
CH0F_1 = 0 ; /* Borrar el flag CH0F */
if (comienzo)
desbordamiento_de_periodo() ;
else
comienzo = 1 ;
}
230
231
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
Generación de un evento esporádico basado en:
Un temporizador basado en un reloj
Un temporizador dedicado
Activación del
temporizador
Expiración del
temporizador
∆t
Instante
actual
Instante de
activación
t
232
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
Mediante un temporizador basado en un reloj
El delay_until no puede utilizarse porque se detiene la aplicación
Programación de un temporizador
» Permite la ejecución de código mientras se espera
» La gestión se realiza dentro de la rutina de interrupción del reloj
–
La aplicación no se preocupa del temporizador
» Comunicación con la aplicación mediante un banderín
–
Expiración del temporizador
233
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
Gestión mediante tres variables
» Timer: instante temporal en que debe expirar el temporizador
» Active_timer: banderín que indica si se ha activado el temporizador
» TO: banderín que indica si ha expirado el timer
static char Active_Timer ;
static unsigned int Timer ;
static char TO ;
234
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
La nueva rutina de interrupción
#pragma interrupt_handler Tick
void Tick (void) {
TACK = 1 ;
tick_counter ++ ;
if (Active_Timer) /* gestion del temporizador */
if (Timer == tick_counter){
TO = 1 ;
Active_Timer = 0 ;
}
}
235
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
Manejo del temporizador desde la aplicación
» Programación de la
espera no bloqueante
void Set_Timer (unsigned int Ticks) {
Timer = tick_counter + Ticks ;
TO = 0 ;
Active_Timer = 1 ;
}
» Consulta del banderín
char Time_Out (void) {
return TO ;
}
» Eliminación de la espera
void Remove_Timer (void) {
Active_Timer = 0 ;
TO = 0 ;
}
236
SISTEMAS EMPOTRADOS
ACTIVACIÓN ESPORÁDICA
Mediante un temporizador dedicado
Utilización de los OCs
Ejemplo: Realización de un PWM
» Se verá en prácticas
237
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
SISTEMAS DISCRETOS
SECUENCIALES
238
SISTEMAS EMPOTRADOS
INTRODUCCIÓN
Sistema discreto secuencial: sistema dinámico cuyo estado sólo puede
adquirir un conjunto discreto de valores
CONTINUO
DISCRETO
CONTINUO
Sistemas
Continuos
o Analógicos
Sistemas Discretos
Secuenciales
Asíncronos
DISCRETO
TIEMPO
ESTADO
Sistemas de
Tiempo Discreto
o Muestreados
Sistemas Discretos
Secuenciales
Síncronos
239
SISTEMAS EMPOTRADOS
INTRODUCCIÓN
Tiempo continuo (sistemas asíncronos)
El estado del sistema puede
cambiar en cualquier instante en función de las entradas.
Tiempo discreto (sistemas síncronos)
El estado del sistema sólo
cambia ante la llegada de un evento de sincronización
» Señal de reloj
cada T segundos se leen las entradas y se evoluciona en
función de éstas y del estado.
» Evento de sincronización
validación, interrupción periférico, ...
Evento discreto: ocurrencia de una característica
en la evolución de una señal (flanco de subida,
paso por un cierto nivel, pulso, llegada de un dato, …).
Herramientas formales:
Autómatas de estados finitos
Redes de Petri
Eventos discretos
240
SISTEMAS EMPOTRADOS
CONCEPTO DE AUTÓMATA. MODELOS
Modelo de MEALY
Máquina de MEALY: Una máquina secuencial de tipo
MEALY es una 5-tupla M=(Q,I,O,δ,β) donde:
Q ≠ Ø es un conjunto finito de estados
I ≠ Ø es un conjunto finito de entradas (simbolos de …)
O ≠ Ø es un conjunto finito de salidas (simbolos de …)
δ: QxI → Q es la función de transición de estado
β: QxI → O es la función de salida
I
δ
β
Q
O
241
SISTEMAS EMPOTRADOS
CONCEPTO DE AUTÓMATA. MODELOS
Modelo MOORE
Máquina de MOORE: Una máquina secuencial de tipo
MOORE es una 5-tupla M=(Q,I,O,δ,λ) donde:
Q ≠ Ø es un conjunto finito de estados
I ≠ Ø es un conjunto finito de entradas (símbolos de …)
O ≠ Ø es un conjunto finito de salidas (símbolos de …)
δ: QxI → Q es la función de transición de estado
λ: Q → O es la función de salida
I
δ
Q
λ
O
242
SISTEMAS EMPOTRADOS
CONCEPTO DE AUTÓMATA. MODELOS
Ejemplo: Sumador binario serie de 1 bit
Dos entradas binarias x1 y x2
… 0 1 1 1 1
Una salida binaria y
x1
+
Modelo MEALY
Q = {q0,q1} donde
» q0 → estado de no acarreo
… 0 1 1 0 0
» q1 → estado de acarreo
Función de transición de estado:
» δ(q0,11) = q1
δ(q0,00/01/10) = q0
» δ(q1,00) = q0
δ(q1,10/01/11) = q1
Función de salida:
» β(q0,00/11) = 0
β(q0,01/10) = 1
» β(q1,00/11) = 1
β(q1,01/10) = 0
x2
y
… 1 1 0 1 1
243
SISTEMAS EMPOTRADOS
CONCEPTO DE AUTÓMATA. MODELOS
Modelo MOORE
Q = {q00,q01,q10,q11} donde
» q00 → estado de no acarreo con salida y=0
» q01 → estado de no acarreo con salida y=1
» q10 → estado de acarreo con salida y=0
» q11 → estado de acarreo con salida y=1
Función de transición de estado:
» δ(q00/q01 ,00) = q00
δ(q00/q01 ,11) = q10
» δ(q10/q11 ,00) = q01
δ(q10/q11 ,11) = q11
» δ(q00/q01 ,01/10) = q01 δ(q10/q11,01/10) = q10
Función de salida:
» λ(q00/q10) = 0
λ(q01/q11) = 1
244
SISTEMAS EMPOTRADOS
AUTÓMATAS. REPRESENTACIÓN Y MODELADO
Tabla de transición
Representación tabular de las funciones de transición de estado y
salida
Ejemplo: Sumador binario serie de 1 bit
» Modelo MEALY
q0
q1
00 01 11 10
q0,0 q0,1 q1,0 q0,1
q0,1 q1,0 q1,1 q1,0
>> Modelo MOORE
q00
q01
q10
q11
00
q00
q00
q01
q01
01
q01
q01
q10
q10
11
q10
q10
q11
q11
10
q01
q01
q10
q10
O
0
1
0
1
245
SISTEMAS EMPOTRADOS
AUTÓMATAS. REPRESENTACIÓN Y MODELADO
Diagrama de transición
Grafo cuyos nodos representan estados y los arcos cambios de estado.
Ejemplo: Sumador binario
serie de 1 bit
» Modelo MEALY
00/0
11/1
11/0
01,10/1
q0
q1
01,10/0
q10 /0
10,01
00/1
00
11
q00 /0
01,10
11
00
11
q01 /1
00
01,10
01,10
00
» Modelo MOORE
q11/1
11
246
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTOMATAS
Autómatas completamente especificados
Una vez construido un modelo:
» ¿Es posible reducir el número de estados?
–
↓ coste de una realización
–
↑ manejabilidad del modelo
Estados equivalentes: Dado un autómata de estados
finitos A=(Q,I,O,δ,λ), dos estados qi, qj ∈ Q se dicen
equivalentes ⇔ δ(qi,e) = δ(qj,e) ∀e ∈ I y λ(qi) =λ(qj).
(MEALY β(qi,e) = β(qj,e) ∀e ∈ I)
Dos estados equivalentes son INDISTINGUIBLES
El comportamiento del autómata a partir de cualquiera de los dos
estados es el mismo.
247
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
Ejemplo: Reconocedor de cadenas 101
x
...111011011
I: x={0,1}
...001001000
0/0
O: y={0,1} donde
» 0→
Rec.(101)
y
cadena
no reconocida
» 1 → cadena reconocida
NADA
1/0
1/0
1
1/0
0/0
0/0
0/0
Estados:
NADA
nada reconocido
1
subcadena 1 reconocida
10
subcadena 10 reconocida
101
cadena 101 reconocida
10
1/1
101
248
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
0
NADA
10
NADA
NADA
NADA
1
10
101
1
0
0
0
0
0
1
0
0
1
0
NADA
10
10
101
1
1
1
101
1
101 --> NADA
EQ.
NADA
10
NADA
1
10
249
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
NADA
1
10
0
NADA
10
NADA
0/0
NADA
1
1
1
NADA
0
0
0
0
1
0
0
1
1/0
1/0
1
0/0
1/1
0/0
10
250
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
Autómatas incompletamente especificados
Ejemplo: Detector de coches en sentido contrario
» Especificar un sistema que permita detectar vehículos que circulan en
dirección contraria por una autovía. Dicho sistema tendrá dos entradas e1 y
e2 que serán las señales de dos células fotoeléctricas situadas a una
distancia menor que que la longitud del vehículo y la separación entre
vehículos.
e2
e1
q1
q2
q3
q4
q5
q6
q7
251
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
q1
q2
q3
q4
q5
q6
q7
00
q1
q1
q1
01
q5
q4
q4
q5
-
11
q3
q3
q6
q6
-
10
q2
q2
q7
q7
S
1
1
1
1
0
0
0
Estados compatibles: Dado un autómata de
estados finitos A=(Q,I,O,δ,λ) incompletamente
especificado, se dice que dos estados
qi, qj ∈ Q son compatibles qi ~ qj ⇔
∀e ∈ I tal que δ(qi,e) y δ(qj,e) están
especificadas ⇒ δ(qi,e) = δ(qj,e) ó
δ(qi,e) ~ δ(qj,e)
(2) λ(qi) = λ(qj) si ambas están
(1)
especificadas
252
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
Relación de compatibilidad
Reflexiva, simétrica
NO transitiva
Clase de compatibilidad
Elementos que cumplen la propiedad transitiva
Los estados de una clase de compatibilidad pueden llegar a ser
equivalentes
Reducción
Búsqueda de clases de compatibilidad
Especificación estados = problema de cobertura
253
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
Obtención de compatibles máximos
Construcción de la tabla de parejas compatibles
Algoritmo
(1) Crear una lista de compatibles (L) con los pares de elementos compatibles definidos por
la columna k (la que está más a la derecha con al menos un par compatible)
(2) Para i:= k - 1 hasta i = 1
Si Ci ≠ ∅ entonces
2.1 Realizar la intersección entre Ci y los elementos de L
2.2 Añadir a L los compatibles formados por el resultado de las intersecciones
no nulas más el elemento i, así como los pares de compatibles definidos
por la columna i-ésima
2.3 Suprimir de L los conjuntos contenidos en otros
(3) Añadir a L todos los elementos del conjunto de partida que no estén contenidos en
ningún elemento de L
254
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
C1 C2
q1 x
q2 x x
q3
x
q4
x
q5
q6
q7
q2
q3
q4
q5
q6
q7
q1
6
5
4
3
2
1
q2 q3
q4
q5
C3
x
x
x
q6
(q6 q7)
(q6 q7) (q5 q6) (q5 q7) → (q5 q6 q7)
(q5 q6 q7)
(q5 q6 q7) (q3 q4)
(q5 q6 q7) (q3 q4) (q2 q4) (q2 q3) → (q5 q6 q7) (q2 q3 q4)
(q5 q6 q7) (q2 q3 q4) (q1 q2)
255
SISTEMAS EMPOTRADOS
REDUCCIÓN DE AUTÓMATAS
q1 → C1 (sistema en reposo)
q2,q3,q4 → C2 (coche en sentido permitido)
q5,q6,q7 → C3 (coche en sentido contrario)
C1
C2
C3
00
C1
C1
C1
01
C3
C2
C3
01,11,10
C3/0
11
C2
C3
10
C2
C2
C3
00,11
00
01
C1/1
01,11,10
10
00
C2/1
S
1
1
0
256
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Entradas
Eventos de sincronización
el sistema
» Reloj
espera a su llegada para que evolucione
Autómata implementado como actividad periódica
» Sincronización
Interrupción
Entradas de nivel
» Lectura asíncrona
–
Las entradas se leen conforme se vayan necesitando en el tratamiento
–
PB: aleatoriedades
» Lectura síncrona
–
Se leen todas las entradas a la vez
–
Memoria Imagen
257
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Ejemplo aletoriedad
0
1
0
1
e1
e2
if (e1) {
if (e2) {...}
else {...}}
else {
if (e2) {...}
else {...}}
¿¡01!?
258
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Salidas
Impulsionales o acciones
» Asociadas a cambios de estados / Modelo MEALY
De nivel o mantenidas
» Asociadas a estados / Modelo MOORE
Generación
» En el instante en que se calculan (asíncrona)
» Todas al final del tratamiento (síncrona)
er
em
qi/oj
es
em/clear(oj)
er/set(oj)
qi
en
es/set(oj)
en/clear(oj)
259
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Ej.: Detector sentido contrario
Moore
Asíncrono
01,11,10
C3/0
00,11
00
01
C1/1
01,11,10
10
C2/1
00
void main (void) {
C1:
Genera (NO_ALARMA) ;
Entrada = Leer_Entrada () ;
if (Entrada == I01) goto C3 ;
if (Entrada == I10) goto C2 ;
goto C1 ;
C2:
Genera (NO_ALARMA) ;
Entrada = Leer_Entrada () ;
if (Entrada == I00) goto C1 ;
goto C2 ;
C3:
Genera (ALARMA) ;
Entrada = Leer_Entrada () ;
if (Entrada == I00) goto C1 ;
goto C3 ;
return ;
}
Pb. código no estructurado => difícil de poner
a punto y mantener
CICLO DE TRATAMIENTO
260
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Ciclo de tratamiento
Ej.: Detección
sentido contrario
» MOORE
» Entradas nivel
muestreadas
(síncronas)
» Salidas
asíncronas
void main (void)
{
while (TRUE)
{
Entrada = Leer_Entrada () ;
switch (Estado)
{
case C1 : Genera (NO_ALARMA) ;
switch (Entrada) {
case I01 : Estado = C3 ; break
case I10 : Estado = C2 ; break
default : }
break ;
case C2 : Genera (NO_ALARMA) ;
if (Entrada == I00) Estado = C3
break ;
case C3 : Genera (ALARMA) ;
if (Entrada == I00) Estado = C1
break ;
}
}
return ;
}
;
;
;
;
261
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Ej: reconocedor de cadenas: MEALY, Evento de sincronización, Salidas
síncronas
0/0
1/0
void main (void)
{
1/0
while (TRUE)
NADA
1
{
Espera_Sincronismo () ;
0/0
Entrada = Leer_Bit () ;
1/1
switch (Estado)
{
case NADA : if (Entrada==0) {Salida=0; Estado=NADA;}
else if (Entrada==1) {Salida=0; Estado=E1;}
break ;
case E1 :
if (Entrada==0) {Salida=0; Estado=E10;}
else if (Entrada==1) {Salida=0; Estado=E1;}
break ;
case E10 : if (Entrada==0) {Salida=0; Estado=NADA;}
else if (Entrada==1) {Salida=1; Estado=E101;}
break ;
case E101 : if (Entrada==0) {Salida=0; Estado=NADA;}
else if (Entrada==1) {Salida=0; Estado=E1;}
}
Genera (Salida) ;
}
return ;
}
0/0
10
262
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Reconocedor de cadenas con entrada de validación
Implementación en el HC08
void Espera_Sincronismo (void)
{
char sinc = 0 ;
while (!sinc) asm WAIT ;
}
IRQ
Salida
0/1
PTC0
void interrupt 2 Manejador_IRQ (void)
{
sinc = 1 ;
}
char Leer_Bit (void)
{
return (char)PTC0 ;
}
263
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Autómata síncrono periódico
P.e. basado en el TBM
void main (void)
{
Inicializacion () ;
Reset_Clock () ;
Start_Clock () ;
Siguiente = Get_Time () ;
while (TRUE)
{
/* Espera_Sincronismo */
Siguiente = Siguiente + T ;
delay_until (Siguiente) ;
Entrada = ... ;
switch (Estado)
{
case ... : ...
...
}
Genera (Salida) ;
}
return ;
}
264
SISTEMAS EMPOTRADOS
AUTÓMATAS. IMPLEMENTACIÓN
Time-out: TOi
ESPERA
ei
TIME-OUT
Implementación
Set_Timer(Toi)
ESPERA
ei /Remove_Timer()
Time_Out()
265
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
Ejemplo: Carros que van y vienen
sincronizados
l1
r1
T1
A
M
r2
l2
Al pulsar M ambos carros se
desplazan a la derecha. El regreso lo
hacen simultáneamente cuando
ambos carros se encuentren en el
extremo derecho.
T2
C
A
MAC
Autómata:
2
B
3
4
D
A
l2
r1 , r2
D
B
5
6
D
1
C
r2
B
l1 , l2
C
l1
7
r1
266
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
1
Tres carros
MACE
r1 , r 2 , r 3
2
B
r2 , r 3
3
D
D
6
7
C
13
11
A
E
l3
r1
8
E
l1 , l 3
E
14
A
l1 , l 2 , l 3
C
l2 , l 3
D
B
9
10
r2
D
A
r1 , r 2
5
B
F
r3
F
r1 , r 3
4
B
F
F
l2
12
A
l1 , l 2
C
15
l1
C
E
267
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
Para N carros → 2N+1 - 1 estados
Problemas del modelado con autómatas de estados finitos de sistemas
con evoluciones paralelas (sistemas concurrentes):
conduce a descripciones complejas (gran número de estados)
no permite modificaciones locales del comportamiento del sistema →
poca flexibilidad (Ej.: uno de los carros vuelve sin sincronizarse)
268
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
Una red de Petri (RdP) es un grafo orientado con dos clases de nodos:
lugares (circunferencias) y transiciones (barras). Los arcos unen un lugar
con una transición o viceversa.
Un lugar pude contener un número positivo o nulo de marcas. Distribución
de marcas en los lugares, marcado → estado de la RdP.
Se asocian entradas y salidas a lugares y transiciones (p.e.: salida → lugar
marcado; entrada → transición)
p
1
t1
p
p
2
3
t
t3
2
p
p5
4
t
4
269
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
Evolución de una RdP:
Una transición está sensibilizada si todos sus lugares de entrada están
marcados
Transición sensibilizada => puede disparar
Disparo => evolución del estado: Retirada de una marca de cada lugar
de entrada, depósito de una marca en cada lugar de salida
t1
t1
t2
t2
t3
t3
270
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
Ejemplo: Carros que van y vienen sincronizados
r2
r1
B
D
2 carros
l2
l1
A
C
M
271
SISTEMAS EMPOTRADOS
RdP. INTRODUCCIÓN
r2
r1
r3
D
B
F
3 carros
l1
l2
A
l3
C
E
M
SISTEMAS EMPOTRADOS
RdP. FORMALIZACIÓN Y CLASIFICACIÓN
Red de Petri (RdP): es una cuádrupla R = {P, T, α, β} tal que
P es un conjunto finito y no vacío de lugares
T es un conjunto finito y no vacío de transiciones
P∩T=Ø
α:P x T → N es la función de incidencia previa
β:T x P → N es la función de incidencia posterior
RdP marcada: es un par {R, Mo}, donde R es una RdP y Mo es un
marcado inicial.
272
273
SISTEMAS EMPOTRADOS
RdP. FORMALIZACIÓN Y CLASIFICACIÓN
Representación gráfica
Arco de pi a tj ⇔ α(pi,tj) ≠ 0
Arco de tk a pi ⇔ β(tk,pi) ≠ 0
Arcos etiquetados con un peso = α(pi,tj) ó β(tk,pi)
Representación matricial
Matriz de incidencia previa: C- = [cij-] donde cij- = α(pi,tj)
Matriz de incidencia posterior: C+ = [c +] donde c + = β(t ,p )
ij
ij
j
Matriz de incidencia: C = C+ - Cp1
t1
p1 ⎡− 1 0
1 ⎤
p2 ⎢ 1
0 − 1⎥
⎥
C= ⎢
p3 ⎢ 2 − 1 0 ⎥
⎢
⎥
p4 ⎣ 0 1 − 2 ⎦
2
p3
p2
t2
p4
t3
2
i
SISTEMAS EMPOTRADOS
274
RdP. FORMALIZACIÓN Y CLASIFICACIÓN
Clases de RdP
RdP ordinaria: sus funciones de incidencia sólo pueden tomar los
valores 0 y 1: α(p,t) ∈ {0,1}, β(t,p) ∈ {0,1}
» RdP binaria: M(p) ≤ 1 ∀p∈P
RdP generalizada (RdPG): las funciones de incidencia pueden tomar
valores en todos los números naturales => arcos con peso
RdP con arcos inhibidores:
275
SISTEMAS EMPOTRADOS
RdP. INTERPRETACIÓN
Entradas (eventos discretos,
condiciones lógicas externas), salidas
(eventos discretos, salidas a nivel),
código asociado a las transiciones.
abc
Acc. impulsionales asociadas a
transiciones => disparo
instantáneo
señal
set(s)
abc
Código/actividades en
transiciones => disparo no
instantáneo
a
b
c
evento
---------- w
-------
s
a
b
c
276
SISTEMAS EMPOTRADOS
RdP. EJEMPLOS DE MODELADO
Ejemplo: Carros con
vía común
MA
lA
LA
MB
LB
A
rA
WA G
WB
lB
rB
MU
B
U
Dos carros A y B transportan cierto material desde los puntos de carga LA y
LB, respectivamente, hasta el punto de descarga D. Los diferentes
movimientos son controlados mediante las señales lA, lB, rA, rB. Si A está en
LA y el pulsador MA está oprimido, comienza un ciclo LA-U-LA:
espera eventual en WA hasta que la zona común a los dos carros esté
libre, con el fin de evitar colisiones;
espera obligatoria en U hasta MU (pulsador de fin de descarga).
El carro B tiene un funcionamiento similar pero, en caso de demanda
simultánea de la vía común, B es prioritario. El recorrido WA-U o WB-U se
establece por un cambio de agujas controlado por la acción G.
277
SISTEMAS EMPOTRADOS
RdP. EJEMPLOS DE MODELADO
Transiciones -> entradas de
sensores
Lugares -> señales de salida
MA
MB
rB
rA
WA
WB
WB
G, rA
rB
U
U
G
MU
MU
G, lA
lB
WB
WA
lB
lA
LA
LB
278
SISTEMAS EMPOTRADOS
RdP. EJEMPLOS DE MODELADO
Ejemplo: Productor-consumidor
Se desea diseñar un sistema de transmisión de datos con las siguientes
características:
El sistema recibe datos (8 bits) de un puerto paralelo (p.e. PTB del
68HC08), pulso de validación con un IC.
Cada dato es procesado e introducido en un buffer con capacidad para
8 datos
Los datos son sacados del buffer con política FIFO y enviados por línea
serie (SCI) mediante un sencillo protocolo con reenvío
PTB
T
DATO
SCI
IC
ACK/NACK
279
SISTEMAS EMPOTRADOS
RdP. EJEMPLOS MODELADO
NACK
P1
TC51
TP1 llegada_dato
leer()
TC52
C4
enviar()
procesar()
TC3
C3
P3
H
TP3
sacar()
P4
TP4
ACK
llegada_caracter TC4
P2
TP2
C5
MUTEX
TC2
C2
meter()
O
TC1
C1
280
SISTEMAS EMPOTRADOS
RdP. IMPLEMENTACIÓN
Implementación programada de una RdP: Es un programa o algoritmo
que simula el disparo de transiciones de la RdP, respetando la reglas de
evolución del modelo teórico.
Entradas
Eventos -> espera a su llegada para que evolucione el sistema
» Muestreo / Interrupción
Entradas de nivel
» Lectura asíncrona
–
Las entradas se leen conforme se vayan necesitando en el tratamiento
–
PB: aleatoriedades
» Lectura síncrona
–
Se leen todas las entradas a la vez
–
Memoria Imagen
281
SISTEMAS EMPOTRADOS
RdP. IMPLEMENTACIÓN
Salidas
Impulsionales o acciones
» Asociadas al disparo
de transiciones
T1
T1/activar(s1,s2)
De nivel o mantenidas
» Asociadas a lugares
marcados
Generación
» En el instante en que
se calculan (asíncrona)
» Todas al final del
tratamiento (síncrona)
s1,s2
T2
T2/desactivar(s2)
s1
T3
T3/desactivar(s1)
282
SISTEMAS EMPOTRADOS
RdP. IMPLEMENTACIÓN
Código
Asociado al disparo de transiciones
» Disparo no instantáneo
DISPARO TRANSICIÓN T:
Retirar_Marcas(Lugares_de_entrada_de_T) ;
Código_asociado (T) ;
Poner_Marcas(Lugares_de_salida_de_T);
}
283
SISTEMAS EMPOTRADOS
RdP. IMPLEMENTACIÓN
INTERPRETADA
SECUENCIAL
COMPILADA
CONCURRENTE
284
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Ejemplo: Carros con vía común
1ª aproximación
typedef unsigned char MARCADO[NUMLUG] ;
MARCADO M ;
MARCADO Sig_M = {1,1,1,0, ...} ; ...
void main (void) {
Inicializacion () ;
while (TRUE) {
memcpy (&M, &Sig_M, sizeof(M)) ;
Generacion_Salidas (M) ;
Lectura_Entradas (&MA, &MB, ...) ;
/* T0 */
if (M[0] >= 1) {
» NOTA: los arrays en C comienzan
if (MA) {
siempre en
Sig_M[0] -= 1 ; Sig_M[13] += 1 ;
el índice 0
}
}
/* T1 */ ...
/* T2 */
if ((M[2] >= 1) && (M[3] >= 1)) {
if (~WB) {
Sig_M[3] -= 1 ; Sig_M[2] -= 1 ;
M[2] -= 1 ; /* conflicto? */
Sig_M[5] += 1 ;
}
}
/* T3 */ ...
}
}
285
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Características de la primera aproximación:
Compilada
» Se genera un programa cuyo flujo de control reproduce el comportamiento
de la RdP
Secuencial
» Un solo proceso
Problemas
En cada ciclo de tratamiento se verifican todas las transiciones
» Sólo unas pocas están sensibilizadas
Mucho código
Cambio en la red => cambio en el código
286
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Ejemplo: Carros
con vía común
Implementación
interpretada
#define NUMLUG 15
#define NUMTRANS 14 ...
unsigned char M[NUMLUG] = {1,1,1,0, ...} ;
unsigned char Sig_M[NUMLUG] = {1,1,1,0, ...} ;
/*Estructura de datos que codifica la RdP */
...
void main (void) {
Inicializacion () ;
while (TRUE)
{
memcpy (M, Sig_M, sizeof(M)) ;
Generacion_Salidas (M) ;
Lectura_Entradas (&MA, &MB, ...) ;
for (T=0;T <= (NUMTRANS-1); T++) {
if (Sensibilizada (T)) {
if (Condicion(T)) {
Retirar_Marcas (Sig_M, T) ;
Retirar_Marcas (M, T) ;
Accion (T) ;
Poner_Marcas (Sig_M, T) ;
}
}
}
}
}
287
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Características:
Interpretada
Secuencial
El ciclo de tratamiento es independiente de:
» la estructura de datos que codifique la red
» la red concreta que se implemente => código genérico
La ocupación en memoria y prestaciones dependerán en gran medida
de la estructura de datos utilizada para codificar la RdP
288
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Estructura de datos de la red
Representación basada en listas
Disminución del tiempo de ejecución
» Incidencia previa para la sensibilización
» Incidencia previa y posterior para la actualización del marcado
Manejo de listas
» Memoria dinámica: basada en punteros
–
rutinas de librería de manejo de memoria dinámica (malloc, free)
–
difícil de poner a punto
» Memoria estática: basada en vectores
–
mayores prestaciones
–
más compacto
289
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Un ejemplo de estructura de
datos basada en listas
implementadas en memoria
estática
#define fin 0xFF ;
void Accion0 (void);
char Condiccion0(char entrada[]); ...
CONST
CONST
CONST
CONST
CONST
CONST
ARCO
ARCO
ARCO
ARCO
ARCO
ARCO
typedef struct {
unsigned char Lugar ;
unsigned char Peso ;
} ARCO ;
typedef struct {
CONST ARCO *Lugares_Entrada ;
CONST ARCO *Lugares_Salida ;
void (*Accion) (void);
char (*Condicion)(char entrada[]);
} T_TRAN ;
T0_In[]={{0,1},{fin,0}} ;
T0_Out[]={{1,1},{2,2},{fin,0}} ;
T1_In[]={{2,1},{fin,0}};
T1_Out[]={{3,1},{fin,0}} ;
T2_In[]={{1,1},{3,2},{fin,0}};
T2_Out[]={{0,1},{fin,0}} ;
/* 0 1 2 3 */
static unsigned char M[NLUGARES]
={1,0,0,0};
static unsigned char Sig_M[NLUGARES]={1,0,0,0};
p
t
0
0
2
p
p
t
1
p
CONST T_TRAN TRAN[NUMTRANS] =
{{T0_In, T0_Out, Accion0, Condiccion0}
{...}
...}
;
t
2
2
2
1
3
290
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
El algoritmo de interpretación
void main (void) {
Inicializacion () ;
while (TRUE)
{
memcpy (M, Sig_M, sizeof(M)) ;
Generacion_Salidas (M) ;
(*Lectura_Entradas)(&entrada) ;
for(t=0; t<= (NUMTRANS-1); t++){
if(Sensibilizada(Trans[t],M) && (*Trans[t].Condicion)(entrada)){
Retirar_Marcas(Trans[t],Sig_M) ;
/*
Retirar_Marcas(Trans[t],M) ; Si existen conflictos efectivos */
(*Trans[t].Accion)();
Poner_Marcas(Trans[t],Sig_M);
}
}/* fin if disparo de una transicion*/
}/* fin for que recorre las transiciones
}/*fin bucle interpretación de la red
}
291
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Manejo estructura
char Sensibilizada(T_TRAN Tran, const unsigned char M[]){
int p;
char Sensib = 1;
p=0;
while((Tran.Lugares_Entrada[p].Lugar != fin) && Sensib==1){
if (M[Tran.Lugares_Entrada[p].Lugar] < Tran.Lugares_Entrada[p].Peso)
Sensib = 0;
void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) {
p++;
int p;
}
return Sensib ;
p=0;
}
while((Tran.Lugares_Entrada[p].Lugar != fin)){
M[Tran.Lugares_Entrada[p].Lugar] -=
Tran.Lugares_Entrada[p].Peso;
p++;
}
}
void Poner_Marcas(T_TRAN Tran, unsigned char M[]) {
...
M[Tran.Lugares_Salida[p].Lugar] +=
Tran.Lugares_Salida[p].Peso;
...
}
292
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Redes con arcos unitarios
(RdP ordinarias)
typedef struct {
CONST char *Lugares_Entrada ;
CONST char *Lugares_Salida ;
void (*Accion) (void);
char (*Condicion)(char entrada[]);
} T_TRAN ;
void Accion0 (void);
char Condiccion0(char entrada[]); ...
CONST
CONST
CONST
CONST
CONST
CONST
char
char
char
char
char
char
T0_In[]={0,fin} ;
T0_Out[]={1,2,fin} ;
T1_In[]={2,fin};
T1_Out[]={3,fin} ;
T2_In[]={1,3,fin};
T2_Out[]={0,fin} ;
/* 0 1 2 3 */
static unsigned char M[NLUGARES]
={1,0,0,0};
static unsigned char Sig_M[NLUGARES]={1,0,0,0};
CONST T_TRAN TRAN[NUMTRANS] =
{{T0_In, T0_Out, Accion0, Condiccion0}
{...}
...}
;
p0
t0
p2
p1
t1
p3
t2
293
SISTEMAS EMPOTRADOS
VERIFICACIÓN EXHAUSTIVA
Manejo estructura
char Sensibilizada(T_TRAN Tran, const unsigned char M[]){
int p;
char Sensib = 1;
p=0;
while((Tran.Lugares_Entrada[p] !=fin) && Sensib==1){
if (M[Tran.Lugares_Entrada[p]] < 1)
Sensib = 0;
p++;
void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) {
}
int p;
return Sensib ;
}
p=0;
while((Tran.Lugares_Entrada[p] !=fin)){
M[Tran.Lugares_Entrada[p]] -- ;
p++;
}
}
void Poner_Marcas(T_TRAN Tran, unsigned char M[]) {
...
M[Tran.Lugares_Salida[p]] ++ ;
...
}
SISTEMAS EMPOTRADOS
294
IMP. DIRIGIDA POR EL MARCADO
Resolución del problema de la verificación exhaustiva de la sensibilización
de transiciones
VERIFICACION SELECTIVA
Sólo son tratadas aquellas transiciones con posibilidad de estar
sensibilizadas
» IMPLEMENTACION DIRIGIDA POR EL MARCADO
Método de los lugares representantes marcados
Cada transición es representada por uno de sus lugares de entrada
Sólo aquellas transiciones cuyo lugar representante esté marcado se
consideran candidatas al disparo
Un lugar de entrada a una transición y que no sea su representante se
denomina lugar de sincronización
Fase previa: obtención del conjunto de lugares representantes y de
sincronización
295
SISTEMAS EMPOTRADOS
IMP. DIRIGIDA POR EL MARCADO
Elección de lugares representantes
Representantes esenciales
¿Partición representantes/sincronización?
r2
r1
B
D
p2
p1
t1
t2
t3
p3
p4
p5
t4
t5
t6
l2
l1
A
C
M
296
SISTEMAS EMPOTRADOS
IMP. DIRIGIDA POR EL MARCADO
Un ejemplo
void Accion1 (void);
char Condiccion1(char entrada[]); ...
p3
p0
p4
CONST ARCO T0_Lugares_Sinc[] ={3,fin};
t0
t1
CONST ARCO T0_Lugares_Salida[]={1,fin};
p1
p2
CONST ARCO T1_Lugares_Sinc[] ={4,fin};
CONST ARCO T1_Lugares_Salida[]={2,fin};
CONST T_TRAN LR0[3] =
{{0, T0_Lugares_Sinc, T0_Lugares_Salida,
t3
t2
Accion1, Condiccion1},
{1, T1_Lugares_Sinc, T1_Lugares_Salida,
Accion2, Condiccion2},
{fin,...}};
...
typedef unsigned char ARCO;
CONST T_TRAN LR1[2] = ... ;
...
typedef struct{
CONST T_TRAN LR2[2] = ... ;
CONST unsigned char Trans ;
CONST ARCO *Lugares_Sincronizacion ;
CONST T_REPRESENTANTE Lug[NREPRESENTANTES] =
CONST ARCO *Lugares_Salida;
{LR0, LR1, LR2} ;
void (*Accion) (void);
char (*Condiccion)(char entrada[]);
}T_TRAN;
typedef T_TRAN *T_REPRESENTANTE ;
297
SISTEMAS EMPOTRADOS
IMP. DIRIGIDA POR EL MARCADO
...
while(1){
memcpy (M_Sinc, Sig_M_Sinc, nLugaresSinc+1) ;
(*Leer_Entrada)(entrada);
while (Hay_Reprentante(P_Tratamiento)){
P = Desapila (P_Tratamiento) ;
i = 0 ; T = Lug[p][i] ;
while (T.Trans != fin) {
if (Sensibilizada(T,M_Sinc) &&
(*T.Condiccion)(entrada)){
Retirar_Marcas(T,Sig_M_Sinc);
Retirar_Marcas(T,M_Sinc);
(*T.Accion)();
Poner_Marcas(...);
}
else
Apilar (P_Formacion, P) ;
i ++ ; T = Lug[p][i] ;
}
}
Intercambia (P_Tratamiento, P_Formacion) ;
}
p4
p0
p3
t0
t1
p1
p2
t3
t2
p3 true
p4 true
(M_Sinc)
0
(P_Tratamiento)
RdP binaria
298
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
SISTEMAS
MUESTREADOS
299
SISTEMAS EMPOTRADOS
COMPUTADOR Y MUNDO ANALÓGICO
Tratamiento digital de la señal
señal
analógica
señal
muestreada
x(t)
señal
digital
codificada
señal
digital
codificada
señal
contínua
cuantificada
y(t)
0111
0110
0011
0110
0111
0110
x(kT)
señal
discreta
cuantificada
y(kT)
T
Muestreador
Codificador
Decodificador
Algoritmo
Conversor A/D
Bloqueador
Conversor D/A
Esquema simplificado
x(t)
x(k)
y(k)
y(t)
Bo
T
Muestreador
Algoritmo
Bloqueador
300
SISTEMAS EMPOTRADOS
COMPUTADOR Y MUNDO ANALÓGICO
Aplicaciones
Telefonía y radio digital
Registradores de señales
Monitorización de pacientes
Alta fidelidad
Control
...
e(k)
yd(k) +
u(k)
u(t)
y(t)
Bo
-
Algoritmo
de control
y(k)
COMPUTADOR
Bloqueador
T
Proceso
y(t)
Muestreador
Sensor
301
SISTEMAS EMPOTRADOS
COMPUTADOR Y MUNDO ANALÓGICO
Señales discretas y muestreadas
Señales discretas: p.e. generadas por un computador
Señales muestreadas: una señal continua al ser muestreada da lugar a
una señal discreta
MUESTREADOR
período T
• •
•
T
•
•
•
al computador
Señal discreta --> representada por una secuencia {xk}
p.e.
{xk} = {0, 1.5, 1.66, 2, 2.77,…}
Algoritmo del computador: ecuaciones en diferencias :
x(k+1) = a x(k) + b x(k-1) + c x(k-2) + d u(k)
Ecuaciones en diferencias = transformador de secuencias
Análisis y diseño
Transformada en Z
302
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Muestreo-conversión analógica-digital (CAD)
x(t)
0110
x(kT)
T
void main(void)
{
Init();
Siguiente = Get_Time () ;
Muestreador
while(1) {
ADSCR=0x00;
/*Inicio de la conversion AD*/
while(!COCO); /*Espera fin conversion*/
Valor = ADC ; /*Lectura dato y borrado COCO */
Resultado = Procesado (Valor) ;
....
Siguiente = Siguiente + T ;
delay_until (Siguiente) ;
}
}
Codificador
bloqueador
COMPUTADOR
Ejemplo en HC08:
•Conversión única
•No interrupciones
•Inicio por software
0110
señal
codificada
cuantificada
señal
muestreada
0111
señal
analógica
303
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Posibilidades muestreo
Arranque de la conversión
» A petición de la aplicación
» Señal externa de sincronización
» Iniciativa del módulo
–
Conversión continua
–
Conversión periódica
en el 2812)
necesidad de una base de tiempos (p.e. EV
Fin de conversión y transferencia del dato
» Aplicación
convertido
» Interrupción
» DMA
lectura del flag de fin de conversión y lectura del dato
la lectura la hace la rutina de interrupción
el propio periférico deja los datos convertidos en memoria
304
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Teorema de muestreo (Shannon)
Una señal continua x(t) cuya transformada de Fourier X(ω) sea de
banda limitada (ωs), estará completamente determinada por la
secuencia {xk} obtenida por el muestreo de la misma si:
ωm ≥ 2ω s ⇒ T ≤
π
ωs
» Si ωm > 2ωs: reconstrucción perfecta por filtrado paso bajo (amplitud: T)
» Si ωm < 2ωs: no se puede reconstruir
» En la práctica existen señales de las que no se puede decir que sean de
banda limitada: se hablará de muestreo aceptablemente rápido (10 a 100
veces la ω más significativa)
305
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Ejemplo:
Sistema con ωd = 0.25 Hz
Muestreo con ωm = 10 Hz y con ωm = 0.33 Hz
Muestreo con T=0.1 y con T=3
0.18
0.16
0.14
0.12
0.1
0.08
0.06
0.04
0.02
0
0
1
2
3
4
5
t
6
7
8
9
306
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
RECONSTRUCCIÓN
Transformación de una secuencia (señal discreta) en una señal
continua aceptable por el sistema receptor de la señal.
Conversión digital-analógica (CDA) - bloqueador
señal
discreta
cuantificada
señal
digital
codificada
señal
continua
cuantificada
x(t)
0110
0111
0110
x*(kT)
Decodificador
COMPUTADOR
Bloqueador
307
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Interpoladores:
interpolación lineal
reconstrucción
señal interpolada
•
•
•
•
kT (k+1)T
Para generar la recta hay que conocer el valor de x*((k+1)T) en el
instante k
En la práctica se utilizan retrasando uno o varios períodos de muestreo
la reconstrucción
308
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCIÓN
Bloqueadores: extrapoladores
Realizan la reconstrucción en un instante con información anterior a él:
realizable
Planteamiento: conocidos x(kT), x((k-1)T), …, hay que construir una
función continua que aproxime lo más posible la señal hasta el nuevo
valor x((k+1)T)
Bloqueador de orden 0:
Bloqueador de orden 0
•
•
•
•
kT (k+1)T
309
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
PWM
Modulación en anchura de pulso
Reconstrucción
» Filtro paso bajo
Se cambia la anchura de pulso en cada periodo de muestreo
señal
codificada
en anchura de
pulso
y(t)
0110
0111
0110
señal
digital
codificada
PWM
COMPUTADOR
Filtro paso bajo
310
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
Generación de ondas PWM con un HC08
Se utiliza uno de los TIM
Se implementa con un OUTPUT COMPARE y el contaje modular del
TCNT actuando sobre las patillas T1CHx
» Tpwm se programa con el overflow de contador, haciendo conmutar T1CHx
» Ton se programa mediante output compare forzando el cero en T1CHx al
expirar la cuenta del output compare
Ton
Toff
Vmáx
Vmin
Tpwm
clear on output compare
toggle on overflow
311
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
Diagrama
de bloques
de un TIM
312
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
Dos posibilidades
Unbuffered (MSOB:MSOA = 01)
» Cambio de Ton en cualquier instante
Pb. Puede fallar durante dos ciclos
Buffered (MSOB:MSOA = 10)
» El Ton se cambia en el overflow
» Escritura del valor alternativamente en T1CH1 y T1CH0
» Canal 1 deshabilitado
void Init_PWM(void){
TSTOP_1 =1; TRST_1 =1;
PS2_1 = 0; PS1_1 = 0; PS0_1 = 0;
T1MODH= 0x00 ; T1MODL= 0xFF ;
T1CH0H=0x00; T1CH0L=0x50;
MS0B_1 = 1; MS0A_1 = 0;
TOV0_1 = 1;
ELS0B_1=1; ELS0A_1=0;
TSTOP_1=0;
//
//
//
//
//
//
//
//
//
Stop y reset del TIM
Preescalado x/1, tick = 0.407 us
Carga del valor del periodo del PWM
PWM de 8 bits, T = 104.192 us, f=9.597 KHz
Valor inicial del Ton
Buffered PWM
Cambiar la salida cuando se alcance el periodo
Poner a cero la salida en la comparacion
Arranque del contador
}
void Set_Value_Char (unsigned char V){
par = !par ;
if (par) T1CH0L = V ; else T1CH1L = V ;
}
313
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
Generación de ondas PWM con un 2812
Se utilizan los Event Managers
Se implementa con un OUTPUT COMPARE y el contaje modular del
TCNT
» Patillas: T1PWM, T2PWM, PWM1:6
» Tpwm se programa con el overflow de contador (GP Timer 1, GP Timer 2),
haciendo conmutar la patilla deseada
» Ton se programa mediante output compare (Timer 1 compare, Timer 2
compare, Full compare 1:3) forzando un cero o un uno en la patilla al
expirar la cuenta del output compare
La actualización del Ton es siempre buffered
SISTEMAS EMPOTRADOS
Event Manager,
EV-A y EV-B
Estructura
interna
314
315
SISTEMAS EMPOTRADOS
MUESTREO Y RECONSTRUCCION
void Init_PWM (void) {
asm(" eallow
; Enable accesses to control registers");
/* Activar el reloj del EV-A */
HISPCP = 0x0000 ;
/* Reloj EVA = SYSCLOKOUT/1 */
PCLKCR = 0x0001 ;
/* Activación del reloj del EVA */
/* Preescalado y periodo del T1 */
T1CON = 0x0000 ;
T1CON |= 0x1000 ;
/* 0001_0000_0000_0000 */
/* TMODE(1,0) = 10 Continous up */
/* TPS (2,1,0) = 000 x/1 preescaler */
/* TCLKS (1,0) = 00 SYSCLKOUT */
/* SYSCLKOUT(15 MHz)/1 => tick de T1 = 66.6 ns */
T1PR = 0xFFF ;
/* 12 bits */
T1CMPR = 0xFF ;
/* Ton = 256*tick */
/* Activacion de las salidas */
GPTCONA = 0x0051 ;
/* 0000_0000_0101_0001 */
/* TCMPOE = 1, T1CMPOE = 1 compare output enable */
/* T1PIN(1,0) = 01 active low */
GPAMUX = 0x0040 ;
/* T1PWM_T1CMP = 1 Peripheral */
/* Activacion del T1 */
T1CON |= 0x004A ;
asm(" edis
/* 0000_0000_0100_1010 */
/* TCLD(1,0) = 10 Carga inmediata del reg de comparacion */
/* TENABLE = 1 habilitación del T1 */
/* TECMPR = 1 T1 compare enable */
; Disable accesses to PIE control registers");
}
void Set_Value (unsigned int V) { T1CMPR = 0x0FFF&V ; }
316
SISTEMAS EMPOTRADOS
DISEÑO
Diseño de sistemas en relación con el mundo analógico (filtros,
controladores):
Tratamiento digital de la señal
Automática
...
Resultados del diseño
Función de transferencia en s (transformada de Laplace) u ω
(transformada de Fourier)
Función de transferencia en z (transformada en z)
Ecuaciones en diferencias
que cumplen las especificaciones de partida (frecuenciales o temporales)
317
SISTEMAS EMPOTRADOS
DISEÑO
Ejemplo
Integración numérica
f(t)
Sistema
f(t)
Integral(f(t))
I ( k ) = I ( k −1) + f (k −1)T
I ( z ) = I ( z )z −1 + f ( z )z −1T
z −1T
I (z)
=
f ( z ) 1 − z −1
kT
t
318
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN
G(s) --> Ecuación en diferencias
X(s)
G(s)
Y(s)
G ( s) =
s↔
Ejemplo
1 + bs
Y (s )
=K
1 + τs
X (s )
Y (s ) + τsY (s ) = KX (s ) + KbsX (s )
dy (t )
dx(t )
= Kx(t ) + Kb
dt
dt
y (kT ) − y ((k − 1)T )
x(kT ) − x((k − 1)T )
= Kx(kT ) + Kb
y (kT ) + τ
T
T
1 ⎛τ
x(k ) − x(k − 1) ⎞
y (k ) =
⎜ y (k − 1) + Kx(k ) + Kb
⎟
τ ⎝T
T
⎠
1+
T
y (t ) + τ
Y (s )
X ( s)
d
dt
319
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN
G(z) --> Ecuación en diferencias
X(z)
G(z)
Y(z)
G( z ) =
Y (z)
X (z )
z −1 ↔ retraso T
Ejemplo
1 + bz −1
Y (z )
=K
X (z )
1 + az −1
Y ( z ) + az −1Y ( z ) = KX ( z ) + Kbz −1 X ( z )
y (k ) + ay (k − 1) = Kx(k ) + Kbx(k − 1)
y (k ) = Kx(k ) + Kbx(k − 1) − ay (k − 1)
320
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN
Todo tratamiento de señal para cualquier aplicación (control,
comunicaciones, …) responde a las siguientes ecuaciones en diferencias:
K
M
k =0
m =1
IIR → y (i ) = ∑ b(k )x(i − k ) − ∑ a (m ) y (i − m )
K
FIR → y (i ) = ∑ b(k )x(i − k )
k =0
N −1
FFT → X (k ) = ∑ x(n )
n =0
WNkn ;
WN = e
−j
2π
N
Los DSPs tienen instrucciones y modos de direccionamiento
especiales para calcular estas expresiones de forma eficiente
» Bibliotecas de funciones
código optimizado para la CPU
321
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN
Ecuación en diferencias
Algoritmo
Ejecución periódica
y( k ) = Kx ( k ) + Kbx( k −1) − ay (k −1)
void main(void)
{
...
x_ant = 0 ;
Siguiente = Contador ;
while(1) {
x = Lectura_Entrada () ;
y = K*(x + b*x_ant) - a*y ;
Generar (y) ;
x_ant = x ;
Siguiente = Siguiente + T ;
delay_until (Siguiente) ;
}
}
322
SISTEMAS EMPOTRADOS
EJEMPLO 1
Control de velocidad de un motor
Especificaciones:
U
» SO = 0
Kp
Ke
» tr ≤ 2 sg
» ep = 0
Modelo del sistema
U
3
1+s
Y
A
Y
Ks
323
SISTEMAS EMPOTRADOS
EJEMPLO 1
Esquema de
control
COMPUTADOR
Yd
+
E
R(z)
-
Bo
U
3
1+s
Período de muestreo
» Suficiente frecuencia de muestreo para la dinámica deseada
» tr ≤ 2s => Tm ≤ tr/10= 0.2 ---> Tm = 0.1 s
» Si tick = 1.6667 ms
T = 60
Diseño del controlador R(z)
1 − 0.9048z −1
U (z)
R( z ) =
= 0.5
E( z )
1 − z −1
Y
324
SISTEMAS EMPOTRADOS
EJEMPLO 1
Ecuación en
diferencias
U (z)
1 − 0.9048z −1
R( z ) =
= 0.5
E( z )
1 − z −1
U ( z ) − z −1U ( z ) = 0. 5E ( z ) − 0.4524z −1 E ( z )
U ( k ) − U (k − 1) = 0.5E ( k ) − 0. 4524z −1 E ( k − 1)
U ( k ) = 0. 5E ( k ) − 0. 4524E (k − 1) + U (k −1)
Lectura de entradas
» Conversión analógico-digital
» 0..255 (conversor 8bits) <--> 0..5 V
float Lectura_Entrada(void)
{
ADSCR=0x00;
/*Inicio de la conversion AD*/
while(!COCO); /*Espera fin conversion*/
return ((float)ADC*5.0)/255.0 ;
}
325
SISTEMAS EMPOTRADOS
EJEMPLO 1
Generación de salidas: p.e. PWM
void Generar(float Valor)
{
if (Valor >= 5.0)
Set_Value (255) ;
else
Set_Value ((unsigned char)(Valor*255.0/5.0)) ;
}
326
SISTEMAS EMPOTRADOS
EJEMPLO 1
Programa de control
void main(void)
{
unsigned int Siguiente ;
unsigned int T = 60 ;
float E, E_ant, U ;
float Yd, Y ;
E_ant = 0.0 ;
U = 0.0 ;
Siguiente = Contador ;
while(1) {
Y = Lectura_Entrada () ;
Yd = Lectura_Consigna () ;
E = Yd - Y ;
U = 0.5*E - 0.4524*E_ant + U ;
Generar (U) ;
E_ant = E ;
Siguiente = Siguiente + T ;
delay_until (Siguiente) ;
}
}
327
SISTEMAS EMPOTRADOS
EJEMPLO 2
Obtener la función de transferencia del controlador que implementa el
siguiente programa
void main(void)
{
...
error_k_1 = 0.0 ;
accion_k_1 = 0.0 ;
accion_k_2 = 0.0 ;
Siguiente = Contador ;
while(1) {
error = leer_error() ;
accion = (1-b)*accion_k_1 + b*accion_k_2 +
K*(error - a*error_k_1) ;
generar (accion) ;
error_k_1 = error ;
accion_k_2 = accion_k_1 ;
accion_k_1 = accion ;
Siguiente = Siguiente + T ;
delay_until (Siguiente) ;
}
}
328
SISTEMAS EMPOTRADOS
EJEMPLO 2
Función de transferencia
accion (k ) = (1 − b ) ∗ accion (k − 1) + b ∗ accion (k − 2 ) +
K ∗ (error (k ) − a ∗ error (k − 1))
accion (k ) + (b − 1) ∗ accion (k − 1) − b ∗ accion (k − 2 ) =
K ∗ (error (k ) − a ∗ error (k − 1))
accion ( z ) + (b − 1) ∗ accion ( z ) ∗ z −1 − b ∗ accion ( z ) ∗ z −2 =
(
K ∗ error ( z ) − a ∗ error ( z ) ∗ z −1
(
)
(
)
)
accion ( z ) 1 + (b − 1)z −1 − bz −2 = K 1 − az −1 error ( z )
accion ( z )
1 − az −1
1 − az −1
=K
=K
−1
−2
error ( z )
1 + (b − 1)z − bz
1 − z −1 1 + bz −1
(
)(
)
329
SISTEMAS EMPOTRADOS
EJEMPLO 2
¿Y de este programa?
void main(void)
{
...
error_k_1 = 0.0 ;
accion_k_1 = 0.0 ;
accion_k_2 = 0.0 ;
Siguiente = Contador ;
while(1) {
generar (accion) ;
error = leer_error() ;
accion = (1-b)*accion_k_1 + b*accion_k_2 +
K*(error - a*error_k_1) ;
error_k_1 = error ;
accion_k_2 = accion_k_1 ;
accion' ( z ) = z −1accion ( z )
accion_k_1 = accion ;
Siguiente = Siguiente + T ;
1 − az −1
−1
delay_until (Siguiente) ;
accion' ( z ) = z K
1 − z −1 1 + bz −1
}
(
)(
)
error ( z )
}
1− az −1 )z −1
(
accion' ( z )
=K
error ( z )
(1− z −1 )(1 + bz −1 )
330
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Coma fija v.s. coma flotante
Rango para el mismo número de bits de representación interna
» Coma flotante mucho mayor rango de representación
Precisión en la representación
» Coma flotante
» Coma fija
la precisión depende del número representado
igual precisión en todo el rango
Consumo y precio
» CPUs de coma flotante
–
Alto precio y elevado consumo
–
Utilizado en estaciones base
» CPUs de coma fija
–
Menor precio y consumo
–
Utilizados en sistemas móviles
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Representación en coma flotante IEEE Format (754)
331
332
SISTEMAS EMPOTRADOS
0.0625
0.25
0.5
1
2
Representación en coma fija
0.125
IMPLEMENTACIÓN EN COMA FIJA
coma
~
Generalizando:
V
V ≈V = S ×Q + B
Q entero
S = F × 2E
1≤ F < 2
B sesgo
escala
S
B
Q
Q
E
F
lo único de se representa
posición de la coma
escala fraccional o ponderación de bit
333
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Ejemplo
Conversor AD 8 bits, 0..5 V
0..5 V (entrada al conversor)
0..255 (salida de 8 bits)
S = F × 2E
x−0
y−0
5
=
⇒ xvoltios =
y
5 − 0 255 − 0
255
5
S=
Q= y
255
lg 2 S = lg 2 F + E = lg 2
5
= −5.6724
255
E = −6
lg 2 F = 0.3276 ⇒ F = 20.3276 = 1.255
B=0
V = xvoltios = 1.255 × 2−6 × Q
El resultado de la conversión = representación interna (↓C)
334
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Formato Q15
Formato estándar en DSPs
B=0
F=1
E=-15
V = 2−15 × Q
0 ≤V <1
15
s
coma
0
335
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Aritmética
SUMA
Va = Vb + Vc
Fa 2 E Qa + Ba = Fb 2 E Qb + Bb + Fc 2 E Qc + Bc
a
Qa =
Fb ( E
2
Fa
b
− Ea )
b
Qb +
Fc ( E − E )
B + Bc − Ba − E
2
Qc + b
2 ≠ Qb + Qc
Fa
Fa
c
Bi = 0 ; Fa=Fb=Fc
a
a
Qa = 2( E
b
− Ea )
Qb + 2( E − E ) Qc
c
a
Qa = Qb + Qc
Ea=Eb=Ec
Aritmética
c
ACUMULACIÓN
Bb=0 y Fi=1
Va = Va + Vb
Qa = Qa + 2( E
b
− Ea )
Qb
336
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Aritmética
MULTIPLICACIÓN
(
Va = Vb × Vc
) (
Fa 2 E Qa + Ba = Fb 2 E Qb + Bb × Fc 2 E Qc + Bc
a
Qa =
Fb Fc ( E
2
Fa
b
+ Ec − Ea )
Fi=1, Bi=0
Atención!!
QbQc +
Fb Bc ( E
2
Fa
b
b
− Ea )
Qa = 2( E
b
Qb +
+ Ec − Ea )
c
)
Fc Bb ( E − E )
B B − Ba − E
Qc + b c
2
2
Fa
Fa
c
QbQc
Qa,Qc 16bits ⇒ QaxQc 32 bits
a
a
337
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
U (k ) = 0.5 E (k ) − 0.4524 E (k − 1) + U (k − 1)
Ejemplo 1
Representación de los operandos
» Yd(k), Y(k)
» QYd, QY
leídos por el conversor AD de 8 bits
unsigned char
Y (k ) = 1.255 × 2− 6 × QY
Yd (k ) = 1.255 × 2− 6 × QY
d
QY , QY ∈ [0,255] → 8 bits
d
COMPUTADOR
Yd
+
E
-
R(z)
Bo
U
3
1+s
Y
338
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
» QE
signed int
E (k ) = Yd (k ) − Y (k )
1.225 × 2− 6 × QE = 1.225 × 2− 6 × QY − 1.225 × 2− 6 × QY
d
QE = QY − QY → QE ∈ [− 255,255] → 9 bits
d
» U(k)
salida generada por un PWM de 8 bits
–
Idéntica transformación que la entrada (0..5V
–
QU
unsigned char
U (k ) = 1.255 × 2− 6 × QU
QU ∈ [0,255] → 8 bits
0..255)
339
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Representación de los parámetros: a=0.5, b=0.4524
» Representación de 8 bits
» Representación no exacta
Q7
error de cuantificación
0.5 = 2− 7 × Qa ⇒ Qa = 0.5 × 27 = 64
0.4524 = 2− 7 × Qb ⇒ Qb = 0.4524 × 27 = 57.9 ⇒ Qb ≈ 58
Expresión
1.225 × 2− 6 × QU = 2− 7 × 64 × 1.225 × 2− 6 × QE − 2− 7 × 58 × 1.225 × 2− 6 × QE _ ant
+ 1.225 × 2− 6 × QU _ ant
QU = 2− 7 × 64 × QE − 2− 7 × 58 × QE _ ant + QU _ ant
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN EN COMA FIJA
Programa
int QE, QE_ant ;
int ACC ;
unsigned char QU, QU_ant ;
...
ACC = QU_ant ;
ACC += 64*QE >> 7 ;
ACC -= 58*QE_ant >> 7 ;
if (ACC > 255) QU = 255 ;
else if (ACC < =) QU = 0 ;
else QU = (unsigned char)ACC ;
...
340
341
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Un filtro FIR de orden N es descrito por la siguiente ecuación en
diferencias:
y (i ) =
N
∑ h(k )x(i − k ) =
k =0
h(0) x(i ) + h(1) x(i − 1) + ... + h( N ) x(i − N )
N+1 coeficientes del filtro h(0)..h(N)
N+1 muestras x(i), x(i-1), …, x(i-N)
Multiplicación, suma
342
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Implementación basada en la instrucción DMAC
16-Bit Dual Multiply and Accumulate
DMAC ACC:P,loc32,*XAR7++
XT
Temp
ACC
P
=
=
=
=
[loc32];
Prog[*XAR7 or *XAR7++];
ACC + (XT.MSW * Temp.MSW) << PM;
P + (XT.LSW * Temp.LSW) << PM;
343
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Implementación basada en direccionamiento indirecto circular
Loc32
*XAR6%++
Lo apuntado por XAR6, post-incremento
%
direccionamiento circular
if(XAR6(7:0) == XAR1(7:0)) {
XAR6(7:0) = 0x00
XAR6(15:8) = unchanged }
else {
if(16-bit data), XAR6(15:0)=+ 1
if(32-bit data), XAR6(15:0)=+ 2
}
XAR6(31:16) = unchanged
Longitud buffer = 256
@buffer = XAR6(15:0)&0xFF00
@buffer dentro 64K primeros
…
@ alineada
nx256
XAR6
…
…
XAR1
344
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Función en ensamblador pero que se puede llamar desde C
void FIR16_init(FIR16_handle) ;
void FIR16_calc(FIR16_handle) ;
typedef struct {
int *coeff_ptr;
int *dbuffer_ptr;
int cbindex;
int order;
int input;
int output;
void (*init)(void *)
void (*calc)(void *);
}FIR16_handle;
/*
/*
/*
/*
/*
/*
/*
/*
Pointer to Filter co-efficient array
Delay buffer pointer
Circular Buffer Index
Order of the filter
Input data
Output data
Pointer to init function
Pointer to the calculation function
*/
*/
*/
*/
*/
*/
*/
*/
345
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Preparación
SETC
SXM,OVM
; Sign extension enabled (16 bits values)
; overflow mode ON
SPM
-6
; Create guard band of >> 6 (in product operations)
MOVL
MOVZ
MOVL
XAR7,*XAR4
AR1,*+XAR4[4]
XAR6,*+XAR4[2]
;
;
;
;
;
MOVL
MOV
MOV
MOVL
MOVL
ACC,*XAR6
AH,@AL
AL,*+XAR4[6]
*XAR6%++,ACC
*+XAR4[2],XAR6
;
;
;
;
;
MOV
MOVZ
ACC,*+XAR4[5]<<15 ; AR0 = cbindex
AR0,AH
; AR0 = order/2
ZAPA
XAR4=FIR16_handle->coeff_ptr
XAR4 poits to the parameter in the stack
XAR7 = coeff_ptr (filter coeficients)
AR1 = cbindex (Circular Buffer Index)/ *(XAR4 + 4)
XAR6 = dbuffer_ptr (samples)
ACC = -:X
ACC = X:X
ACC = X:Input (Inpunt = new sample)
Store in data array and inc circ address
update the dbuffer pointer
; Zero the ACC, P registers and OVC counter
346
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Implementación en coma fija
Formato Q15
N
y (i ) = ∑ h(k )x(i − k ) = h(0) x(i ) + h(1) x(i − 1) + ... + h( N ) x(i − N )
k =0
2−15 Q y (i ) = 2−15 Qh ( 0) 2−15 Qx (i ) + 2−15 Qh (1) 2−15 Qx (i −1) + K + 2−15 Qh ( N ) 2−15 Qx (i − N )
Qy (i ) = 2−15 Qh ( 0)Qx (i ) + 2−15 Qh (1)Qx (i −1) + K + 2−15 Qh ( N )Qx (i − N )
(
)
Q y (i ) = 2− 6 Qh ( 0)Qx (i ) + 2− 6 Qh (1)Qx (i −1) + K + 2− 6 Qh ( N )Qx (i − N ) 2− 9
347
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
El bucle fundamental
RPT
AR0
|| DMAC ACC:P,*XAR6%++,*XAR7++
ADDL
ACC,P
; Add the two sums with shift
La saturación
MOVW
MINL
DP,#PosSatVal
ACC,@PosSatVal
MOVW
MAXL
DP,#NegSatVal
ACC,@NegSatVal
MOVH
*+XAR4[7],ACC<<7; Store saturated result (Q15)
; Saturate result
348
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Movimiento en el buffer
349
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Movimiento en el buffer
350
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN FIR
Uso de las funciones
#define FIR_ORDER 50 /* Filter Order */
#pragma DATA_SECTION(fir, "firfilt");
FIR16 fir= FIR16_DEFAULTS;
#pragma DATA_SECTION(dbuffer,"firldb");
long dbuffer[(FIR_ORDER+2)/2];
const long coeff[(FIR_ORDER+2)/2]= FIR16_LPF50;
main()
{
lpf.dbuffer_ptr=dbuffer;
lpf.coeff_ptr=(long *)coeff;
lpf.order=FIR_ORDER;
lpf.init(&lpf);
}
void interrupt isr20khz()
{
lpf.input=xn;
lpf.calc(&lpf);
yn=lpf.output;
}
351
SISTEMAS EMPOTRADOS
BLOQUEO DE CONTINUA
Eliminación de la continua de una señal.
a0
C
K
+
Z-1
R
a1
b1
K=
2 RC
2 RC + Ts
a0 = 1
fc =
1
2πRC
a1 = −1
b1 =
2 RC − Ts
2 RC + Ts
+
352
SISTEMAS EMPOTRADOS
BLOQUEO DE CONTINUA
Código en C
Q15
“The DSP handbook”. Bateman&Paterson. Prentice Hall
short filter(short sample,float tfc, float tfs, short delay,short *newdelay)
{
float ts=1/tfs;
float rc = 1/(tpi*tfc);
float trc = (2*rc)+ts;
float fK = (2*rc)/trc;
float fb1 = ((2*rc)-ts)/trc;
short
short
short
short
K=fK*32767;
b1=fb1*32767;
a0=32767;
a1=-32767;
short temp1 = (K*sample)>>15 + (delay*b1)>>15 ;
short filtered = (delay,a1)>>15 + (temp1,a0)>>15 ;
*newdelay=temp1;
return filtered;
}
353
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
PROCESOS
CONCURRENTES
354
SISTEMAS EMPOTRADOS
PROCESOS CONCURRENTES
Procesos concurrentes: Se dice que dos o más procesos son
concurrentes si pueden ejecutarse en paralelo, de forma que alguno de
ellos comience a ejecutarse antes que termine algún otro.
Programa concurrente: Es un programa que especifica dos o más
procesos concurrentes o, de forma equivalente, un programa cuya
ejecución se realiza según varios flujos de control que avanzan en
paralelo.
Paralelismo virtual
Monoprocesador: Un único procesador va alternando la ejecución de
los diversos procesos (entrelazado)
Paralelismo real
Multiprocesador: Cada proceso se ejecuta en un procesador diferente.
Zona de memoria común (datos comunes).
Sistema distribuido: Multiprocesador sin memoria compartida.
355
SISTEMAS EMPOTRADOS
ENTRELAZADO
Entrelazado y operaciones atómicas
Proceso P ;
x,y: entero ;
Proceso Q ;
z,u: entero ;
P1: x:=1 ;
P2: y:=x+2 ;
Q1: z:=3 ;
Q2: u:=z+1 ;
fin P ;
fin Q ;
Posibles ejecuciones:
(P1; P2; Q1; Q2)
(P1; Q1; P2; Q2)
(Q1; P1; P2; Q2)
...
356
SISTEMAS EMPOTRADOS
ENTRELAZADO
Cada instrucción de alto nivel: varias instrucciones código máquina.
Por ejemplo: x := y + z ;
copiar
y, r1
copiar
z, r2
sumar
r1, r2
copiar
r2, x
Operaciones atómicas.
SISTEMAS EMPOTRADOS
357
COMUNICACIÓN Y SINCRONIZACIÓN
La dificultad de la programación concurrente estriba en las interacciones
de los procesos:
Cooperación para un fin común
Competencia por el uso de recursos
Son necesarias operaciones de comunicación y sincronización entre
procesos:
Sincronización: cumplir restricciones sobre el orden en el que se
ejecutan sus acciones
Comunicación: paso de información de un proceso a otro
358
SISTEMAS EMPOTRADOS
EXCLUSIÓN MUTUA
Dos procesos compiten cuando comparten:
un recurso
una variable (comunicación)
El acceso al recurso o a la variable debe ser en exclusión mutua.
Sección crítica: secuencia de instrucciones que debe ejecutarse en
exclusión mutua
Mecanismos de sincronización
Espera ocupada (busy waiting)
Semáforos
Monitores
359
SISTEMAS EMPOTRADOS
COMPARTICIÓN DE UNA VARIABLE
Ejemplo: dos procesos (contador y escritor) comparten una variable n.
VARIABLE COMPARTIDA
n : entero := 0;
proceso contador;
principio
repetir
esperar pulso;
n:=n+1;
fin repetir;
fin;
proceso escritor;
principio
repetir
esperar 1 hora;
escribir n;
n:=0;
fin repetir;
fin;
ERROR: el resultado depende del orden
en que se intercalen las instrucciones
360
SISTEMAS EMPOTRADOS
COMPARTICIÓN DE UNA VARIABLE
Posibles trazas:
(escribir n; n:=0; n:=n+1)
(escribir n; n:=n+1; n:=0) --> Pérdida de pulso
(n:=n+1; escribir n; n:=0)
» n := n + 1 ;
–
copiar
n, r1
–
sumar
r1, 1
/ (escritor) n:=0;
–
copiar
r1, n
=> Pérdida de la puesta a cero de n
Problema: entrelazado de las instrucciones en el acceso a la variable
común.
Solución: garantizar la exclusión mutua en el acceso al elemento
compartido.
361
SISTEMAS EMPOTRADOS
COMPARTICIÓN DE UNA VARIABLE
Sección crítica: Se garantiza que dos procesos no estarán ejecutando a la
vez una misma región crítica
Monitores, mutex, Test_and_set
Ejemplo: dos procesos (contador y escritor) comparten una variable n.
n : compartida entero := 0;
proceso acumulador;
principio
repetir
esperar impulso;
region n hacer
n:=n+1;
fin;
fin repetir;
fin;
proceso escritor;
principio
repetir
esperar 1 hora;
region n hacer
escribir n;
n:=0;
fin;
fin repetir;
fin;
362
SISTEMAS EMPOTRADOS
EXCL. MUTUA E INTERRUPCIONES
Las rutinas de servicio de interrupciones (ISR) se ejecutan en concurrencia
con el resto de procesos.
Exclusión mutua => inhibir interrupciones
static int n = 0 ;
void rutina_interrupcion(void) {
n:=n+1;
}
void escribe_borra(void) {
inhibir_interrupciones() ;
escribir(n);
n:=0;
activar_interrupciones() ;
}
363
SISTEMAS EMPOTRADOS
COMPARTICIÓN DE UNA VARIABLE
En algunos casos excepcionales, puede compartirse una variable sin
exclusión mutua, si se cumple:
Un proceso la escribe y uno la lee
La escritura y lectura se realizan en memoria
» el compilador no debe utilizar copias locales en registros para optimizar el
uso de la variable
La escritura y lectura de la variable son atómicas
» debe ser leída con una única instrucción del procesador
Ejemplo en C
#pragma interrupt_handler Tick
void Tick (void) {
volatile unsigned int tick_counter ;
unsigned int Get_Time (void) {
TFLG2 = RTIF ;
tick_counter ++ ;
}
return tick_counter ;
}
364
SISTEMAS EMPOTRADOS
COMUNICACIÓN
Según el tipo de sincronización emisor-receptor:
Comunicación asíncrona (buzón, semáforo)
» El emisor envía el mensaje y continúa
Comunicación síncrona (cita y cita extendida)
» El emisor espera a que el receptor reciba el mensaje
365
SISTEMAS EMPOTRADOS
ACTIVACIÓN DE TAREAS
Un sistema empotrado puede ser un sistema concurrente, compuesto por
procesos. Desde el punto de vista del tiempo, varios tipos de procesos:
Procesos periódicos: son aquellos que se activan regularmente en
instantes de tiempo separados por un período de tiempo determinado.
proceso P;
cada T repetir
actividad;
fin repetir;
fin P; que se activan de forma
Procesos esporádicos: son aquellos
irregular, cada vez que se producen ciertos eventos externos.
Procesos de fondo
proceso E;
repetir
esperar Evento ;
actividad;
fin repetir;
fin E;
366
SISTEMAS EMPOTRADOS
ESPECIFICACIONES TEMPORALES
Marco temporal de una tarea: es el conjunto de atributos temporales
asociados.
T
Periodo de ejecución (P), o separación mínima entre eventos (S)
C
Tiempo de cómputo máximo
R
Tiempo de respuesta
D
Plazo de respuesta (deadline)
activación
comienzo
k
c1
fin
activación
k+1
c = c1 + c2 + c3
c2
c3
latencia
R
t f (k)
D
T
t a (k)
t a (k+1)
367
SISTEMAS EMPOTRADOS
ESPECIFICACIONES TEMPORALES
Corrección temporal de un proceso => en cada ejecución
comenzar después de su activación
terminar antes de su plazo de respuesta
Activación
Ejecución válida
Plazo de
respuesta
368
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
EJECUTIVOS
CÍCLICOS
369
SISTEMAS EMPOTRADOS
MODELO DE TAREAS
Consideraremos inicialmente un modelo de tareas simple:
Conjunto de tareas estático
Todas las tareas son periódicas
Las tareas son independientes entre sí
Se conoce el tiempo de ejecución máximo de cada tarea C i
Cada tarea tiene un plazo de respuesta D i ≤ T i
Después veremos como incorporar tareas esporádicas
370
SISTEMAS EMPOTRADOS
PLAN PRINCIPAL
Ejecutivo cíclico: estructura de control o programa cíclico que entrelaza
de forma explícita la ejecución de diversos procesos periódicos en un
único procesador.
El entrelazado es fijo y está definido en el denominado plan principal
que es construido antes de poner en marcha el sistema
Plan principal: especificación del entrelazado de varios procesos
periódicos durante un período de tiempo (ciclo principal) de tal forma que
su ejecución cíclica garantiza el cumplimiento de los plazos de los
procesos
La duración del ciclo principal es igual al mínimo común múltiplo de los
períodos de los procesos
» M = mcm (Ti)
» se supone tiempo entero (p.e. Número de ticks)
» el comportamiento temporal del sistema se repite cada ciclo principal
371
SISTEMAS EMPOTRADOS
PLANES SECUNDARIOS
Cada plan principal es dividido en uno o más planes secundarios o
marcos (“frames”) que se ejecutarán de forma secuencial.
Cada comienzo/fin de un marco en el ejecutivo cíclico se sincroniza con el
reloj. Son puntos donde se fuerza la corrección del tiempo real.
Por simplicidad, en la práctica, la duración de todos los marcos es la
misma. A esta duración se le denomina ciclo secundario.
Si las acciones definidas en un marco acaban antes de que concluya el
ciclo secundario el ejecutivo cíclico espera (p.e. en un WAI)
Si las acciones definidas en un marco no han acabado al terminar el
ciclo secundario, se produce un error: desbordamiento de marco.
Si la duración de una acción es superior al ciclo secundario debe ser
descompuesta en subacciones
372
SISTEMAS EMPOTRADOS
EJEMPLO
Tarea T
A
25
B
25
C
50
D
50
E
100
D
25
25
50
50
100
C
10
8
5
4
2
• Ciclo principal: 100 ticks
• Ciclo secundario: 25 ticks
M = 100 ticks
m = 25 ticks
A
0
B
C
A
25
B
A
DE
50
B
C
A
75
B
D
100
373
SISTEMAS EMPOTRADOS
EJEMPLO
Ejecutivo cíclico:
void Ejecutivo_Ciclico(void) {
unsigned int m = 25 ;
unsigned int siguiente ;
int marco = 0, num_marcos = 4 ;
siguiente = Get_Time () ;
while(1) {
marco = (marco % num_marcos)+1 ;
switch (marco) {
case 1: A; B; C;
break ;
case 2: A; B; D; E; break ;
case 3: A; B; C;
break ;
case 4: A; B; D;
break ;
}
siguiente += m ;
delay_until(siguiente) ;
}
}
374
SISTEMAS EMPOTRADOS
PROPIEDADES
No hay concurrencia en la ejecución
» Cada ciclo secundario es una secuencia de llamadas a procedimientos
» No se necesita un núcleo de ejecución multitarea
Los procedimientos pueden compartir datos
» No se necesitan mecanismos de exclusión mutua como los semáforos o
monitores
SISTEMAS EMPOTRADOS
375
DETERMINACION DE LOS CICLOS
Sea un conjunto de procesos periódicos {Pi / i = 1..n}, con requisitos
temporales representados por ternas (Ci, Ti, Di).
Ciclo principal:
» M = mcm (Ti)
Ciclo secundario
» m ≤ min(Di)
» m ≥ max(Ci)
» ∃k: M = km
» ∀i: m+ (m - mcd(m,Ti)) ≤ Di
–
garantiza que entre el instante de activación de cada proceso y su
plazo límite exista un marco o ciclo secundario completo
–
m - mcd(m,Ti) es el retraso máximo entre la activación de un proceso y
el comienzo del siguiente marco
–
esta condición incluye a la primera
376
SISTEMAS EMPOTRADOS
EJEMPLO
Considérese tres procesos
» P
C
T
D
» E
1
14
14
» F
2
20
20
» G
3
22
22
Ciclo principal
» M = mcm(14,20,22) = 1540
Ciclo secundario
» m ≤ min(14,20,22) => m = 1..14
» m ≥ max(1,2,3) => m = 3..14
» ∃k: 1540 = km => m = 4,5,7,10,11,14
» m+ (m - mcd(m,Ti)) ≤ Di => m = 4,5,7
377
SISTEMAS EMPOTRADOS
EJEMPLO
para m = 4
i
1
2
3
Ti
14
20
22
mcd(m,Ti) retraso
2
2
4
0
2
2
m=4
E
F
G
14
6
m+retraso
6
<
4
<
6
<
20
4
6
22
Di
14
20
22
378
SISTEMAS EMPOTRADOS
EJEMPLO
para m = 10
i
1
Ti
14
mcd(m,Ti) retraso
2
8
m+retraso
18
>
18
14
m = 10
E
F
G
0
14
28
42
56
Di
14 NO
379
SISTEMAS EMPOTRADOS
INCLUSIÓN DE PROCESOS PERÍODICOS
En cada ciclo principal se tienen ncs = M/m ciclos secundarios
En cada plan principal se tienen nei = M/Ti ejecuciones de cada proceso
Pi
Hay que definir la secuencia de procesos de cada marco: σx:{Pik,Pjl,..,Prs}
La ejecución k-ésima de un proceso Pi caracterizado por ternas (Ci, Ti, Di)
podrá ser incluida en los marcos j-ésimos que comienzan después de la
activación de Pik y terminan antes del deadline de Pik:
(k − 1)Ti ≤ ( j − 1)m
jm ≤ (k −1)Ti + Di
Para que la ejecución k-ésima de Pi pueda ser incluida en la secuencia de
procesos σx del marco x, debe quedar suficiente tiempo libre en el marco:
Ci ≤ m −
∑ Cl
∀l,Pl ∈σ x
380
SISTEMAS EMPOTRADOS
PLANIFICACIÓN
Objetivo: asignación de procesos (o subprocesos) a los marcos de forma
que se cumplan los requisitos temporales
Planteamiento: búsqueda en el espacio de estados
Estado: asignación parcial
Algoritmo: búsqueda en profundidad con retroceso
» se pretende encontrar una única solución
Guiado de la búsqueda: heurísticas
» sobre el siguiente proceso a asignar
–
primero el más urgente o el más frecuente
–
primero el de tiempo de proceso más grande
» si varios marcos cumplen las condiciones:
–
el primer marco que cumpla las condiciones
–
el marco con menor tiempo de cómputo libre
381
SISTEMAS EMPOTRADOS
EJEMPLO: PLANIFICACIÓN
Conjunto de procesos a planificar:
Proceso
C
T
D
P1
2
8
8
P2
3
8
8
P3
1
6
6
P4
2
12
12
Ciclo principal: M = mcm(6,8,12) = 24
Número de ejecuciones a planificar
» ne1 = M/8 = 3
» ne2 = M/8 = 3
» ne3 = M/6 = 4
» ne4 = M/12 = 2
382
SISTEMAS EMPOTRADOS
EJEMPLO: PLANIFICACIÓN
Ciclo secundario
» m ≤ min(6,8,12) => m = 1..6
» m ≥ max(1,2,3) => m = 3..6
» ∃k: 24 = km => m = 3,4,6
» m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4
posibles_m = {4,3}
383
SISTEMAS EMPOTRADOS
EJEMPLO: PLANIFICACIÓN
Ordenación procesos: primero el más urgente
Proceso
C
T
D
n
P1
1
6
6
4
P2
3
8
8
3
P3
2
8
8
3
P4
2
12
12
2
Se intenta planificar primero para m=4 (la complejidad del problema
disminuye con el número de marcos)
Un planificación consta de 6 marcos consecutivos
384
SISTEMAS EMPOTRADOS
EJEMPLO: PLANIFICACION
Pik puede ir en el marco j si:
(k − 1)Ti ≤ ( j − 1)m
jm ≤ (k −1)Ti + Di
P11
P1
0
P12
4
8
P21
P2
0
0
12
16
0
4
8
12
16
20
P32
4
4
20
8
12
24
P23
24
P33
16
20
24
20
24
P42
P41
P4
P14
P22
P31
P3
P13
8
12
16
385
SISTEMAS EMPOTRADOS
EJEMPLO: PLANIFICACIÓN
1
1
1
1
1 2
1 2
1 2
1
2
1
1
2
1 2
1
2
1
1
3
1
1
2
1
1
2
1
1
2
1
2
2
3
3
3
2
3
3
1 2
1
1 2
2
1
1
2
1
1 2
2
1
1
3
1
1
2
1
1
2
1
1
2
1
1
3
1
1
3
1
2
1
3
1
1
3
1
2
2
3
2
3
3
3
2
3
1 2
1
1 2
2
3
2
4
2
3
4
2
386
SISTEMAS EMPOTRADOS
PARTICIÓN DE PROCESOS
Hay casos en que un conjunto de procesos que no es planificable:
Si el tiempo de cómputo de uno es mayor que el plazo de algún otro:
Ci > Dk => No existe valor de m que cumpla a la vez:
» m ≤ min(Di)
» m ≥ max(Ci)
Si para una ejecución de un proceso no queda ningún marco con
suficiente tiempo libre
Solución: descomponer el proceso demasiado largo Pi=(Ci,Ti,Di) en varios
subprocesos Pij=(Cij,Tij,Dij):
Tij=Ti ; Dij=Di
Ci1+Ci2+Ci3+... = Ci
no partir secciones críticas
relación de precedencia en cada una de las ejecuciones a mantener
en la planificación: Pi1→Pi2→Pi3→...
387
SISTEMAS EMPOTRADOS
RELACIONES DE PRECEDENCIA
Sean Pi1 y Pi2 dos procesos entre los que existe una relación de
precedencia Pi1→Pi2,
En la ordenación de los procesos para su inclusión en la planificación
se mantiene el orden de precedencia (los dos subprocesos tienen las
mismas restricciones temporales)
Para incluir la ejecución k-ésima de Pi2, Pi2k, en la planificación:
» obtener los valores {j,...,j+h} de los marcos donde puede ser incluida a
partir de:
(k − 1)Ti ≤ ( j − 1)m
jm ≤ (k −1)Ti + Di
» Debido al orden de inclusión Pi1k ya ha sido incluida en el marco j+l ∈
{j,...,j+h}. El conjunto de marcos donde puede ser incluida se reduce a
{j+l,...,j+h}
» A los elementos de {j+l,...,j+h} se aplica la condición
Ci2 ≤ m −
∑ Cl
∀l,Pl ∈σ x
388
SISTEMAS EMPOTRADOS
EJEMPLO: PARTICIÓN DE PROCESOS
Conjunto de procesos a planificar:
Proceso
C
T
D
P1
2
6
6
P2
2
8
8
P3
8
24
20
Ciclo principal
» M = mcm(6,8,24) = 24
Ciclo secundario
» m ≤ min(6,8,20) => m = 1..6
» m ≥ max(2,2,8) => no hay ningún m que lo cumpla
Es preciso partir el proceso P3 en varios subprocesos con tiempo de
cómputo menor que 6 unidades de tiempo
Partición en P31 → P32 con igual tiempo de cómputo, 4 unidades
389
SISTEMAS EMPOTRADOS
EJEMPLO: PARTICIÓN DE PROCESOS
Conjunto de procesos a planificar:
Proceso
C
T
D
P1
2
6
6
P2
2
8
8
P31
4
24
20
P32
4
24
20
Ciclo principal
» M = mcm(6,8,24) = 24
Número de ejecuciones a planificar
» ne1 = M/6 = 4
» ne2 = M/8 = 3
» ne31 = M/24 = 1
» ne32 = M/24 = 1
SISTEMAS EMPOTRADOS
EJEMPLO: PARTICION DE PROCESOS
Ciclo secundario
» m ≤ min(6,8,20) => m = 1..6
» m ≥ max(2,2,4) => m = 4..6
» ∃k: 24 = km => m = 4,6
» m+ (m - mcd(m,Ti)) ≤ Di => m = 4
Unica posibilidad de planificación m=4
Ordenación de procesos: primero el más urgente manteniendo
relaciones de precedencia
» Misma tabla anterior P1 → P2 → P31→ P32
Un planificación consta de 6 marcos consecutivos: M = 6m
390
391
SISTEMAS EMPOTRADOS
EJEMPLO: PARTICIÓN DE PROCESOS
1
1
1
1
1
2
1
2
1
1
2
1
2
1
1
2
1
2
1
31
1
1
2
1
2
1
31
1
1
2
1
2
1
31
1
1
32
1
2
2
2
2
2
392
SISTEMAS EMPOTRADOS
PARTICIÓN CON SECCIONES CRÍTICAS
Si es preciso partir algún proceso en subprocesos, no deben partirse las
secciones críticas con objeto de preservar la exclusión mutua
Ejemplo:
Planificar la ejecución de los siguientes procesos:
P
C
T
D
P1
20
100
100
P2
25
150
150
P3
90
300
300
Dichos procesos acceden a una sección crítica común tal y como
muestra el siguiente esquema:
P1
15
P2
15
P3
15
5
10
20
15
40
SISTEMAS EMPOTRADOS
PARTICIÓN CON SECCIONES CRÍTICAS
Ciclo principal
» M = mcm(100,150,300) = 300
Número de ejecuciones a planificar
» ne1 = M/100 = 3 ; ne2 = M/150 = 2 ; ne3 = M/300 = 1
Ciclo secundario
» m ≤ min(100,150,300) => m = 1..100
» m ≥ max(20,25,90) => m = 90..100
» ∃k: 300 = km => m = 100
» m+ (m - mcd(m,Ti)) ≤ Di => m = 100
Posibles valores de m = {100}
Ordenación procesos: primero el más urgente
» Misma ordenación que en el enunciado
Un planificación consta de 3 marcos consecutivos
393
394
SISTEMAS EMPOTRADOS
PARTICIÓN CON SECCIONES CRÍTICAS
No existe planificación porque no
queda ningún marco donde quepa el
proceso P3
Partición de P3
» Tiempo sobrante en los marcos:
55, 80, 55 ms
» P31: primera sección crítica +
segundo segmento código
» P32: segunda sección crítica +
cuarto segmento código
1
1
1
1
1
1
2
2
395
SISTEMAS EMPOTRADOS
PARTICIÓN CON SECCIONES CRÍTICAS
Nueva especificación de procesos:
P
C
T
D
P1
20
100
100
P2
25
150
150
P31
35
300
300
P32
55
300
300
Ciclo principal
» M = mcm(100,150,300) = 300
Número de ejecuciones a planificar
» ne1 = M/100 = 3
» ne2 = M/150 = 2
» ne31 = M/300 = 1
» ne32 = M/300 = 1
396
SISTEMAS EMPOTRADOS
PARTICIÓN CON SECCIONES CRÍTICAS
Ciclo secundario
» m ≤ min(100,150,300) => m = 1..100
» m ≥ max(20,25,35,55) => m = 55..100
» ∃k: 300 = km => m = 60,75,100
» m+ (m - mcd(m,Ti)) ≤ Di => m = 60,100
Posibles valores de m = {60,100}
Para m=100:
1
1
1
1
1
1
2
1
1
1
2
32
2
2
31
397
SISTEMAS EMPOTRADOS
PROCESOS ESPORÁDICOS
Proceso esporádico E: atención a eventos externos aperiódicos
SE : separación mínima entre eventos
DE : plazo límite ( normalmente DE ≤ SE )
CE : tiempo de cómputo máximo
En un ejecutivo cíclico los procesos esporádicos pueden programarse de
dos formas:
Por muestreo periódico del evento
Por interrupción
398
SISTEMAS EMPOTRADOS
ESPORÁDICOS POR MUESTREO
Se programa el proceso esporádico como un proceso periódico que
consulta si ha llegado un evento, y en tal caso, lo procesa.
Transformamos el proceso esporádico en periódico con D’ = T’ ≤ DE / 2,
y lo planificamos de la forma convencional
» Si el proceso periódico cumple sus plazos, cualquier evento se atiende en
su plazo DE
T’
Proceso periódico
DE
evento
Se consulta, y no hay evento
Hay evento, y se procesa CE
399
SISTEMAS EMPOTRADOS
EJEMPLO 1
Conjunto de procesos a planificar:
Proceso
C
T
D
S
E
1
8
20
P1
3
6
6
P2
2
12
12
Proceso periódico equivalente: D’ = T’= 4 ≤ DE / 2
Proceso
C
T
D
PE
1
4
4
P1
3
6
6
P2
2
12
12
Ciclo principal
» M = mcm(4,6,12) = 12
Ejecuciones a planificar: nE = M/4 = 3 ; n1 = M/6 = 2 ; n2 = M/24 = 1
400
SISTEMAS EMPOTRADOS
EJEMPLO 1
Ciclo secundario
» m ≤ min(4,6,12) => m = 1..4
» m ≥ max(1,2,3) => m = 3..4
» ∃k: 12 = km => m = 3,4
» m+ (m - mcd(m,Ti)) ≤ Di => m = 4
Plan de 3 marcos de duración m=4
E
E
E
E
E
E
1
E
E
E
1
1
2
1
401
SISTEMAS EMPOTRADOS
ESPORÁDICOS POR INTERRUPCIÓN
La llegada del evento produce una interrupción, y el evento se trata
inmediatamente
Basta con reservar tiempo en cada marco para atender el máximo número
de eventos que pueden llegar en un marco:
Cres
⎡m⎤
= ⎢ ⎥C E
⎢ SE ⎥
402
SISTEMAS EMPOTRADOS
EJEMPLO 2
Conjunto de procesos a planificar (primero el más urgente):
Proceso
C
T
D
S
E
1
7
10
P2
3
8
8
P3
2
8
8
P4
2
12
12
Calculamos los ciclos con los periódicos
Ciclo principal
» M = mcm(8,12) = 24
Número de ejecuciones a planificar
» ne2 = M/8 = 3
» ne3 = M/8 = 3
» ne4 = M/12 = 2
403
SISTEMAS EMPOTRADOS
EJEMPLO 2
Ciclo secundario
» m ≤ min(8,12) => m = 1..8
» m ≥ max(2,3) => m = 3..8
» ∃k: 24 = km => m = 3,4,6,8
» m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4,8
Probamos con 3 marcos de duración m=8
En cada uno reservamos tiempo para atender un evento
Cres
⎡m⎤
= ⎢ ⎥ CE
⎢ SE ⎥
404
SISTEMAS EMPOTRADOS
EJEMPLO 2
E
E
E
E
E
E
P2
P2
P2
E
E
E
P2
P2
P2
P3
P3
P3
E
E
E
P2
P2
P2
P3
P3
P3
P4
P4
405
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DEL EJECUTIVO
Mediante un ejemplo:
Cuatro procesos (plazo = periodo) (C,T,D):
A=(1,10,10), B=(3,10,10), C=(2,20,20), D=(8,20,20)
Proceso
C
T
D
A
1
10
10
B
3
10
10
C
2
20
20
D1
2
20
20
D2
6
20
20
Planificación:
» M = 20, m=10
0
A B
6
C
D1
10
A B
14
D2
20
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DEL EJECUTIVO
Ejemplo de implementación en el 68HC08.
Tamaño de marco = número entero de ticks
Ejecutivo cíclico = actividad periódica
» delay basado en el TBM
» Activación basada en los TIM
406
407
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DEL EJECUTIVO
Basado en la TBM y CGMXCKK = 4.9152
Supongamos unidades de tiempo = milisegundos
m = 10 ms
Divisor
µs
N ticks
void Ejecutivo_Ciclico_1(void) {
unsigned int m = 6 ;
unsigned int siguiente ;
unsigned int marco = 0, num_marcos = 2 ;
8 1,627604167 6144,000
Init_Clock() ;
siguiente = Clock() ;
while(1) {
marco = (marco % num_marcos)+1 ;
switch (marco) {
case 1: A; B; C; D1; break ;
case 2: A; B; D2;
break ;
}
siguiente += m ;
delay_until(siguiente) ;
}
16 3,255208333 3072,000
32 6,510416667 1536,000
64 13,02083333
768,000
128 26,04166667
384,000
2048 416,6666667
24,000
8192 1666,666667
6,000
32768 6666,666667
1,500
}
408
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DEL EJECUTIVO
Basado en los TIMER (bus clock = 2.4575)
u.t. = ms
m = 10 ms
#include “timer.h”
Divisor
tick
N ticks
void Ejecutivo_Ciclico_3(void) {
unsigned int m = 24576 ;
unsigned int marco = 0, num_marcos = 2 ;
1 0,406901042 24576,000
Init_OC(m) ;
while(1) {
marco = (marco % num_marcos)+1 ;
switch (marco) {
case 1: A; B; C; D1; break ;
case 2: A; B; D2;
break ;
}
marco_activo = 0 ;
while (marco_activo == 0)
asm wai ; /* espera interrupcion */
}
2 0,813802083 12288,000
4 1,627604167
6144,000
8 3,255208333
3072,000
16 6,510416667
1536,000
32 13,02083333
768,000
64 26,04166667
384,000
}
409
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DEL EJECUTIVO
Basado en los OCs
Posibilidad de detectar desbordamientos de marco
#include “timer.h”
/* timer.h */
volatile unsigned char marco_activo ;
void Init_TIM(unsigned int N_Ticks)
{
T1MODH = N_Ticks/256 ;
void Init_TIM (unsigned int N_Ticks) ;
T1MODL = N_Ticks%256 ;
T1SC &= 0x7F ; // Borrar TOF
TOIE_1 = 1 ;
// Habilitar interrupción
TSTOP_1 = 0 ;
// Activar timer
}
void interrupt 6 Overflow_Handler (void)
{
T1SC &= 0x7F ; /* Borrar TOF */
if (marco_activo)
desbordamiento_de_marco() ;
else
marco_activo = 1 ;
}
410
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
PRIORIDADES E
INTERRUPCIONES
411
SISTEMAS EMPOTRADOS
PLANIFICACION
Métodos:
Planificación estática “off-line”
» Planificación cíclica
Planificación basada en prioridades
» Prioridades estáticas
–
Prioridad al más frecuente (Rate monotonic)
–
Prioridad al más urgente (Deadline monotonic)
» Prioridades dinámicas
–
Proximidad del plazo de respuesta (Earliest deadline first)
–
Prioridad al de menor holgura (Least Laxity First)
412
SISTEMAS EMPOTRADOS
PRIORIDADES
La prioridad es un atributo de las tareas normalmente ligado a su
importancia relativa en el conjunto de tareas.
Planificación por prioridades: en cada momento se ejecuta la tarea más
prioritaria de entre todas las ejecutables (preparadas).
Planificación expulsiva: se abandona inmediatamente la ejecución de la
tarea en ejecución cuando otra más prioritaria pasa al estado preparada
para ejecución.
La prioridad de una tarea puede ser:
Estática: la prioridad permanece
constante a lo largo de la existencia
de la tarea.
Dinámica: la prioridad puede variar
en función del estado o modo de
funcionamiento del sistema.
preparado
nuevo
espera
activo
ejecución
terminado
413
SISTEMAS EMPOTRADOS
PRIORIDADES
Ejemplo:
T1 = (5,20,20)
T2 = (10,40,40)
T3 = (40,80,80)
Prio(T1) > Prio(T2) > Prio(T3)
T1
T2
fin T3
T3
0
10
20
30
40
50
60
70
80
414
SISTEMAS EMPOTRADOS
PRIORIDADES
Factor de utilización
Es una medida de la carga del procesador.
El factor de utilización de una tarea Ti es:
Ui =
Ci
Pi
El factor de utilización total del sistema es
n
n
U = ∑U i = ∑
Ci
Pi utilización está limitado a
=1 factor
i =1 de
Con un solo procesador, iel
» U≤1
415
SISTEMAS EMPOTRADOS
PRIORIDADES
Planificación basada en prioridades
Prioridades estáticas y planificación expulsiva.
Frecuentemente se asignan prioridades a las tareas según su
"importancia".
De esta forma no se puede calcular si se pueden garantizar los plazos
o no. Puede fallar incluso con factores de utilización muy bajos.
Ejemplo:
T
C
P
U
T1
10
50
0.20
T2
2
10
0.20
0.40
a
fin
T1
a
T2
Si hacemos prio(T1) > prio(T2), T2 falla.
0
a
a
a
20
30
fallo
10
416
SISTEMAS EMPOTRADOS
PRIORIDADES
Prioridad al más frecuente (RMS)
Si (plazo de respuesta = periodo) & (tareas periódicas) entonces la
asignación de prioridades más altas a las tareas más frecuentes
(período más corto) es óptima (Liu & Layland, 1973).
Por óptima se entiende que no hay ninguna otra planificación mejor. Si
de esta forma no se obtiene un plan admisible, no se puede obtener
con ningún otro método basado en prioridades estáticas.
Ejemplo:
T
C
P
U
T1
10
50
0.20
T2
2
10
0.20
0.40
a
…
T1
a
a
a
a
T2
0
10
Hacemos ahora prio(T2) > prio(T1), ya que
P2 < P1
terminan a tiempo
20
las dos
tareas30
417
SISTEMAS EMPOTRADOS
PRIORIDADES. GARANTIA DE PLAZOS
Teorema 1 (Liu & Layland): En un sistema de n tareas periódicas
independientes con prioridades asignadas en orden de frecuencia, se
cumplen todos los plazos de respuesta, para cualquier desfase inicial de
las tareas, si
n
U =∑
Ci
≤ n( 21/ n − 1) = U 0 ( n)
P
i =1 i
U0(n) es la utilización mínima garantizada para n tareas.
U 0 (1) = 1.000
U 0 ( 2) = 0.828
U 0 (3) = 0.779
U 0 ( 4) = 0.757
U 0 (5) = 0.743
...
limU 0 (n) = 0.693 = ln 2
n→∞
418
SISTEMAS EMPOTRADOS
PRIORIDADES
Prioridad al más urgente (DMS)
Si (plazo de respuesta ≤ periodo) entonces la asignación de
prioridades más altas a las tareas más urgentes (plazo de respuesta
más corto) es óptima (Leung & Whitehead, 1982).
Ejemplo:
T
C
D
P
T1
6
15
15
T2
6
10
20
DMS => Prio(T1) < Prio(T2)
T1
T2
0
5
10
15
20
25
30
35
40
419
SISTEMAS EMPOTRADOS
PRIORIDADES. GARANTIA DE PLAZOS
Test 1: En un sistema de n tareas periódicas independientes con
prioridades asignadas en orden de urgencia, se cumplen todos los plazos
de respuesta, para cualquier desfase inicial de las tareas, si:
donde
∀i,1 ≤ i ≤ n,
Ci I i
+
≤1
Di Di
i −1 ⎡
D⎤
I i = ∑ ⎢ i ⎥C j
P
j =1 ⎢ j ⎥
Ii se denomina tiempo de interferencia de la tarea Ti
Las tareas esporádicas se consideran como si fueran periódicas con
periodo = al tiempo de separación mínimo
SISTEMAS EMPOTRADOS
IMPLEMENTACIÓN PRIORIDADES
Posibilidades
Núcleo
Sin núcleo, basado en interrupciones
» Una interrupción periódica por proceso periódico
» Una interrupción externa/interna por proceso esporádico
» Código de las tareas → rutina de interrupción
» Planificación expulsiva → interrupciones encajadas
» Prioridades → gestión de quién puede interrumpir a quien
420
SISTEMAS EMPOTRADOS
421
MODELO DE INTERRUPCIONES 68HC08
Secuencia en una interrupción
espera fin instrucción curso (peor caso DIV, 7 ciclos)
Apilar registros de la CPU: PC, A, X, CCR
» NO se apila H (parte alta del registro de índice)
Enmascarar interrupciones (I = 1)
» Por defecto las interrupciones no se anidan
Cargar en el PC el vector de la interrupción pendiente más prioritaria
Ejecución del código de la rutina de interrupción
En el RTI se desapilan los registros de la CPU
» Se retoma el I (se vuelven a habilitar las interrupciones)
» Se retoma el PC (se reanuda el programa interrumpido en la siguiente
instrucción)
422
SISTEMAS EMPOTRADOS
MODELO DE INTERRUPCIONES 68HC08
» Tabla de interrupciones
Source
Reset
SW Iinstruction
IRQ pin
CGM(PLL)
TIM1 channel 0
TIM1 channel 1
TIM1 overflow
TIM2 channel 0
TIM2 channel 1
TIM2 overflow
SPI receiver full
SPI overflow
SPI modefault
SP transmitter empty
SCI receiver overrun
SCI noise fag
SCI raming error
SCI parity error
SCI receiver full
SCI input idle
SCI transmitter empty
SCI transmission complete
Keyboard pin
ADC conversion complete
Timebase
Flag
None
None
IRQF
PLLF
CH0F
CH1F
TOF
CH0F
CH1F
TOF
SPRF
OVRF
MODF
SPTE
OR
NF
FE
PE
SCRF
IDLE
SCTE
TC
KEYF
COCO
TBIF
Mask
None
None
IMASK
PLLIE
CH0IE
CH1IE
TOIE
CH0IE
CH1IE
TOIE
SPRIE
ERRIE
ERRIE
SPTIE
ORIE
NEIE
FEIE
PEIE
SCRIE
ILIE
SCTIE
TCIE
IMASKK
AIEN
TBIE
INT Register
Flag
Priority VectorAddress
None
0
$FFFE–$FFFF
None
0
$FFFC–$FFFD
IF1
1
$FFFA–$FFFB
IF2
2
$FFF8–$FFF9
IF3
3
$FFF6–$FFF7
IF4
4
$FFF4–$FFF5
IF5
5
$FFF2–$FFF3
IF6
6
$FFF0–$FFF1
IF7
7
$FFEE–$FFEF
IF8
8
$FFEC–$FFED
IF9
9
$FFEA–$FFEB
Code Warrior
Int Num
1
2
3
4
5
6
7
8
9
10
IF10
IF11
10
11
$FFE8–$FFE9
$FFE6–$FFE7
11
12
IF12
12
$FFE4–$FFE5
13
IF13
13
$FFE2–$FFE3
14
IF14
IF15
IF16
14
15
16
$FFE0–$FFE1
$FFDE–$FFDF
$FFDC–$FFDD
15
16
17
423
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Activación de procesos:
Periódicos
» OCs
–
TIM1 overflow, TIM1 channel 0, TIM1 channel 1
–
TIM2 overflow, TIM2 channel 0, TIM2 channel 1
Esporádicos
» ICs
–
TIM1 channel 0, TIM1 channel 1
–
TIM2 channel 0, TIM2 channel 1
» IRQ, KBI
» SCI, SPI
424
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Características generales de módulo TIMER
Dispone de 2 “timer” independientes TIM1 y TIM2
Cada TIM dispone a su vez de 2 canales
Para cada timer
» Basado en un contador de 16 bits
» Preescalado programable del reloj de entrada
» 2 canales, para cada canal
–
input capture
–
output compare
flanco subida, flanco bajada o cualquier cambio
activar, desactivar o cambiar una patilla
» generar interrupciones canal0, canal1 o desbordamiento contador
Comparte el patillaje con el PTD
425
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Diagrama de bloques
de un TIM
426
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Registro de estado y control TSC
TOF indica que se ha producido overflow.
» Borrado, leer TSC cuando TOF=1 y después escribir “0” en TOF
TOIE
habilitación de interrupciones
» TOIE=1 interrupciones habilitadas
» TOIE=0 interrupciones deshabilitadas
TSTOP
TRST
parada del contador del TIM
reset del TIM (contador y preescalado)
427
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Función INPUT CAPTURE
CHxIE, habilitación de
interrupciones
CHxF, Chanel x Flag
» CHxF = 1
activo
ha ocurrido un flanco
» Borrado: lectura de TSCx con
CHxF activo y después escritura
de un 0
MSxB:MSxA
00
00
00
ELSxB:ELSxA
01
10
11
» CHxIE = 1
habilitadas
» CHxIE = 0
deshabilitadas
Configuración como input capture
y selección del tipo de flanco
Configuración CHx
Input capture sólo flanco subida
Input capture sólo flanco bajada
Input capture cualquier flanco
428
SISTEMAS EMPOTRADOS
RECURSOS EN EL 68HC08
Función OUTPUT COMPARE
CHxIE, habilitación de
interrupciones
CHxF, Chanel x Flag
» CHxF = 1 se ha producido la
igualdad TCNT = TCHx
» borrado: lectura de TSCx con
CHxF activo y después escritura
de un 0
MSxB:MSxA
01
01
01
01
ELSxB:ELSxA
00
01
10
11
» CHxIE = 1 habilitadas
» CHxIE = 0 deshabilitadas
Configuración como ouput
compare y selección del tipo de
flanco
Configuración CHx
OC sin actuar sobre pin
Conmutar salida cuando expira
Salida a "0" cuando expira
Salida a "1" cuando expira
429
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
Sistema con cuatro tareas
3 tareas periódicas: P1, P2, P3
1 tarea esporádica: E
Los datos de los procesos en ms:
Proceso
C
T
D
S
E
0.05
0.5
50
P1
1
5
2
P2
2
10
5
P3
1
15
15
Asignación de prioridades: primero el más urgente
» Prio(E) > Prio(P1) > Prio(P2) > Prio(P3)
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
Verificación de los plazos de respuesta:
CE + I E = 0.05 + 0 ≤ DE = 0.5
⎡D ⎤
C1 + ⎢ 1 ⎥CE = 1 + 0.05 ≤ D1 = 2
⎢ PE ⎥
⎡D ⎤
⎡D ⎤
⎡2⎤ ⎡ 2 ⎤
C2 + ⎢ 2 ⎥C1 + ⎢ 2 ⎥C E = 2 + ⎢ ⎥1 + ⎢ ⎥ 0.05 = 3.05 ≤ D2 = 5
⎢ 5 ⎥ ⎢ 50 ⎥
⎢ P1 ⎥
⎢ PE ⎥
⎡D ⎤
⎡D ⎤
⎡D ⎤
⎡15 ⎤ ⎡15 ⎤
⎡15 ⎤
C3 + ⎢ 3 ⎥C1 + ⎢ 3 ⎥C2 + ⎢ 3 ⎥C E = 1 + ⎢ ⎥1 + ⎢ ⎥ 2 + ⎢ ⎥ 0.05 = 8.05 ≤ D3 = 15
⎢ 5 ⎥ ⎢10 ⎥
⎢ 50 ⎥
⎢ P1 ⎥
⎢ P2 ⎥
⎢ PE ⎥
430
431
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
Por cada TIMER en un HC08, se dispone de 3 interrupciones periódicas:
Source
TIM1 channel 0
TIM1 channel 1
TIM1 overflow
Flag
CH0F
CH1F
TOF
Mask
CH0IE
CH1IE
TOIE
INT Register
Flag
Priority VectorAddress
IF3
3
$FFF6–$FFF7
IF4
4
$FFF4–$FFF5
IF5
5
$FFF2–$FFF3
Prio(CH0F) > Prio(CH1F) > Prio(TOF)
TIMER1 channel0
P1
TIMER1 channel1
P2
TIMER1 overflow
P3
Además se debe cumplir
Periodo T1CNT > Periodos OCs
Code Warrior
Int Num
4
5
6
SISTEMAS EMPOTRADOS
432
EJEMPLO DE IMPLEMENTACIÓN
Tareas periódicas
P1
void interrupt 4 P1_Handler (void) {
unsigned char old_CH1IE_1, old_TOIE_1 ;
/* Reconocimiento de la interrupcion */
if (CH0F_1) CH0F_1=0;
/* Salvar estado de interrupciones correspondientes a tareas menos prioritarias */
old_CH1IE_1=CH1IE_1; old_T0IE_1=TOIE_1;
/* Se enmascaran las interrupciones pertenecientes a tareas menos
prioritarias para evitar que le quiten el procesador a la tarea actual */
CH1IE_1=0; TOIE_1=0;
/* Se permiten interrupciones encajadas para que puedan entrar en ejecucion de
forma inmediata (expulsion) aquellas tareas de mas prioridad que la presente */
asm cli;
/* Codigo de la tarea */
accion_P1 () ;
/* Programacion nueva interrupcion*/
T1CH0 = (T1CH0 + T1)%moduloT1 ;
/* Se restaura la habilitación de las interrupciones de tareas de menor prioridad
que estuviesen habilitadas al producirse presente interrupcion */
asm sei;
CH1IE_1 =old_CH1IE_1 ; TOIE_1= old_T0IE_1 ;
}
433
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
P2 y P3
void interrupt 5 P2_Handler (void) {
unsigned char old_TOIE_1 ;
if (CH1F_1) CH1F_1=0;
old_T0IE_1=TOIE_1;
TOIE_1=0;
asm cli;
accion_P2 () ;
T1CH1 = (T1CH1 + T2)%moduloT1 ;
asm sei;
TOIE_1= old_T0IE_1 ;
}
void interrupt 6 P3_Handler (void) {
if (TOF_1) TOF_1=0;
asm cli;
accion_P3 () ;
asm sei;
}
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
E
void interrupt 15 E_Handler (void) {
unsigned char old_CH0IE_1, old_CH1IE_1, old_TOIE_1 ;
/* Reconocimiento de la interrupcion */
ACKK = 1 ;
/* Salvar estado de interrupciones correspondientes a tareas menos prioritarias */
old_CH0IE_1=CH0IE_1; old_CH1IE_1=CH1IE_1; old_T0IE_1=TOIE_1;
/* Se enmascaran las interrupciones pertenecientes a tareas menos
prioritarias para evitar que le quiten el procesador a la tarea actual */
CH0IE_1=0; CH1IE_1=0; TOIE_1=0;
/* Se permiten interrupciones encajadas para que puedan entrar en ejecucion de
forma inmediata (expulsion) aquellas tareas de mas prioridad que la presente */
asm cli;
/* Codigo de la tarea */
accion_E () ;
/* Se restaura la habilitación de las interrupciones de tareas de menor prioridad
que estuviesen habilitadas al producirse presente interrupcion */
asm sei;
CH0IE_1 =old_CH0IE ; CH1IE_1 =old_CH1IE ; TOIE_1= old_T0IE_1 ;
}
434
435
SISTEMAS EMPOTRADOS
EJEMPLO DE IMPLEMENTACIÓN
Inicialización
unsigned int T1, T2, T3 ;
void Init_System(void)
{
unsigned int milisegundo ;
/* Borrar posibles banderines activados*/
if(CH0F_1) CH0F_1=0;
if(CH1F_1) CH1F_1=0;
if(TOF_1) TOF_1=0;
ACKK = 1 ;
/* Habilitar interrupciones*/
CH0IE_1=1;
CH1IE_1=1;
TOIE_1=1;
INTKBIER |= 0x02 ; // PTA1 entrada interrupcion
/* Parar el reloj y ponerlo a 0*/
TSTOP_1=1;
TRST_1=1;
/* Ajuste preescalado*/
/* PS2..0 = 000 => tick = 0.407 us */
PS2_1=0; PS1_1=0; PS0_1=0;
milisegundo = 2457 ; //ticks
/*
T1
T2
T3
/* Desconcetar OC de Pines*/
ELS0B_1=0; ELS0A_1=0;
ELS1B_1=0; ELS1A_1=0;
Periodos de las tareas */
= 5 * milisegundo ;
= 10 * milisegundo ;
= 15 * milisegundo ;
/* Fijar las próximas interrupciones */
T1CH0 =
T1CH1 =
T1MODH=
T1MODL=
/* Output Compare*/
MS0B_1=0; MS0A_1=1;
MS1A_1=1;
/* KBI, tarea esporadica E */
MODEK = 0 ; // Solo flanco de bajada
PTAPUE |= 0x02 ; // PTA1 con pullup
DDRA &= 0xFD ; // PTA1 entrada
T1 ;
T2 ;
(unsigned char)(T3 >> 8) ;
(unsigned char)(T3 & 0xFF) ;
/* Reloj en marcha*/
TSTOP_1=0;
void main (void) {
Init_System () ;
while (1) ;
asm cli ;
}
}
SISTEMAS EMPOTRADOS
PROGRAMACIÓN DE UN EJECUTIVO
Basado en un timer + Posibilidad de tarea de fondo
void interrupt 6 Overflow_Handler (void)
{
rearme_interrupcion() ;
if (marco_activo)
desbordamiento_de_marco() ;
else {
marco_activo = 1 ;
asm cli ; /* Interrupciones encajadas */
Ejecuta_un_marco() ;
marco_activo = 0 ;
}
}
void main(void) {
void Ejecuta_un_marco(void) {
unsigned int m = … ;
static int marco = 0 ;
int num_marcos = 2 ;
Init_OC (m);
while(1)
marco = (marco % num_marcos)+1 ;
procesos_acriticos() ;
switch (marco) {
}
case 1: A; B; C; D1; break ;
case 2: A; B; D2;
break ;
}
}
436
437
SISTEMAS EMPOTRADOS
SISTEMAS EMPOTRADOS
NUCLEOS
MULTITAREA
438
SISTEMAS EMPOTRADOS
APLICACION MULTITAREA CON NÚCLEO
Una aplicación multitarea está
compuesta por:
Un conjunto de tareas
Un núcleo
Las tareas compiten por
Tiempo de ejecución (CPU)
Memoria
Otros recursos (timers, E/S, ...)
El núcleo gestiona todos estos
recursos y ofrece servicios a las
tareas
Reparto del tiempo de procesador
Creación y destrucción de tareas
Primitivas de comunicación y
sincronización entre tareas
Reloj y funciones basadas en el
tiempo (delays, time outs)
Captura todas las interrupciones y
da servicio a algunas
Gestión de memoria
439
SISTEMAS EMPOTRADOS
APLICACION MULTITAREA CON NÚCLEO
Núcleo = tarea de más prioridad
El núcleo mantiene un conjunto de
listas de tareas en diferentes estados
El núcleo entra en la CPU
Interrupciones
Finales de ejecución
preparado
nuevo
Comunicaciones, servicios
espera
activo
ejecución
terminado
440
SISTEMAS EMPOTRADOS
APLICACION MULTITAREA
Una tarea está compuesta por:
Un código
Una pila propia
Variables globales
El núcleo mantiene una estructura de
datos por cada tarea: el TCB (“task
control block”)
Identificación de la tarea
Punto de entrada
Base de la pila
Prioridad
Contador de programa
Puntero de pila
Contexto
» Registros de la CPU
» Otras variables
441
SISTEMAS EMPOTRADOS
Ejemplo: control de temperatura y nivel
V
» T: temperatura
H
T
» H: nivel de líquido
» C: ajuste del calefactor
» V: ajuste de la válvula
Periodo de muestreo deseado:
» Temperatura: 5 s
» Nivel: 1 s
C
442
SISTEMAS EMPOTRADOS
Ejemplo: control de temperatura y nivel
void CONTROL_TEMP(void) {
...
Time Siguiente ;
Time Periodo = 5000 ;
Siguiente = Clock () ;
while(1) {
MEDIR(&T) ;
CALCULAR_ACCION(T,&C) ;
GENERAR(C) ;
Siguiente += Periodo ;
delay_until (Siguiente) ;
}
}
void CONTROL_NIVEL(void) {
...
Time Siguiente ;
Time Periodo = 5000 ;
Siguiente = Clock () ;
while(1) {
MEDIR(&H) ;
CALCULAR_ACCION(H,&V) ;
GENERAR(V) ;
Siguiente += Periodo ;
delay_until (Siguiente) ;
}
}
void main()
{
/* crear las tareas */
attr_init_T(&atributos);
task_create(&thread_T, &atributos,
(void *)CONTROL_TEMP, void);
attr_init_H(&atributos);
task_create(&thread_H, &atributos,
(void *)CONTROL_NIVEL, void);
}
443
SISTEMAS EMPOTRADOS
NÚCLEOS Y PLANIFICACIÓN
Los núcleos de sistemas empotrados utilizan siempre la planificación
basada en prioridades:
Planificación expulsiva / no expulsiva
Estática
SISTEMAS EMPOTRADOS
444
COMUNICACIÓN Y SINCRONIZACIÓN
La dificultad de la programación concurrente estriba en las
interacciones de los procesos:
» Cooperación para un fin común
» Competencia por el uso de recursos
Son necesarias operaciones de comunicación y sincronización entre
procesos:
» Sincronización: cumplir restricciones en el orden en el que se ejecutan sus
acciones
» Comunicación: paso de información de un proceso a otro
Hay dos formas de realizarlo:
» Datos compartidos
» Paso de mensajes
445
SISTEMAS EMPOTRADOS
EXCLUSIÓN MUTUA
Dos procesos compiten cuando comparten:
un recurso
una variable
El acceso al recurso o a la variable debe ser en exclusión mutua.
Sección crítica: secuencia de instrucciones que debe ejecutarse en
exclusión mutua
Mecanismos de sincronización ofrecidos por un núcleo
Prioridades
Semáforos
Monitores
SISTEMAS EMPOTRADOS
SECCIÓN CRÍTICA NO EXPULSABLE
Evitar expulsiones cuando se ejecuta una sección crítica
Enmascarar interrupciones
» No entra el núcleo, ni el reloj, ...
Elevar al máximo la prioridad del código
» Posibilidad de cambiar en tiempo de ejecución la prioridad de un tarea
void Servicio (...) {
Mask_all_Interrupts () ;
Service_Code() ; /* seccion critica */
Unmask_all_Interrupts () ;
return ;
void Servicio (...) {
}
Nominal = Get_Priority () ;
Set_Priority (HIGH) ;
Service_Code() ; /* seccion critica */
Set_Priority (Nominal) ;
return ;
}
446
447
SISTEMAS EMPOTRADOS
SEMÁFORO
Es una variable que toma valores enteros no negativos
(counting semaphore)
S : semaphore := valor_inicial ;
wait(S):
si S > 0, S := S - 1
si no, suspender el proceso
signal(S):
si hay procesos esperando,
pasar uno de ellos a preparado
si no, S := S + 1
Las operaciones signal y wait son atómicas.
Los semáforos tienen asociada una cola de procesos suspendidos en
espera.
Los semáforos son gestionados por el núcleo de ejecución
448
SISTEMAS EMPOTRADOS
SINCRONIZACIÓN CONDICIONAL
Sincronización condicional: una acción de un proceso sólo se puede
ejecutar si otro proceso está en un cierto estado o si ha ejecutado ciertas
acciones.
Un semáforo binario inicializado a cero sirve para comunicar que se
cumple la condición
condicion: semaphore := 0 ;
proceso P1; --espera
principio
repetir
<parte 1a>
Wait(condicion) ;
<parte 1b>
fin repetir;
fin P1 ;
proceso P2; -- avisa
principio
repetir
<parte 2a>
Signal(condicion)
<parte 2b>
fin repetir;
fin P2 ;
» La parte 1b no se ejecuta hasta que P2 avisa que se cumple la condición
necesaria
449
SISTEMAS EMPOTRADOS
SEMÁFORO
El problema de
hacer cuadernillos:
programa GRAPAR_HOJAS ;
S: semaphore := 0;
proceso AMONTONAR;
principio
repetir
coger una hoja de cada montón ;
dejar el grupo en la mesa ;
signal(S) ;
hasta que se acaben las hojas;
fin ;
proceso GRAPAR ;
principio
repetir
wait(S) ;
tomar un grupo de la mesa ;
graparlo ;
hasta que se acaben los grupos;
fin ;
fin GRAPAR_HOJAS;
450
SISTEMAS EMPOTRADOS
SEMÁFORO: EXCLUSIÓN MUTUA
La exclusión mutua puede asegurarse con un semáforo binario, inicializado
a uno
» mutex (MUTual EXclusion)
mutex: semaphore := 1 ;
proceso P1;
principio
repetir
Wait(mutex) ;
<sección crítica>
Signal(mutex)
<sección no crítica>
fin repetir;
fin P1 ;
proceso P2;
principio
repetir
Wait(mutex) ;
<sección crítica>
Signal(mutex)
<sección no crítica>
fin repetir;
fin P2 ;
CUIDADO: si un proceso olvida liberar
el mutex, el recurso queda bloqueado
451
SISTEMAS EMPOTRADOS
MONITOR
Es un módulo que encapsula las secciones críticas asociadas a una
variable o un dispositivo físico en forma de procedimientos que son
llamados por los procesos
Sólo se puede acceder al
elemento compartido a
través de los procedimientos
del monitor
Las llamadas a los
procedimientos del monitor
se ejecutan en exclusión
mutua.
Monitor Contador;
n: entero := 0 ;
procedimiento incrementa;
principio
n:=n+1;
fin;
procedimiento escribe_borra;
principio
escribir n;
n:=0;
fin;
fin Contador ;
452
SISTEMAS EMPOTRADOS
MONITOR
Hay lenguajes que soportan monitores
» ej: protected de Ada 95
Pueden programarse
mediante semáforos
/* fichero contador.c */
#include “contador.h”
#include <semaphore.h>
/* variables privadas del monitor */
static semaphore mutex_contador ;
static int n = 0 ;
/* fichero contador.h */
void incrementa(void) ;
void escribe_borra(void) ;
void incrementa(void) {
wait(mutex_contador) ;
n:=n+1;
signal(mutex_contador) ;
}
void escribe_borra(void) {
wait(mutex_contador) ;
escribir(n);
n:=0;
signal(mutex_contador) ;
}
453
SISTEMAS EMPOTRADOS
EXCL. MUTUA E INTERRUPCIONES
Las rutinas de servicio de interrupciones (ISR) se ejecutan en concurrencia
con el resto de procesos.
Exclusión mutua => inhibir interrupciones
static int n = 0 ;
void rutina_interrupcion(void) {
n:=n+1;
}
void escribe_borra(void) {
inhibir_interrupcion() ;
escribir(n);
n:=0;
activar_interrupcion() ;
}
454
SISTEMAS EMPOTRADOS
BUZÓN
Comunicación asíncrona o por mensajes
Un proceso P produce y envía una secuencia de datos a otro proceso C
que los recibe y consume. Los datos son transmitidos en porciones
discretas denominadas mensajes.
Es posible que P produzca un mensaje cuando C no esté en disposición
de recibirlo. Para evitar que P espere se introduce un área de
almacenamiento de mensajes donde P puede colocar sus mensajes hasta
que C los lea: BUZON o COLA DE MENSAJES
P
B
C
Es posible que un buzón tenga varios procesos emisores y varios
receptores.
455
SISTEMAS EMPOTRADOS
BUZÓN
Manejo de buzones:
B : buffer
send(M,B)
max
of
T
receive(M,B)
La política de manejo de un buzón puede ser:
Si al enviar un mensaje el buzón está lleno:
» el emisor espera hasta que haya espacio
» el emisor espera, con un tiempo máximo
» el mensaje se descarta
» se descarta otro mensaje (p.ej. el más antiguo)
Si al solicitar un mensaje el buzón está vacío:
» el receptor espera hasta que haya mensaje
» el receptor espera, con un tiempo máximo
» se le indica que no hay mensaje y puede continuar
456
SISTEMAS EMPOTRADOS
NÚCLEOS PARA µC y DSPs
TMS320F2812
» DSP/BIOS OS (Texas Instruments)
68HC08
» CMX-Tiny+ (CMX Systems)
–
Compatible con CodeWarrior
» ProOSEK (OSE Systems)
Descargar