PDF de programación - Instrumentación de Tiempo Real - Tema 2. Recursos de acceso al hardware

Imágen de pdf Instrumentación de Tiempo Real - Tema 2. Recursos de acceso al hardware

Instrumentación de Tiempo Real - Tema 2. Recursos de acceso al hardwaregráfica de visualizaciones

Publicado el 14 de Enero del 2017
577 visualizaciones desde el 14 de Enero del 2017
412,2 KB
21 paginas
Creado hace 13a (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#,
  • Links de descarga
http://lwp-l.com/pdf1079

Comentarios de: Instrumentación de Tiempo Real - Tema 2. Recursos de acceso al hardware (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad