Modo 1 - PoliformaT
Modo 1 - PoliformaT
Modo 1 - PoliformaT
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Tema 2:<br />
Expansión de E/S digital<br />
Periféricos e Interfaces Industriales<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada
Expansión de Entrada/Salida digital<br />
Índice<br />
• Introducción<br />
• Expansión de E/S con lógica discreta<br />
– Mapeado de entradas adicionales<br />
– Mapeado de salidas adicionales<br />
• Expansión de E/S con circuitos especializados: El<br />
PPI 8255<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
2de 55
Expansión de Entrada/Salida digital<br />
Índice<br />
• El PPI8255 (cont.)<br />
– Arquitectura<br />
• Conexión al microcontrolador<br />
– El registro de control<br />
• Configuración del modo de operación<br />
• Puesta a 0 ó 1 de un bit del puerto C<br />
– <strong>Modo</strong>s de operación<br />
• <strong>Modo</strong> 0 (básico): entrada o salida<br />
• <strong>Modo</strong> 1 (protocolo): entrada o salida<br />
• Existe un modo 2 (bidireccional con protocolo)<br />
– El puerto C en los modos con protocolo<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
3de 55
Expansión de Entrada/Salida digital<br />
Introducción<br />
• Necesidad de expansión<br />
– A veces la elección del uC depende de factores ajenos<br />
al diseño<br />
• Coste<br />
• Disponibilidad<br />
• Herramientas de desarrollo<br />
• Posibilidad de reaprovechar sistemas/tarjetas<br />
• Conocimientos previos, curva de aprendizaje, tiempo<br />
– Otras veces la elección del uC depende de sus<br />
periféricos internos, pero necesitamos más capacidad<br />
de entrada/salida de la que disponemos sólo con el uC<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
4de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Con lógica discreta se puede ampliar la E/S<br />
utilizando como vía de acceso al uC<br />
– Puertos de E/S de propósito general<br />
• Los puertos se comparten entre varios dispositivos<br />
– La memoria externa de datos (XRAM)<br />
• “Mapeando” el dispositivo dentro del área de memoria<br />
• Las líneas del bus (direcciones, datos, control) se comparten<br />
entre los dispositivos, las memorias externas del sistema, etc.<br />
• Suele ser la solución más lógica cuando, por otros motivos<br />
(generalmente requisitos de memoria), ya se dispone de un bus<br />
de datos externo<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
5de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Idea general: Multiplexar los datos de entrada<br />
• Si tenemos K entradas de W bits, nos bastará con<br />
– W pines de entrada<br />
– S pines de salida (S >= 2 K )<br />
– MUX de K valores de W bits cada uno<br />
µC<br />
Dato<br />
multiplexado<br />
W<br />
selección<br />
MUX<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
S<br />
W<br />
...<br />
W<br />
E 0<br />
E K-1<br />
6de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo: Multiplexar 8 entradas E0 a E7 de 1 bit cada<br />
una con menos de 8 líneas en el uC<br />
• A) Haciendo 8 lecturas de 1 bit para obtener toda la<br />
información<br />
– 1 entrada, 3 salidas<br />
– Sw para leer todas las entradas, para leer 1 entrada<br />
µC P1.7<br />
P1.2 a P1.0<br />
Dato<br />
multiplexado<br />
selección<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
1<br />
3<br />
1<br />
...<br />
1<br />
E 0<br />
E 7<br />
7de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• A) 8 lecturas de 1 bit<br />
1. Sw para leer todas las entradas en un vector e<br />
2. Sw para leer una entrada i<br />
for (i=0; i < 8; i++) {<br />
/* Quitar selección del P1 */<br />
P1 &= 0xF8;<br />
/* Selección = i */<br />
P1 |= (i & 0x07);<br />
/* Leer entrada */<br />
e[i] = P1^7;<br />
}<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
int leer_entrada (int i) {<br />
}<br />
i ∈ [0,7]<br />
/* Quitar selección del P1 */<br />
P1 &= 0xF8;<br />
/* Selección = i */<br />
P1 |= (i & 0x07);<br />
/* Leer entrada */<br />
return P1^7;<br />
8de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• B-1) Haciendo 2 lecturas de 4 bits utilizando 4 MUXes 2-a-1<br />
µC<br />
– 4 entradas, 1 salida<br />
– Sw para leer todas las entradas, para leer 1 entrada<br />
P1.4 a P1.7<br />
P1.1 a P1.0<br />
Dato<br />
multiplexado<br />
selección<br />
4 x MUX 2-a-1<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
4<br />
1<br />
4<br />
4<br />
E 0 , E 1 , E 2 , E 3<br />
E 4 , E 5 , E 6 , E 7<br />
9de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• B-1) Haciendo 2 lecturas de 4 bits con MUXes<br />
1. Sw para leer todas las entradas en un vector e<br />
2. Sw para leer una entrada i<br />
for (i=0; i < 2; i++) {<br />
/* Quitar selección del P1 */<br />
P1 &= 0xFE;<br />
/* Selección = i */<br />
P1 |= (i & 0x01);<br />
/* Leer 4 entradas */<br />
e[4*i+0] = P1^4; e[4*i+1] = P1^5;<br />
e[4*i+2] = P1^6; e[4*i+3] = P1^7;<br />
}<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
10 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• B-1) Haciendo 2 lecturas de 4 bits con MUXes<br />
1. Sw para leer<br />
todas las entradas<br />
2. Sw para leer<br />
una entrada i<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
int leer_entrada (int i) {<br />
/* Quitar selección del P1 */<br />
P1 &= 0xFE;<br />
/* Selección = i/4 (bloque) */<br />
P1 |= ((i/4)) & 0x01);<br />
/* Leer entrada */<br />
switch (i%4) {<br />
case 0: return P1^4;<br />
case 1: return P1^5;<br />
case 2: return P1^6;<br />
default: break; }<br />
return P1^7; }<br />
11 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• B-2) Haciendo 2 lecturas de 4 bits utilizando un ‘244<br />
– 4 entradas, 1 ó 2 salidas<br />
– ‘244 = 74ls244, 74hc244, 74hct244, ...<br />
1A0 - 1A3 4 4 1Y0 - 1Y3<br />
/1OE<br />
2A0 - 2A3 4 4 2Y0 - 2Y3<br />
/2OE<br />
‘244<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
12 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
µC<br />
• B-2) Haciendo 2 lecturas de 4 bits utilizando un ‘244<br />
– 4 entradas, 1 ó 2 salidas<br />
– ‘244 = 74ls244, 74hc244, 74hct244, ...<br />
Dato<br />
multiplexado<br />
selección<br />
1<br />
4<br />
E0 , E1 ,<br />
E2 , E3 E4 , E5 ,<br />
E6 , E7 Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
4<br />
4<br />
Dato<br />
multiplexado<br />
selA<br />
selB<br />
1 salida 2 salidas<br />
1<br />
1<br />
13 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• B-2) Haciendo 2 lecturas de 4 bits utilizando ‘244<br />
– Si se utiliza 1 salida, el sistema es funcionalmente idéntico al B-1<br />
– Si se utilizan 2 salidas (selA, selB) ahorramos el inversor, pero ...<br />
» Peligro: Podemos crear un cortocircuito si activamos<br />
simultáneamente ambos triestados<br />
(selA = selB = 0)<br />
» Ejercicio 1: Sw para leer todas las entradas<br />
» Ejercicio 2: Sw para leer una entrada<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
14 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• C) Mapeando un integrado ‘244 en el mapa de memoria<br />
– Solución interesante si ya se usan memorias externas o existen<br />
otros dispositivos mapeados en memoria<br />
» El mapeado no supone la sobrecarga adicional de los buses<br />
de direcciones y datos, pues ya se usan<br />
– 1 línea adicional de selección (/CS244 )<br />
» /CS244 se conecta a ambos /OE, y se leen las 8 entradas en<br />
una sola operación<br />
» /CS244 proviene del decodificador, no del uC<br />
– Sw para leer todas las entradas, para leer 1 entrada<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
15 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
4 4<br />
4<br />
• C) Mapeando un integrado ‘244 en el mapa de memoria<br />
E7-E0 4<br />
≈<br />
8 8<br />
D7-D0 uC<br />
A15-A0 uC<br />
Circuito<br />
Decodif.<br />
8 8<br />
/RD uC<br />
/WR uC<br />
– También podríamos haber hecho /CS 244 OR /RD uC para activar el<br />
‘244 y garantizar así que la operación del uC es una lectura<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
/CS 244<br />
DATOS<br />
DIR<br />
RAM-1<br />
/CS<br />
/RD<br />
/WR<br />
DATOS<br />
DIR<br />
RAM-2<br />
/CS<br />
/RD<br />
/WR<br />
16 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las entradas<br />
– Ejemplo (cont):<br />
• C) Mapeando un integrado ‘244 en el mapa de memoria<br />
1. Sw para leer todas las entradas en un vector e<br />
2. Sw para leer una entrada i<br />
typedef unsigned char byte;<br />
/* Variable global en dir. fija */<br />
xdata byte ent_244 at 0x8000;<br />
...<br />
for (i=0; i < 8; i++) {<br />
e[i] = (ent_244 >> i) & 0x01;<br />
}<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
typedef unsigned char byte;<br />
/* Variable global en dir. fija */<br />
xdata byte ent_244 at 0x8000;<br />
...<br />
int leer_entr (int i) {<br />
return (ent_244 >> i) & 0x01;<br />
}<br />
17 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
µC<br />
– Idea general: Demultiplexación<br />
• Si tenemos K salidas de W bits, nos bastará con<br />
W<br />
S<br />
– W pines de salida para datos<br />
– K latches de W bits cada uno<br />
– S ó S+1 pines para<br />
la selección del latch<br />
Dato multiplexado<br />
selección<br />
escritura<br />
DEC<br />
G<br />
...<br />
Latch<br />
LE<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
...<br />
Latch<br />
LE<br />
W<br />
W<br />
S 0<br />
S K-1<br />
D0-<br />
D7<br />
LE<br />
/OE<br />
latch ‘573<br />
D<br />
E<br />
Q<br />
D 0<br />
LE<br />
1 2 3<br />
Q 1 2<br />
O0-<br />
O7<br />
18 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />
– Sw para escribir en una salida<br />
P1.3 a P1.0<br />
µC<br />
P1.5, P1.4<br />
P1.7<br />
2<br />
Dato multiplexado<br />
4 selección<br />
escritura<br />
DEC<br />
G<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Latch S0<br />
LE<br />
4<br />
Latch<br />
LE<br />
Latch<br />
LE<br />
4<br />
4<br />
S1<br />
S2<br />
19 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />
– Sw para escribir en una salida s el dato d<br />
void escribir_sal (int s, char dato) {<br />
/* Eliminar todo menos P1.6, decodificador desactivado */<br />
P1 &= 0x40;<br />
}<br />
P1 |= (dato & 0x0F); /* A1. Añadir dato (4 bits) */<br />
P1 |= ((s & 0x03)
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• A) Utilizando 2 líneas de selección, 1 línea de escritura<br />
– Sw para escribir en una salida s el dato d<br />
A1. P1 |= (dato & 0x0F); A2. P1 |= ((s & 0x03)
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• B) Utilizando 2 líneas de selección<br />
– Sw para escribir en una salida<br />
P1.3 a P1.0<br />
P1.5, P1.4<br />
µC<br />
4<br />
2<br />
Dato multiplexado<br />
selección<br />
DEC<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Latch<br />
LE<br />
Latch<br />
LE<br />
Latch<br />
LE<br />
4<br />
4<br />
4<br />
S0<br />
S1<br />
S2<br />
22 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• B) Utilizando 2 líneas de selección<br />
– Sw para escribir en una salida s el dato d<br />
void escribir_sal (int s, char dato) {<br />
/* Eliminar todo menos P1.7 y P1.6, deco activa salida 3 */<br />
P1 = (P1 & 0xC0) | 0x30;<br />
}<br />
P1 |= (dato & 0x0F); /* A1. Añadir dato (4 bits) */<br />
P1 |= ((s & 0x03)
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• B) Utilizando 2 líneas de selección<br />
– Sw para escribir en una salida<br />
A1. P1 |= (dato & 0x0F); A2. P1 |= ((s & 0x03)
Expansión de Entrada/Salida digital<br />
S0<br />
S1<br />
S2<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
4<br />
4<br />
4<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• C) Mapeando los latches<br />
Latch<br />
LE<br />
Latch<br />
LE<br />
Latch<br />
LE<br />
– Sw para escribir en una salida<br />
CS S2<br />
CS S1<br />
4<br />
CS S0<br />
A15-A0 uC<br />
Circuito<br />
Decodif.<br />
Activas a nivel<br />
alto (como LE)<br />
D7-D0 uC<br />
– También podíamos haber operando CS Si con AND NOT(/WR uC )<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
/RDuC /WRuC DATOS<br />
DIR<br />
RAM-1<br />
/CS<br />
/RD<br />
/WR<br />
DATOS<br />
DIR<br />
RAM-2<br />
/CS<br />
/RD<br />
/WR<br />
25 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• C) Mapeando los latches<br />
– Sw para escribir en una salida s el dato d<br />
/* Supondremos que el decodificador activa las<br />
salidas /CS de los latches en las<br />
direcciones 0x8000, 0x8001 y 0x8002 */<br />
xdata byte salidas[3] at 0x8000;<br />
void escribir_sal (int s, char dato) {<br />
/* Esto genera un “MOVX @DPTR, A” con A = dato y<br />
DPTR = 0x8000, 0x8001 ó 0x8002 (en función de s) */<br />
salidas[s % 3] = dato; /* también “dato & 0x0F” */<br />
}<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
26 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con lógica discreta<br />
• Expansión de las salidas<br />
– Ejemplo: Construir 3 salidas S0 a S2 de 4 bits cada una<br />
con menos de 8 líneas en el uC<br />
• Ejercicio: Diseñar una nueva solución<br />
– Mapeando dos latches de 8 bits<br />
– S0 y S1 en el primer latch, S2 en el segundo latch<br />
– Sw para escribir en una salida s el dato d<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
27 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con circuitos<br />
especializados<br />
• Factores de diseño en la elección entre la<br />
expansión de E/S con lógica discreta o con<br />
circuitos especializados<br />
– Factores dependientes del caso:<br />
• Cantidad de líneas a expandir<br />
• Circuito de decodificación resultante<br />
– A más dispositivos, más complejo/caro/grande/...<br />
• Periféricos con modos de comunicación específicos<br />
– Generalmente protocolos de handshake<br />
– Dichos protocolos pueden estar directamente soportados por los<br />
circuitos especializados de E/S<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
28 de 55
Expansión de Entrada/Salida digital<br />
Expansión de E/S con circuitos<br />
especializados<br />
• Factores de diseño en la elección entre la<br />
expansión de E/S con lógica discreta o con<br />
circuitos especializados<br />
– Factores ajenos:<br />
• Preferencia personal<br />
• Coste del sistema resultante<br />
• Inventario disponible de elementos<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
29 de 55
Expansión de Entrada/Salida digital<br />
El PPI8255<br />
• El PPI8255 es un dispositivo genérico para<br />
resolver la interfaz a periféricos externos<br />
– PPI = “Programmable Peripheral Interface”, o interfaz<br />
programable de periféricos.<br />
– Ofrece al uC 3 puertos de 8 bits cada uno que se<br />
pueden configurar como entradas o salidas<br />
• No realmente bidireccionales<br />
– Está especialmente diseñado para ser conectado a un<br />
bus de microcontroladores de 8 bits como los MCS-51<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
30 de 55
Expansión de Entrada/Salida digital<br />
El PPI8255<br />
• El PPI8255 es un dispositivo genérico para<br />
resolver la interfaz a periféricos externos<br />
– Para la conexión con el procesador, el 8255 se<br />
direcciona como un dispositivo con 4 posiciones de<br />
memoria<br />
• Las tres primeras posiciones corresponden a los registros<br />
asociados a cada uno de los puertos<br />
• La cuarta posición corresponde a un registro interno de control<br />
• Señales /CS, /RD, /WR, A1-A0, D7-D0, RESET<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
31 de 55
Expansión de Entrada/Salida digital<br />
Arquitectura del PPI8255<br />
• Esquema de bloques<br />
Conexión<br />
al<br />
μC<br />
D7-D0<br />
A1, A0<br />
/WR<br />
/RD<br />
/CS<br />
RESET<br />
8<br />
Buffer<br />
datos<br />
Bloque<br />
control<br />
Puerto<br />
A<br />
Puerto<br />
C H<br />
Puerto<br />
C L<br />
Puerto<br />
B<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
8<br />
4<br />
4<br />
8<br />
Conexión<br />
a los<br />
periféricos<br />
32 de 55
Expansión de Entrada/Salida digital<br />
Arquitectura del PPI8255<br />
• La entrada de RESET=1 inicializa el dispositivo<br />
– <strong>Modo</strong> 0 (entrada) para todos los puertos<br />
• Mapa de posiciones<br />
internas de memoria<br />
A1 A0<br />
0 0<br />
0 1<br />
1 0<br />
1 1<br />
• El valor escrito en el registro de control<br />
– Configura el modo de operación<br />
– Pone a 0/1 una línea del puerto C (bit set/reset)<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Registro<br />
Registro puerto A<br />
Registro puerto B<br />
Registro puerto C<br />
Registro control<br />
33 de 55
Expansión de Entrada/Salida digital<br />
Arquitectura del PPI8255<br />
• Conexión del PPI8255 al uC<br />
8<br />
8<br />
4<br />
4<br />
A D7-0<br />
A1-0<br />
B<br />
8255<br />
C H<br />
C L<br />
D7-D0 uC<br />
/CS<br />
/RD<br />
/WR<br />
8<br />
2<br />
8<br />
/CS 8255<br />
D7-D0 uC<br />
A15-A0 uC<br />
Circuito<br />
Decodif.<br />
O<br />
Latch<br />
D LE /RDuC /WRuC P0 uC ALE P2 /RD /WR<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
8<br />
8<br />
/RD uC<br />
/WR uC<br />
A15-A0 uC<br />
DATOS<br />
DIR<br />
RAM-1<br />
/CS<br />
/RD<br />
/WR<br />
DATOS<br />
DIR<br />
RAM-2<br />
/CS<br />
/RD<br />
/WR<br />
34 de 55
Expansión de Entrada/Salida digital<br />
El registro de control del PPI8255<br />
• Configuración del modo de operación<br />
– Escritura en el registro de control con el bit 7 = 1<br />
Reg. control:<br />
00: básico<br />
01: protocolo<br />
1x: bidireccional con<br />
protocolo (half-duplex)<br />
0: salida<br />
1: entrada<br />
MSB LSB<br />
1 MA1 MA0 DA DCH MB DB DCL<br />
<strong>Modo</strong> puerto A<br />
Dirección pto. A<br />
Dirección parte alta pto. C<br />
Dirección pto. B<br />
Dirección parte baja pto. C<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
<strong>Modo</strong><br />
pto. B<br />
0: básico<br />
1: protocolo<br />
35 de 55
Expansión de Entrada/Salida digital<br />
El registro de control del PPI8255<br />
• El puerto A puede funcionar en cualquier modo<br />
– Es el único puerto que puede funcionar en modo 2<br />
• El puerto B puede funcionar en modos 0 ó 1<br />
– <strong>Modo</strong> 0 (entrada), modo 0 (salida), modo 1 (entrada) o<br />
modo 1 (salida)<br />
• El puerto C sólo puede funcionar en modo 0<br />
– <strong>Modo</strong> 0 (e) o modo 0 (s)<br />
– Configuración independiente de la parte alta y baja<br />
– Sólo para las líneas que no sean de control de los<br />
protocolos de los otros puertos<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
36 de 55
Expansión de Entrada/Salida digital<br />
El registro de control del PPI8255<br />
• Configuración del modo de operación<br />
– Los modos con protocolo utilizan líneas adicionales a<br />
las del puerto para controlar la transferencia<br />
• Permite adaptar uC y periféricos de velocidades de trabajo muy<br />
diferentes<br />
– El más rápido se adapta al más lento<br />
• Está basado en un procedimiento de handshaking:<br />
– El receptor debe dar su permiso antes de poder enviar<br />
– Una vez enviado el dato, el emisor activa una señal de aviso para<br />
que el receptor “sepa” que hay un dato “nuevo” que recoger y<br />
procesar<br />
– El uC puede ser avisado mediante una línea de interrupción o<br />
gestionar el protocolo mediante consulta de estado<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
37 de 55
Expansión de Entrada/Salida digital<br />
El registro de control del PPI8255<br />
• Configuración del modo de operación<br />
– El puerto A es el único puerto que puede funcionar en<br />
todos los modos (0, 1 y 2)<br />
• Las líneas adicionales utilizadas para los modos con protocolo<br />
se toman del puerto C (de la parte alta)<br />
– El puerto B puede funcionar en modos 0 ó 1<br />
• Las líneas adicionales utilizadas para el modo de transferencia<br />
con protocolo se toman del puerto C (de la parte baja)<br />
– El puerto C sólo puede funcionar en modo 0<br />
• Y sólo las líneas que no se hayan reservado para<br />
transferencias con protocolo de los puertos A o B<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
38 de 55
Expansión de Entrada/Salida digital<br />
El registro de control del PPI8255<br />
• Operación de puesta a 0 ó 1 de un bit del pto C<br />
– Esta operación se denomina bit set/reset del pto C<br />
– Se consigue escribiendo una palabra en el registro de<br />
control con el bit 7 = 0<br />
– La línea del puerto C indicada en la operación debe<br />
estar configurada como salida,<br />
– y no debe estar asociada a protocolo<br />
Reg. control:<br />
MSB LSB<br />
0 - - - b2 b1 b0 v<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Número bit puerto C (de 0 a 7)<br />
Número valor línea (0 ó 1)<br />
39 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 0<br />
• <strong>Modo</strong> 0: E/S básica<br />
– Una línea sólo puede ser entrada o salida<br />
– Las salidas son registradas<br />
• El uC escribe en el registro asociado al puerto, y su valor se<br />
saca a las líneas del puerto<br />
– Las entradas no son registradas<br />
• El uC lee directamente de los pines del puerto<br />
– Líneas libres puerto C (no asociadas a protocolo)<br />
• CH = bits 7..4 (todas)<br />
• CL = bits 3..0 (todas)<br />
– 16 combinaciones de modo<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
40 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1<br />
• <strong>Modo</strong> 1: E o S con protocolo ( strobed I/O )<br />
– La salidas y las entradas son registradas<br />
• El dato en los pines del puerto se registra en el flanco de una<br />
de las señales de protocolo<br />
– Los puertos A y B pueden estar configurados en<br />
diferente modo y/o dirección<br />
• 16 combinaciones de modo (E ó S para A, B, C H, C L)<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
41 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1<br />
• <strong>Modo</strong> 1: E o S con protocolo ( strobed I/O )<br />
– Líneas libres del puerto C<br />
• En función del modo del puerto A, del CH los bits C7 y C6 si es<br />
modo entrada (ó C5 y C4 si es modo salida)<br />
– También C3 si se usa el protocolo sin interrupciones<br />
• Del CLel bit C0 si se usa el protocolo sin interrupciones en el<br />
puerto B<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
42 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Entrada)<br />
• <strong>Modo</strong> 1 (entrada): Líneas de protocolo<br />
–/STB (Strobe): Del periférico al 8255<br />
• Orden para registrar el dato presente en el puerto<br />
–IBF (Input Buffer Full): Del 8255 al periférico<br />
• Respuesta a /STB. El periférico debe esperar hasta que se<br />
desactive<br />
• Se desactiva cuando el μC lee el dato recién registrado<br />
– INTR (Interrupt Request): Del 8255 al μC<br />
• Aviso de que hay un dato que recoger<br />
• Sólo se genera si el bit de habilitación INTEx = 1 (si no, el μC<br />
deberá hacer lecturas para consultar el estado y determinar el<br />
valor de IBF)<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
43 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Entrada)<br />
• <strong>Modo</strong> 1 (entrada)<br />
– /STB, IBF e INTR son las líneas de protocolo<br />
Bit<br />
PC2<br />
Habilitación de interrupciones (a nivel alto) hacia el uC. Bit PC4<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Del periférico<br />
Al periférico<br />
Al μC<br />
(opcional)<br />
44 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Entrada)<br />
• <strong>Modo</strong> 1 (entrada): Cronograma del protocolo<br />
/STB<br />
IBF<br />
INTR<br />
RD<br />
t0 t1 t2<br />
Puerto<br />
Nuevo dato<br />
tk tk+1<br />
t0. El periférico pone un nuevo dato en el puerto y activa /STB para indicar al 8255 que debe<br />
registrarlo (puede hacerlo porque IBF=0). El 8255 captura el dato en el registro interno y activa IBF<br />
para frenar al periférico<br />
t1. El periférico acepta la orden de esperar antes de enviar más datos y lo indica desactivando /STB<br />
t2. El 8255 activa la petición del interrupción para que el uC lea el nuevo dato<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
45 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Entrada)<br />
• <strong>Modo</strong> 1 (entrada): Cronograma del protocolo<br />
/STB<br />
IBF<br />
INTR<br />
RD<br />
t0 t1 t2<br />
Puerto<br />
Nuevo dato<br />
tk tk+1<br />
tk. Al comienzo del ciclo de lectura del uC, el 8255 desactiva la petición del interrupción<br />
tk+1. Al finalizar del ciclo de lectura del uC (cuando el dato ya ha sido leído por el uC) el 8255<br />
desactiva IBF dando así permiso al periférico para enviar un nuevo dato.<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
46 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Salida)<br />
• <strong>Modo</strong> 1 (salida): Líneas de protocolo<br />
– /OBF (Output Buffer Full): Del 8255 al periférico<br />
• Orden de registrar el dato presente en el puerto, se activa<br />
cuando el uC escribe un nuevo dato<br />
–/ACK (Acknowledge): Del periférico al 8255<br />
• Respuesta a /OBF. El periférico indica que está procesando el<br />
nuevo dato, y que el 8255 debe esperar antes de poder enviar<br />
otro dato<br />
– INTR (Interrupt Request): Del 8255 al μC<br />
• Aviso de que el periférico ha procesado el último dato enviado<br />
y por tanto se le puede enviar otro<br />
• Sólo se genera si el bit de habilitación INTEx = 1<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
47 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Salida)<br />
• <strong>Modo</strong> 1 (salida)<br />
Bit<br />
PC6<br />
– /OBF, /ACK e INTR son las líneas de protocolo<br />
Bit<br />
PC2<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Al periférico<br />
Del periférico<br />
Al μC<br />
(opcional)<br />
48 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Salida)<br />
• <strong>Modo</strong> 1 (salida): Cronograma del protocolo<br />
/WR<br />
/OBF<br />
INTR<br />
/ACK<br />
Nuevo dato<br />
Puerto<br />
t0 t1 t2 t3<br />
t0. El uC escribe un nuevo dato. El 8255 lo almacena y saca por las líneas del puerto, activando /OBF<br />
para indicar al periférico que debe recogerlo. Simultáneamente desactiva la petición de interrupción<br />
t1. El periférico acepta el dato y activa /ACK para frenar el envío de nuevos datos<br />
t2. El 8255 reconoce que el periférico ha recogido el dato y acepta la orden de esperar antes de<br />
continuar enviando nuevos datos desactivando /OBF<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
49 de 55
Expansión de Entrada/Salida digital<br />
<strong>Modo</strong>s de funcionamiento del<br />
PPI8255: <strong>Modo</strong> 1 (Salida)<br />
• <strong>Modo</strong> 1 (salida): Cronograma del protocolo<br />
/WR<br />
/OBF<br />
INTR<br />
/ACK<br />
Puerto<br />
t0<br />
Nuevo dato<br />
t1 t2 t3<br />
t3. Al finalizar el proceso con el nuevo dato el periférico desactiva /ACK, lo que permite que el 8255<br />
envíe nuevos datos. Para continuar enviando, el 8255 activa la petición de interrupción al uC.<br />
Volvemos a la situación previa a t0.<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
50 de 55
Expansión de Entrada/Salida digital<br />
El puerto C del PPI8255 en los modos<br />
con protocolo<br />
• Uso reservado de los pines del puerto C<br />
<strong>Modo</strong> 1 (E)<br />
<strong>Modo</strong> 1 (S) /OBF A /ACK A<br />
PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 IBFA /STBA INTRA /STBB IBFB • Uso reservado del registro del puerto C<br />
<strong>Modo</strong> 1 (E)<br />
<strong>Modo</strong> 1 (S) /OBFA INTEA Puerto A configurado<br />
en modo 1<br />
INTR A<br />
IBF A INTE A INTR A<br />
INTR A<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
/OBF B /ACK B<br />
INTE B<br />
IBF B<br />
INTE B /ACK B<br />
INTR B<br />
INTR B<br />
PC 7 PC 6 PC 5 PC 4 PC 3 PC 2 PC 1 PC 0<br />
Puerto B configurado<br />
en modo 1<br />
INTRB INTRB 51 de 55
Expansión de Entrada/Salida digital<br />
PPI8255 - ANEXO:<br />
<strong>Modo</strong> 2 (bidireccional)<br />
• <strong>Modo</strong> 2: E/S bidireccional con protocolo<br />
– Sólo aplicable al puerto A<br />
– El protocolo utilizado es la combinación de los<br />
protocolos de entrada y salida del modo 1<br />
• Si concurren en el tiempo una transferencia de salida y otra de<br />
entrada, el protocolo decide cual se hace primero (la<br />
comunicación es half-duplex)<br />
– Líneas libres del puerto C<br />
• CH = ninguna<br />
• CL = depende del modo del puerto B<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
52 de 55
Expansión de Entrada/Salida digital<br />
PPI8255 - ANEXO:<br />
<strong>Modo</strong> 2 (bidireccional)<br />
• <strong>Modo</strong> 2 (bidireccional)<br />
– /OBF, /ACK, INTR:<br />
Protocolo para la salida<br />
– /STB, IBF, INTR: Protocolo<br />
para la entrada<br />
Bit PC6 (Hab. INTR salida)<br />
Bit PC4 (Hab. INTR entrada)<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
53 de 55
Expansión de Entrada/Salida digital<br />
PPI8255 - ANEXO:<br />
<strong>Modo</strong> 2 (bidireccional)<br />
• <strong>Modo</strong> 2: E/S bidireccional con protocolo<br />
– Garantía de que no ocurren colisiones en el puerto A<br />
(datos fluyendo 8255 ⇒ periférico y periférico ⇒ 8255<br />
simultáneamente)<br />
• El 8255 y el periférico mantienen el puerto A en alta impedancia<br />
el mayor tiempo posible<br />
• Cuando el periférico está dispuesto a procesar un dato del μC<br />
(indicado con /ACK = 0). Sólo entonces el dato del 8255 sale por<br />
el puerto A<br />
• Si el periférico activa /STB está indicando que el 8255 debe<br />
capturar un dato para el μC. Entonces el valor del puerto A es<br />
capturado. Una vez capturado el puerto A vuelve a alta<br />
impedancia<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
54 de 55
Expansión de Entrada/Salida digital<br />
PPI8255 - ANEXO:<br />
<strong>Modo</strong> 2 (bidireccional)<br />
• <strong>Modo</strong> 2 (bidireccional): Cronograma<br />
Dato periférico Dato μC<br />
Contenidos sujetos a una Licencia Creative Commons 2.5:<br />
Reconocimiento – No comercial – Sin Obra Derivada<br />
Permiso<br />
periférico<br />
para sacar<br />
dato por el<br />
puerto<br />
55 de 55