Publicado el 14 de Enero del 2017
1.227 visualizaciones desde el 14 de Enero del 2017
412,2 KB
21 paginas
Creado hace 19a (08/03/2006)
Instrumentación de Tiempo Real
UNIVERSIDAD DE CANTABRIA
Tema 1. Introducción
Tema 2. Recursos de acceso al hardware
Tema 3. Interrupciones
Tema 4. Puertas básicas de entrada/salida (I)
Tema 5. Recursos de temporización de bajo nivel
Tema 6. Multitarea en Ada
Tema 7. Puertas básicas de entrada/salida (II)
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
1
Mapas de memoria y mapas de
entrada/salida
UNIVERSIDAD DE CANTABRIA
El acceso a la memoria y a los dispositivos de E/S se realiza
mediante los buses de datos, direcciones y control:
RAM
...
Bus de datos
Bus de direcciones
Bus de control
...
D0
D31
...
A0
A31
...
BUSY
...
M/IO
...
LOCK
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
2
Mapas de memoria y mapas de
entrada/salida
(cont.)
UNIVERSIDAD DE CANTABRIA
En algunas arquitecturas no hay diferencia entre registros de
E/S y registros de memoria (p.e. familia 68K de Motorola)
• los registros de E/S se
$000000
encuentran
"mapeados" en
posiciones de memoria
• se accede a ellos
utilizando las mismas
instrucciones que para
acceder a la memoria
Memoria RAM
(256 Kb)
No utilizado
Dispositivos de E/S
(256 bytes)
No utilizado
Memoria ROM
(32 Kb)
Vect. Interrupción
$03FFFF
$080000
$0800FF
$FF8000
$FFFEFF
$FFFF00
$FFFFFF
$080000
$080004
$080008
$08000F
Teclado
No utilizado
Puerta Serie
No utilizado
$0800F0
$0800F8
$0800FF
Temporizador
No utilizado
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
3
Mapas de memoria y mapas de
entrada/salida
(cont.)
UNIVERSIDAD DE CANTABRIA
En otras arquitecturas los mapas de memoria y de E/S son
independientes (p.e. familia x86 de Intel)
• se utilizan
instrucciones
diferentes para acceder
a la memoria (MOV, XCHG,
etc.) o a los registros
de E/S (IN, OUT, etc.)
• con la línea MEM/IO del
bus de control se
selecciona el mapa
Mapa de Memoria
Mapa de E/S
$000000
$03FFFF
Memoria RAM
(256 Kb)
No utilizado
$FF8000
$FFFEFF
$FFFF00
$FFFFFF
Memoria ROM
(32 Kb)
Vect. Interrupción
$0000
$0004
$0008
$000F
Teclado
No utilizado
Puerta Serie
No utilizado
$00F0
$00F8
$00FF
Temporizador
No utilizado
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
4
Mapas de memoria y mapas de
entrada/salida
(cont.)
UNIVERSIDAD DE CANTABRIA
Mapa de E/S
de un PC
$02FF
$02F8
$0063
$0060
$0043
$0040
$0023
$0020
$000F
$0000
COM 2
8255
(PPI)
Timer
Controlador de
Interrupciones
Controlador de
DMA
$FFFF
$03FF
$03F8
$03F7
$03F0
$03DF
$03D0
$037F
$0378
$032F
$0320
Área de
expansión
de E/S
COM 1
Disquete
Adaptador
CGA
LPT 1
Disco
duro
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
5
Instanciación física de variables
UNIVERSIDAD DE CANTABRIA
Text
(Código)
Data
(Datos)
Heap
(Montículo)
Disponible
Stack
(Pila)
de un programa
Estructura
en memoria
procedure Ejemplo_Memoria is
type Int_10 is range 1 .. 10;
D1 : Int_10;
D2 : Float := 1.0;
D3 : access all Integer;
no tiene
representación
en memoria
procedure Un_Proc is
S : Integer;
begin
...;
end Un_Proc;
begin
D3 := new Integer;
D1 := 2 * Int_10 (D2);
...;
end Ejemplo_Memoria;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
6
Acceso a direcciones de memoria
física
UNIVERSIDAD DE CANTABRIA
En ocasiones es necesario acceder a una posición
determinada del mapa memoria para acceder a los
dispositivos de E/S:
• También en la arquitectura Intel x86
- dispositivos PCI mapeados en memoria
- acceso directo a memoria de video
Para ubicar una variable en una posición de memoria:
N : Integer;
for N’address use 16#EF5A01#;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
7
Acceso a direcciones de memoria
física
(cont.)
UNIVERSIDAD DE CANTABRIA
Para asignar una variable puntero a una dirección absoluta:
with MaRTE_OS;
with Ada.Unchecked_Conversion;
with Basic_Integer_Types; use Basic_Integer_Types;
procedure Asigna_Punteros is
type Mi_Entero is range 1 .. 100;
type Puntero_A_Mi_Entero is access all Mi_Entero;
function Asigna_Direccion is
new Ada.Unchecked_Conversion (Unsigned_32,
Puntero_A_Mi_Entero);
Un_Puntero : Puntero_A_Mi_Entero;
begin
Un_Puntero := Asigna_Direccion (16#F7B45#);
end Asigna_Punteros;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
8
Acceso a los registros de E/S
UNIVERSIDAD DE CANTABRIA
En la arquitectura Intel x86 el acceso a las direcciones de E/S
se realiza mediante instrucciones ensamblador especiales:
• inb, outb, inw, outw, inl, outl
Para acceder a las direcciones de E/S desde el lenguaje Ada,
MaRTE OS proporciona el paquete IO_Interface
• con funciones y procedimientos para leer y escribir bytes,
words (2 bytes) y long words (4 bytes)
• para cada función y procedimiento existe una versión que
realiza un retraso después de la lectura o escritura del dato
- necesarias para acceder a dispositivos lentos o cuando
se realizan muchos accesos seguidos
- son las operaciones terminadas en "_P"
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
9
Acceso a los registros de E/S (cont.)
UNIVERSIDAD DE CANTABRIA
package IO_Interface is
-- Registros de E/S (también llamados "Ports")
type IO_Port is range 0 .. 16#FFFF#;
-- Lee un byte de un registro de E/S
function Inb (Port : in IO_Port) return Unsigned_8;
function Inb_P (Port : in IO_Port) return Unsigned_8;
-- Lee un word (2 bytes) de 2 registros consecutivos
function Inw (Port : in IO_Port) return Unsigned_16;
function Inw_P (Port : in IO_Port) return Unsigned_16;
-- Lee un long word (4 bytes) de 4 reg. consecutivos
function Inl (Port : in IO_Port) return Unsigned_32;
function Inl_P (Port : in IO_Port) return Unsigned_32;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
10
Acceso a los registros de E/S (cont.)
UNIVERSIDAD DE CANTABRIA
-- Escribe un byte en un registro de E/S
procedure Outb (Port : in IO_Port; Val : in Unsigned_8);
procedure Outb_P (Port : in IO_Port;
Val : in Unsigned_8);
-- Escribe un word (2 bytes) 2 registros consecutivos
procedure Outw (Port : in IO_Port;
Val : in Unsigned_16);
procedure Outw_P (Port : in IO_Port;
Val : in Unsigned_16);
-- Escribe un long word (4 bytes) en 4 reg. consecutivos
procedure Outl (Port : in IO_Port;
Val : in Unsigned_32);
procedure Outl_P (Port : in IO_Port;
Val : in Unsigned_32);
end IO_Interface;
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
11
Ejemplo:
Lectura de un convertidor A/D
UNIVERSIDAD DE CANTABRIA
Un convertidor Analógico a Digital convierte una tensión de
entrada (Vi) a un valor numérico proporcional al valor de Vi
Convertidor A/D de 12 bits de resolución y ganancia
regulable:
LoDato ($240)
HiDato ($241)
D3 D2 D1 D0 X
X
X
X
D11 D10 D9 D8 D7 D6 D5 D4
Ganancia ($244)
Estado ($246)
X
B
X
X
X
X
X
X
R3 R2 R1 R0
X
X
X
X
Ganancia R3 R2 R1 R0
1 0 0 0 1
2 0 0 1 0
4 0 1 0 0
8 1 0 0 0
16 0 0 0 0
Vs
G
Vi
A/D
D11-D0
Dato
$FFF
-10V
Vi
+10V
$000
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
12
Ejemplo:
Convertidor A/D
(cont.)
UNIVERSIDAD DE CANTABRIA
Modo de operación del convertidor A/D:
• La ganancia se configura escribiendo en el registro
Ganancia
• La conversión se inicia escribiendo cualquier valor en el
registro Estado
• El fin de la conversión se detecta por el cambio de 1 a 0 del
bit B del registro Estado
• El resultado de la conversión se lee de HiDato y LoDato
• El valor resultante de la conversión se obtiene "uniendo"
ambos registros:
Resultado Conversión :=
D11 D10 D9 D8 D7 D6 D5 D4
D3 D2 D1 D0
HiDato
LoDato
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
13
Ejemplo:
Convertidor A/D
(cont.)
UNIVERSIDAD DE CANTABRIA
La fórmula que relaciona el dato leido del convertidor con el
valor real de la magnitud medida es:
ValorReal
=
20
------------ Dato
10–
4095
------------------------------------------------
+
×
Ganancia
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
14
Ejemplo:
Convertidor A/D
(cont.)
UNIVERSIDAD DE CANTABRIA
with MaRTE_OS;
with Basic_Integer_Types; use Basic_Integer_Types;
with IO_Interface;
with Ada.Text_IO; use Ada.Text_IO;
procedure Lee_Convertidor is
-- Direcciones de los registros de E/S del convertidor
Reg_Lo_Dato : constant IO_Interface.IO_Port := 16#240#;
Reg_Hi_Dato : constant IO_Interface.IO_Port := 16#241#;
Reg_Ganancia : constant IO_Interface.IO_Port := 16#244#;
Reg_Estado : constant IO_Interface.IO_Port := 16#246#;
-- Valores de la ganancia
type Valores_Ganancia is (G1, G2, G4, G8, G16);
GRUPO DE COMPUTADORES Y TIEMPO REAL
DPTO. DE ELECTRÓNICA Y COMPUTADORES
© Mario Aldea Rivas
2/Mar/06
15
Ejemplo:
Convertidor A/D
(cont.)
UNIVERSIDAD DE CANTABRIA
-- Conversión entre los valores de la ganancia y
-- el código binario que les representa
Codigo_Ganancia : constant array (Valores_Ganancia)
of Basic_Integer_Types.Unsigned_8 := (G1 => 16#01#,
G2 => 16#02#,
G4 => 16#04#,
Comentarios de: Instrumentación de Tiempo Real - Tema 2. Recursos de acceso al hardware (0)
No hay comentarios